import 'package:wonders/common_libs.dart'; import 'package:wonders/logic/common/save_load_mixin.dart'; import 'package:wonders/logic/data/collectible_data.dart'; class CollectiblesLogic with ThrottledSaveLoadMixin { @override String get fileName => 'collectibles.dat'; /// Holds all collectibles that the views should care about final List all = collectiblesData; /// Current state for each collectible final statesById = ValueNotifier>({}); CollectibleData? fromId(String? id) => id == null ? null : all.firstWhereOrNull((o) => o.id == id); List forWonder(WonderType wonder) { return all.where((o) => o.wonder == wonder).toList(growable: false); } void updateState(String id, int state) { Map states = Map.of(statesById.value); states[id] = state; statesById.value = states; scheduleSave(); } bool isLost(WonderType wonderType, int i) { final datas = forWonder(wonderType); final states = statesById.value; if (datas.length > i && states.containsKey(datas[i].id)) { return states[datas[i].id] == CollectibleState.lost; } return true; } void reset() { Map states = {}; for (int i = 0; i < all.length; i++) { states[all[i].id] = CollectibleState.lost; } statesById.value = states; debugPrint('collection reset'); scheduleSave(); } @override void copyFromJson(Map value) { Map states = {}; for (int i = 0; i < all.length; i++) { String id = all[i].id; states[id] = value[id] ?? CollectibleState.lost; } statesById.value = states; } @override Map toJson() => statesById.value; }