Files
dungeon_world_data/lib/_old/mappers.dart
2022-02-13 02:00:03 +02:00

79 lines
2.7 KiB
Dart

import 'spell.dart';
import 'alignment.dart';
import 'equipment.dart';
import 'gear_choice.dart';
import 'move.dart';
import 'monster.dart';
import 'player_class.dart';
import 'tag.dart';
List<R> listMapper<T, R, A>(List<T>? lst, R Function(A obj) mapper) =>
lst != null && lst.isNotEmpty
? (List<A>.from(lst.where((obj) => obj != null && obj is A))
.map<R>((obj) => mapper(obj))
.toList())
: <R>[];
Map<K, V> mapMapper<K, V>(
Map? map, MapEntry<K, V> Function(dynamic key, dynamic obj) mapper) =>
map != null ? Map.from(map).map<K, V>(mapper) : {};
List<Move> moveListMapper(List? lst) => lst == null || lst.isEmpty
? <Move>[]
: listMapper<Map, Move, dynamic>(
List<Map>.from(lst), (v) => Move.fromJSON(v));
Map<String, Move> moveMapMapper(Map map) => mapMapper<String, Move>(
map, (k, v) => MapEntry<String, Move>(k.toString(), Move.fromJSON(v)));
Map<String, PlayerClass> classMapper(Map map) => mapMapper(
map,
(k, v) =>
MapEntry<String, PlayerClass>(k.toString(), PlayerClass.fromJSON(v)));
Map<String, List<String>> nameMapper(Map? map) =>
mapMapper<String, List<String>>(
map,
(k, v) => MapEntry<String, List<String>>(k.toString(),
listMapper<dynamic, String, dynamic>(v, (j) => j.toString())));
List<List<String>> looksMapper(List? lst) =>
listMapper(lst, (dynamic i) => listMapper(i, (dynamic j) => j.toString()));
Map<String, Alignment> alignmentsMapper(Map? map) => mapMapper(map,
(k, v) => MapEntry<String, Alignment>(k.toString(), Alignment.fromJSON(v)));
List<GearChoice> gearChoiceMapper(List? lst) =>
listMapper(lst, (dynamic v) => GearChoice.fromJSON(v));
List<GearOption> gearOptionMapper(List? lst) =>
listMapper(lst, (dynamic v) => GearOption.parse(v));
Map<String, Equipment> equipmentMapper(Map map) => mapMapper(map,
(k, v) => MapEntry<String, Equipment>(k.toString(), Equipment.fromJSON(v)));
List<Spell> spellsMapper(List? lst) {
if (lst == null) {
return [];
}
return listMapper(lst, (dynamic v) => Spell.fromJSON(v));
}
Map<String, Monster> monsterMapper(Map map) => mapMapper(map,
(k, v) => MapEntry<String, Monster>(k.toString(), Monster.fromJSON(v)));
Map<String, Tag> tagMapper(Map map) => mapMapper(
map, (k, v) => MapEntry<String, Tag>(k.toString(), Tag.fromJSON(v)));
Map<String, Tag> tagInfoMapper(Map map) => mapMapper(map, (k, v) {
var cleanName = v['name']
.toString()
.replaceAll(RegExp(r'[^a-z]', caseSensitive: false), ' ')
.trim()
.replaceFirst(RegExp(r'^n\s'), '')
.trim();
return MapEntry<String, Tag>(
k.toString(), Tag(cleanName, null, v['description']));
});