From 814e270eef7777342e90ec254f6e38ade707cec8 Mon Sep 17 00:00:00 2001 From: Aaron Fischer Date: Sun, 11 Aug 2019 23:37:12 +0200 Subject: [PATCH] add warband rating --- mobile-app/lib/data/warband_roster.dart | 36 ++++++++++++++++--- mobile-app/lib/data/warband_roster.g.dart | 4 +++ .../lib/widgets/warband_drawer_widget.dart | 2 +- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/mobile-app/lib/data/warband_roster.dart b/mobile-app/lib/data/warband_roster.dart index 9754534..e276907 100644 --- a/mobile-app/lib/data/warband_roster.dart +++ b/mobile-app/lib/data/warband_roster.dart @@ -63,6 +63,9 @@ class HenchmenGroup extends Unit { @JsonKey(ignore: true) int experience; + @JsonKey(defaultValue: false) + bool large; + @JsonKey( fromJson: Unit._statsFromJson, toJson: Unit._statsToJson, required: true) final Stats stats; @@ -73,7 +76,8 @@ class HenchmenGroup extends Unit { @JsonKey(fromJson: Unit._splitListFromJson, toJson: Unit._joinListToJson) final List armour; - HenchmenGroup(this.header, this.stats, this.weapons, this.armour) { + HenchmenGroup( + this.header, this.stats, this.weapons, this.armour, this.large) { this.name = this.header['name']; this.type = this.header['type']; this.number = int.tryParse(this.header['number']) ?? 1; @@ -144,12 +148,14 @@ class Hero extends Unit { @JsonKey(defaultValue: 0) final int warbandaddition; + @JsonKey(defaultValue: false) + bool large; @JsonKey(defaultValue: false, name: 'hiredsword') final bool hiredSword; Hero(this.stats, this.skilllists, this.weapons, this.armour, this.rules, - this.warbandaddition, this.header, this.hiredSword) { + this.warbandaddition, this.large, this.header, this.hiredSword) { this.name = this.header['name']; this.type = this.header['type']; this.experience = int.tryParse(this.header['experience']) ?? 0; @@ -309,9 +315,29 @@ class WarbandRoster { this.race = this.nameAndRace['race']; } - int experience() { - // TODO: Calculate - return 1337; + int rating() { + int rating = 0; + + heros.forEach((hero) { + rating += hero.experience; + rating += hero.warbandaddition; + rating += 5; + + if (hero.large) { + rating += 15; + } + }); + + henchmenGroups.forEach((henchmenGroup) { + rating += henchmenGroup.experience * henchmenGroup.number; + rating += 5 * henchmenGroup.number; + + if (henchmenGroup.large) { + rating += 15 * henchmenGroup.number; + } + }); + + return rating; } static HashMap _warbandNameAndRaceFromJson( diff --git a/mobile-app/lib/data/warband_roster.g.dart b/mobile-app/lib/data/warband_roster.g.dart index c0d08d7..30dc91f 100644 --- a/mobile-app/lib/data/warband_roster.g.dart +++ b/mobile-app/lib/data/warband_roster.g.dart @@ -13,12 +13,14 @@ HenchmenGroup _$HenchmenGroupFromJson(Map json) { Unit._statsFromJson(json['stats'] as String), Unit._splitListFromJson(json['weapons'] as String), Unit._splitListFromJson(json['armour'] as String), + json['large'] as bool ?? false, ); } Map _$HenchmenGroupToJson(HenchmenGroup instance) => { 'group': HenchmenGroup._henchmengroupHeaderToJson(instance.header), + 'large': instance.large, 'stats': Unit._statsToJson(instance.stats), 'weapons': Unit._joinListToJson(instance.weapons), 'armour': Unit._joinListToJson(instance.armour), @@ -33,6 +35,7 @@ Hero _$HeroFromJson(Map json) { Unit._splitListFromJson(json['armour'] as String), Unit._splitListFromJson(json['rules'] as String), json['warbandaddition'] as int ?? 0, + json['large'] as bool ?? false, Hero._heroHeaderFromJson(json['hero'] as String), json['hiredsword'] as bool ?? false, ); @@ -46,6 +49,7 @@ Map _$HeroToJson(Hero instance) => { 'armour': Unit._joinListToJson(instance.armour), 'rules': Unit._joinListToJson(instance.rules), 'warbandaddition': instance.warbandaddition, + 'large': instance.large, 'hiredsword': instance.hiredSword, }; diff --git a/mobile-app/lib/widgets/warband_drawer_widget.dart b/mobile-app/lib/widgets/warband_drawer_widget.dart index a9d74a6..aea9c6f 100644 --- a/mobile-app/lib/widgets/warband_drawer_widget.dart +++ b/mobile-app/lib/widgets/warband_drawer_widget.dart @@ -106,7 +106,7 @@ class WarbandDrawerWidget extends StatelessWidget { badgeColor: Colors.black12, shape: BadgeShape.square, borderRadius: 2, - badgeContent: Text(roster.experience().toString() + ' xp', + badgeContent: Text(roster.rating().toString(), style: TextStyle(color: Colors.white)), ), ),