From 8987e446a81160cd808f7d881f9fdf8b69f8ecc3 Mon Sep 17 00:00:00 2001 From: Yan Maniez Date: Sat, 16 May 2020 13:12:24 +0200 Subject: [PATCH] Origine --- .../player_character_bloc.dart | 10 ++- .../player_character_event.dart | 4 ++ .../player_character_state.dart | 15 ++++ aidedejeu_flutter/lib/databases/database.dart | 2 + .../lib/databases/database_sembast.dart | 6 ++ .../lib/databases/database_sqflite.dart | 5 ++ aidedejeu_flutter/lib/models/items.dart | 27 ++++++++ aidedejeu_flutter/lib/widgets/pceditor.dart | 69 +++++++++++++++++-- 8 files changed, 132 insertions(+), 6 deletions(-) diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart index 0bdeb793..f692a6e0 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_bloc.dart @@ -19,6 +19,8 @@ class PlayerCharacterBloc yield* _mapRaceEventToState(event); } else if (event is SubRaceEvent) { yield* _mapSubRaceEventToState(event); + } else if (event is OriginEvent) { + yield* _mapOriginEventToState(event); } else if (event is BackgroundEvent) { yield* _mapBackgroundEventToState(event); } else if (event is SubBackgroundEvent) { @@ -33,11 +35,14 @@ class PlayerCharacterBloc var subRaces = await _db.loadSubRaces(event.item); yield state.copyWithClean(race: event.item, subRaces: subRaces); } - Stream _mapSubRaceEventToState( SubRaceEvent event) async* { yield state.copyWith(subRace: event.item); } + Stream _mapOriginEventToState( + OriginEvent event) async* { + yield state.copyWith(origin: event.item); + } Stream _mapBackgroundEventToState( BackgroundEvent event) async* { var subBackgrounds = await _db.loadSubBackgrounds(event.item); @@ -50,7 +55,8 @@ class PlayerCharacterBloc Stream _mapLoadEventToState( LoadEvent event) async* { var races = await _db.loadRaces(); + var origins = await _db.loadOrigins(); var backgrounds = await _db.loadBackgrounds(); - yield state.copyWith(races: races, backgrounds: backgrounds); // state; + yield state.copyWith(races: races, origins: origins, backgrounds: backgrounds); // state; } } diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart index e4fe9186..c65aa2a0 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_event.dart @@ -20,6 +20,10 @@ class SubRaceEvent extends SetItemEvent { SubRaceEvent(SubRaceItem item) : super(item); } +class OriginEvent extends SetItemEvent { + OriginEvent(OriginItem item) : super(item); +} + class BackgroundEvent extends SetItemEvent { BackgroundEvent(BackgroundItem item) : super(item); } diff --git a/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart b/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart index e2843b8b..86a3dbb8 100644 --- a/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart +++ b/aidedejeu_flutter/lib/blocs/player_character/player_character_state.dart @@ -8,6 +8,9 @@ class PlayerCharacterState extends Equatable { final List races; final List subRaces; + final OriginItem origin; + final List origins; + final BackgroundItem background; final SubBackgroundItem subBackground; final List backgrounds; @@ -18,6 +21,8 @@ class PlayerCharacterState extends Equatable { this.races, this.subRace, this.subRaces, + this.origin, + this.origins, this.background, this.backgrounds, this.subBackground, @@ -29,6 +34,8 @@ class PlayerCharacterState extends Equatable { List races, SubRaceItem subRace, List subRaces, + OriginItem origin, + List origins, BackgroundItem background, List backgrounds, SubBackgroundItem subBackground, @@ -39,6 +46,8 @@ class PlayerCharacterState extends Equatable { races: races ?? this.races, subRace: subRace ?? this.subRace, subRaces: subRaces ?? this.subRaces, + origin: origin ?? this.origin, + origins: origins ?? this.origins, background: background ?? this.background, backgrounds: backgrounds ?? this.backgrounds, subBackground: subBackground ?? this.subBackground, @@ -51,6 +60,8 @@ class PlayerCharacterState extends Equatable { List races, SubRaceItem subRace, List subRaces, + OriginItem origin, + List origins, BackgroundItem background, List backgrounds, SubBackgroundItem subBackground, @@ -61,6 +72,8 @@ class PlayerCharacterState extends Equatable { races: races ?? this.races, subRace: race != null ? null : subRace ?? this.subRace, subRaces: race != null ? subRaces : subRaces ?? this.subRaces, + origin: origin ?? this.origin, + origins: origins ?? this.origins, background: background ?? this.background, backgrounds: backgrounds ?? this.backgrounds, subBackground: background != null ? null : subBackground ?? this.subBackground, @@ -74,6 +87,8 @@ class PlayerCharacterState extends Equatable { subRace, races, subRaces, + origin, + origins, background, subBackground, backgrounds, diff --git a/aidedejeu_flutter/lib/databases/database.dart b/aidedejeu_flutter/lib/databases/database.dart index e32114da..0f33acd8 100644 --- a/aidedejeu_flutter/lib/databases/database.dart +++ b/aidedejeu_flutter/lib/databases/database.dart @@ -12,6 +12,8 @@ abstract class BaseDB { Future> loadSubRaces(RaceItem race); + Future> loadOrigins(); + Future> loadTypedItems({String itemType, Item item}); Future> loadBackgrounds(); diff --git a/aidedejeu_flutter/lib/databases/database_sembast.dart b/aidedejeu_flutter/lib/databases/database_sembast.dart index aa889932..389972e2 100644 --- a/aidedejeu_flutter/lib/databases/database_sembast.dart +++ b/aidedejeu_flutter/lib/databases/database_sembast.dart @@ -50,6 +50,12 @@ class SembastDB extends BaseDB { throw UnimplementedError(); } + @override + Future> loadOrigins() { + // TODO: implement loadOrigins + throw UnimplementedError(); + } + @override Future> loadBackgrounds() { // TODO: implement loadBackgrounds diff --git a/aidedejeu_flutter/lib/databases/database_sqflite.dart b/aidedejeu_flutter/lib/databases/database_sqflite.dart index 4c160b48..c3bcc055 100644 --- a/aidedejeu_flutter/lib/databases/database_sqflite.dart +++ b/aidedejeu_flutter/lib/databases/database_sqflite.dart @@ -152,6 +152,11 @@ class SqfliteDB extends BaseDB { return null; } + @override + Future> loadOrigins() async { + return loadTypedItems(itemType: "OriginItem"); + } + @override Future> loadBackgrounds() async { return loadTypedItems(itemType: "BackgroundItem"); diff --git a/aidedejeu_flutter/lib/models/items.dart b/aidedejeu_flutter/lib/models/items.dart index 7f08e02b..465ac9ae 100644 --- a/aidedejeu_flutter/lib/models/items.dart +++ b/aidedejeu_flutter/lib/models/items.dart @@ -334,6 +334,29 @@ class RaceItems extends FilteredItems { } } +class OriginItem extends Item { + String regionsOfOrigin; + String mainLanguages; + String aspirations; + String availableSkills; + + OriginItem(Map map) : super(map) { + this.regionsOfOrigin = map["RegionsOfOrigin"]; + this.mainLanguages = map["MainLanguages"]; + this.aspirations = map["Aspirations"]; + this.availableSkills = map["AvailableSkills"]; + } +} + +class OriginItems extends FilteredItems { + OriginItems(Map map) : super(map); + + @override + List toFilterList() { + return [].toList(); + } +} + class BackgroundItem extends Item { String skillProficiencies; String masteredTools; @@ -360,6 +383,10 @@ Item itemFromMap(Map map) { return SubRaceItem(map); case "RaceItems": return RaceItems(map); + case "OriginItem": + return OriginItem(map); + case "OriginItems": + return OriginItems(map); case "BackgroundItem": return BackgroundItem(map); case "SubBackgroundItem": diff --git a/aidedejeu_flutter/lib/widgets/pceditor.dart b/aidedejeu_flutter/lib/widgets/pceditor.dart index 4d856087..2ba1d83f 100644 --- a/aidedejeu_flutter/lib/widgets/pceditor.dart +++ b/aidedejeu_flutter/lib/widgets/pceditor.dart @@ -135,6 +135,64 @@ class PCEditorPage extends StatelessWidget { : SizedBox.shrink(); } + Widget _buildOriginsWidget(BuildContext context, PlayerCharacterState state) { + return _buildItemsWidget( + context, + state, + hintText: "Origine", + items: state.origins, + selectedItem: state.origin, + onChanged: (value) { + //state.setRace(value); + BlocProvider.of(context).add(OriginEvent(value)); + }, + ); + } + + + Widget _buildOriginDetailsWidget( + BuildContext context, PlayerCharacterState state) { + return state.origin != null + ? Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildSubTitle(context, state, + "RegionsOfOrigin"), + //AppLocalizations.of(context).raceAbilityScoreIncrease), + _buildMarkdown(context, state, state.origin?.regionsOfOrigin), + Text(""), + _buildSubTitle( + context, state, "MainLanguages"), //AppLocalizations.of(context).raceAge), + _buildMarkdown(context, state, state.origin?.mainLanguages), + Text(""), + _buildSubTitle( + context, state, "Aspirations"), //AppLocalizations.of(context).raceAlignment), + _buildMarkdown(context, state, state.origin?.aspirations), + Text(""), + _buildSubTitle( + context, state, "AvailableSkills"), //AppLocalizations.of(context).raceSize), + _buildMarkdown(context, state, state.origin?.availableSkills), + //Text(""), + //_buildSubTitle( + // context, state, AppLocalizations.of(context).raceSpeed), + //_buildMarkdown(context, state, state.race?.speed), + //state.race?.darkvision != null ? Text("") : SizedBox.shrink(), + //state.race?.darkvision != null + // ? _buildSubTitle(context, state, + // AppLocalizations.of(context).raceDarkvision) + // : SizedBox.shrink(), + //state.race?.darkvision != null + // ? _buildMarkdown(context, state, state.race?.darkvision) + // : SizedBox.shrink(), + //Text(""), + //_buildSubTitle( + // context, state, AppLocalizations.of(context).raceLanguages), + //_buildMarkdown(context, state, state.race?.languages), + ], + ) + : SizedBox.shrink(); + } + Widget _buildBackgroundsWidget( BuildContext context, PlayerCharacterState state) { return _buildItemsWidget( @@ -204,7 +262,8 @@ class PCEditorPage extends StatelessWidget { indicatorSize: TabBarIndicatorSize.label, tabs: [ Text( - AppLocalizations.of(context).raceTitle, + "Origine", + //AppLocalizations.of(context).raceTitle, style: TextStyle( fontSize: 25, fontFamily: "Cinzel", @@ -247,9 +306,11 @@ class PCEditorPage extends StatelessWidget { margin: EdgeInsets.all(10.0), child: ListView( children: [ - _buildRacesWidget(context, state), - _buildSubRacesWidget(context, state), - _buildRaceDetailsWidget(context, state), + //_buildRacesWidget(context, state), + //_buildSubRacesWidget(context, state), + //_buildRaceDetailsWidget(context, state), + _buildOriginsWidget(context, state), + _buildOriginDetailsWidget(context, state), ], ), ),