diff --git a/games_richpresence/assets/helldivers/buttons/button_background.png b/games_richpresence/assets/helldivers/buttons/button_background.png new file mode 100644 index 0000000..4de554e Binary files /dev/null and b/games_richpresence/assets/helldivers/buttons/button_background.png differ diff --git a/games_richpresence/assets/helldivers/images/defense_icon.webp b/games_richpresence/assets/helldivers/images/defense_icon.webp new file mode 100644 index 0000000..032c607 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/defense_icon.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/challenging.webp b/games_richpresence/assets/helldivers/images/difficulties/challenging.webp new file mode 100644 index 0000000..980a9c1 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/challenging.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/easy.webp b/games_richpresence/assets/helldivers/images/difficulties/easy.webp new file mode 100644 index 0000000..f467213 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/easy.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/extreme.webp b/games_richpresence/assets/helldivers/images/difficulties/extreme.webp new file mode 100644 index 0000000..94ffc6b Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/extreme.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/hard.webp b/games_richpresence/assets/helldivers/images/difficulties/hard.webp new file mode 100644 index 0000000..6302108 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/hard.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/helldive.webp b/games_richpresence/assets/helldivers/images/difficulties/helldive.webp new file mode 100644 index 0000000..a6e4904 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/helldive.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/impossible.webp b/games_richpresence/assets/helldivers/images/difficulties/impossible.webp new file mode 100644 index 0000000..8f70859 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/impossible.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/medium.webp b/games_richpresence/assets/helldivers/images/difficulties/medium.webp new file mode 100644 index 0000000..569401d Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/medium.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/suicide.webp b/games_richpresence/assets/helldivers/images/difficulties/suicide.webp new file mode 100644 index 0000000..414f902 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/suicide.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/super_helldive.webp b/games_richpresence/assets/helldivers/images/difficulties/super_helldive.webp new file mode 100644 index 0000000..30720b1 Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/super_helldive.webp differ diff --git a/games_richpresence/assets/helldivers/images/difficulties/trivial.webp b/games_richpresence/assets/helldivers/images/difficulties/trivial.webp new file mode 100644 index 0000000..8741f3c Binary files /dev/null and b/games_richpresence/assets/helldivers/images/difficulties/trivial.webp differ diff --git a/games_richpresence/assets/helldivers/images/liberation_icon.webp b/games_richpresence/assets/helldivers/images/liberation_icon.webp new file mode 100644 index 0000000..41a983e Binary files /dev/null and b/games_richpresence/assets/helldivers/images/liberation_icon.webp differ diff --git a/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart b/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart new file mode 100644 index 0000000..61aa6b9 --- /dev/null +++ b/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart @@ -0,0 +1,46 @@ +import 'package:flutter/widgets.dart'; +import 'package:games_richpresence/gen/assets.gen.dart'; + +class HelldiversButton extends StatefulWidget { + final String text; + final Function onClick; + + const HelldiversButton({super.key, required this.text, required this.onClick}); + + @override + State createState() => _HelldiversButtonState(); +} + +class _HelldiversButtonState extends State { + @override + Widget build(BuildContext context) { + return MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () { + widget.onClick(); + }, + child: Container( + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 1), + border: Border.all( + color: Color(0xFF30302f), + width: 2, + ), + image: DecorationImage( + image: AssetImage(Assets.helldivers.buttons.buttonBackground.path), repeat: ImageRepeat.repeat), + ), + padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10), + child: Text( + widget.text, + style: TextStyle( + color: Color.fromRGBO(255, 255, 255, 1), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ); + } +} diff --git a/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart b/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart index 8745651..8974972 100644 --- a/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart +++ b/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart @@ -1,5 +1,7 @@ +import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:games_richpresence/model/class/game_activities/helldivers/faction.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/objective.dart'; import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; class HelldiversPlanetPanel extends StatelessWidget { @@ -10,55 +12,133 @@ class HelldiversPlanetPanel extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - width: 400, - decoration: BoxDecoration( - color: Color.fromRGBO(0, 0, 0, 0.8), - border: Border.all( - color: Color(0xFFc9c9cb), - width: 2, + width:350, + child: Column( + children: [ + if (planet.objective != null) + Container( + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + ), + padding: EdgeInsets.symmetric(horizontal: 8), + child: Row( + children: [ + Image(image: AssetImage(planet.objective!.icon), width: 20, height: 20), + SizedBox(width: 10), + Text( + planet.objective!.name, + style: TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + ], + ), + ), + Container( + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + border: Border.all( + color: Color(0xFFffe702), + width: 2, + ), ), - ), - child: Column( - children: [ - Row( - children: [ - Image(image: AssetImage(planet.owner.icon), width: 70, height: 70), - SizedBox(width: 20), - Expanded( - child: Column( - children: [ - Text( - planet.name, - style: TextStyle( - color: planet.owner.color, - fontSize: 20, - fontWeight: FontWeight.bold, + padding: EdgeInsets.all(2), + child: Column( + children: [ + Container( + width: 350, + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + border: Border.all( + color: Color(0xFFc9c9cb), + width: 2, ), ), - SizedBox(width: 10), - Text( - planet.sector, - style: TextStyle( - color: planet.owner.color, - fontSize: 14, - ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row(children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Image(image: AssetImage(planet.owner.icon), width: 50, height: 50), + ), + SizedBox(width: 20), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + planet.name, + style: TextStyle( + color: planet.owner.color, fontSize: 20, fontWeight: FontWeight.w800, height: 1), + ), + Text( + planet.sector, + style: TextStyle(color: planet.owner.color, fontSize: 16, fontWeight: FontWeight.bold), + ), + ], + )) + ]), + Image.network( + planet.biomeImage, + width: 350, + height: 100, + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) => Container( + width: 350, + height: 100, + color: Color(0xFF3F3F3F), + ), + ), + ], ), - ], - )), - Image.network( - planet.biomeImage, - width: 400, - height: 200, - fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) => Container( - width: 400, - height: 200, - color: Color(0xFF3F3F3F), ), - ), - ], - ) - ], - )); + if (planet.objectiveProgression != null && planet.ennemy != null) SizedBox(height: 2), + if (planet.objectiveProgression != null && planet.ennemy != null) + Container( + width:350, + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + border: Border.all( + color: planet.owner.color, + width: 2, + ), + ), + padding: EdgeInsets.all(4), + child: Row( + children: [ + SizedBox(width: 2), + Text( + (planet.objectiveProgression! * 100).toStringAsFixed(2) + "%", + style: TextStyle( + color: Colors.white, + fontSize: 20, + ), + ), + SizedBox(width: 10), + Flexible( + child: Container( + color: HelldiversFactions.humans.color, + height: 20, + ), + flex: (planet.objectiveProgression! * 100).floor(), + ), + SizedBox(width:2), + Flexible( + child: Container( + color: planet.ennemy!.color, + height: 20, + ), + flex: ((1 - planet.objectiveProgression!) * 100).floor(), + ), + ], + ), + )], + )), + ], + ), + ); } } diff --git a/games_richpresence/lib/gen/assets.gen.dart b/games_richpresence/lib/gen/assets.gen.dart index 0ce5e50..b968db2 100644 --- a/games_richpresence/lib/gen/assets.gen.dart +++ b/games_richpresence/lib/gen/assets.gen.dart @@ -19,6 +19,10 @@ class $AssetsCommonGen { class $AssetsHelldiversGen { const $AssetsHelldiversGen(); + /// Directory path: assets/helldivers/buttons + $AssetsHelldiversButtonsGen get buttons => + const $AssetsHelldiversButtonsGen(); + /// Directory path: assets/helldivers/images $AssetsHelldiversImagesGen get images => const $AssetsHelldiversImagesGen(); @@ -83,6 +87,17 @@ class $AssetsCommonIconsGen { [helldiversIcon, seaOfThievesIcon, theFinalsIcon]; } +class $AssetsHelldiversButtonsGen { + const $AssetsHelldiversButtonsGen(); + + /// File path: assets/helldivers/buttons/button_background.png + AssetGenImage get buttonBackground => + const AssetGenImage('assets/helldivers/buttons/button_background.png'); + + /// List of all assets + List get values => [buttonBackground]; +} + class $AssetsHelldiversImagesGen { const $AssetsHelldiversImagesGen(); @@ -94,6 +109,14 @@ class $AssetsHelldiversImagesGen { AssetGenImage get background => const AssetGenImage('assets/helldivers/images/background.png'); + /// File path: assets/helldivers/images/defense_icon.webp + AssetGenImage get defenseIcon => + const AssetGenImage('assets/helldivers/images/defense_icon.webp'); + + /// Directory path: assets/helldivers/images/difficulties + $AssetsHelldiversImagesDifficultiesGen get difficulties => + const $AssetsHelldiversImagesDifficultiesGen(); + /// File path: assets/helldivers/images/flag.png AssetGenImage get flag => const AssetGenImage('assets/helldivers/images/flag.png'); @@ -106,6 +129,10 @@ class $AssetsHelldiversImagesGen { AssetGenImage get helldiverDecorated => const AssetGenImage('assets/helldivers/images/helldiver_decorated.webp'); + /// File path: assets/helldivers/images/liberation_icon.webp + AssetGenImage get liberationIcon => + const AssetGenImage('assets/helldivers/images/liberation_icon.webp'); + /// File path: assets/helldivers/images/starfield.webp AssetGenImage get starfield => const AssetGenImage('assets/helldivers/images/starfield.webp'); @@ -122,9 +149,11 @@ class $AssetsHelldiversImagesGen { List get values => [ automatonIcon, background, + defenseIcon, flag, helldiver, helldiverDecorated, + liberationIcon, starfield, superhearthIcon, terminidIcon @@ -233,6 +262,64 @@ class $AssetsTheFinalsImagesGen { List get values => [activities, group]; } +class $AssetsHelldiversImagesDifficultiesGen { + const $AssetsHelldiversImagesDifficultiesGen(); + + /// File path: assets/helldivers/images/difficulties/challenging.webp + AssetGenImage get challenging => const AssetGenImage( + 'assets/helldivers/images/difficulties/challenging.webp'); + + /// File path: assets/helldivers/images/difficulties/easy.webp + AssetGenImage get easy => + const AssetGenImage('assets/helldivers/images/difficulties/easy.webp'); + + /// File path: assets/helldivers/images/difficulties/extreme.webp + AssetGenImage get extreme => + const AssetGenImage('assets/helldivers/images/difficulties/extreme.webp'); + + /// File path: assets/helldivers/images/difficulties/hard.webp + AssetGenImage get hard => + const AssetGenImage('assets/helldivers/images/difficulties/hard.webp'); + + /// File path: assets/helldivers/images/difficulties/helldive.webp + AssetGenImage get helldive => const AssetGenImage( + 'assets/helldivers/images/difficulties/helldive.webp'); + + /// File path: assets/helldivers/images/difficulties/impossible.webp + AssetGenImage get impossible => const AssetGenImage( + 'assets/helldivers/images/difficulties/impossible.webp'); + + /// File path: assets/helldivers/images/difficulties/medium.webp + AssetGenImage get medium => + const AssetGenImage('assets/helldivers/images/difficulties/medium.webp'); + + /// File path: assets/helldivers/images/difficulties/suicide.webp + AssetGenImage get suicide => + const AssetGenImage('assets/helldivers/images/difficulties/suicide.webp'); + + /// File path: assets/helldivers/images/difficulties/super_helldive.webp + AssetGenImage get superHelldive => const AssetGenImage( + 'assets/helldivers/images/difficulties/super_helldive.webp'); + + /// File path: assets/helldivers/images/difficulties/trivial.webp + AssetGenImage get trivial => + const AssetGenImage('assets/helldivers/images/difficulties/trivial.webp'); + + /// List of all assets + List get values => [ + challenging, + easy, + extreme, + hard, + helldive, + impossible, + medium, + suicide, + superHelldive, + trivial + ]; +} + class $AssetsSeaOfThievesSvgBackgroundGen { const $AssetsSeaOfThievesSvgBackgroundGen(); diff --git a/games_richpresence/lib/main.dart b/games_richpresence/lib/main.dart index 9674979..4d40e53 100644 --- a/games_richpresence/lib/main.dart +++ b/games_richpresence/lib/main.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/planet_select_page.dart'; import 'package:games_richpresence/pages/home/home.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:games_richpresence/pages/sea_of_thieves/activities/choose_activity.dart'; @@ -37,6 +38,7 @@ class _MyAppState extends State { TheFinalsGroupPage.route: (context) => TheFinalsGroupPage(), TheFinalsGamemodesCategoriesPage.route: (context) => TheFinalsGamemodesCategoriesPage(), TheFinalsGamemodesPageRoute.route: (context) => TheFinalsGamemodesPageRoute(), + HelldiversPlanetSelectPage.route: (context) => HelldiversPlanetSelectPage(), }, ); } diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart b/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart new file mode 100644 index 0000000..f97b0e3 --- /dev/null +++ b/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart @@ -0,0 +1,47 @@ +import 'package:games_richpresence/gen/assets.gen.dart'; + +enum Difficulties { + trivial("trivial", 1), + easy("easy", 2), + medium("medium", 3), + challenging("challenging", 4), + hard("hard", 5), + extreme("extreme", 6), + suicide("suicide", 7), + impossible("impossible", 8), + helldive("helldive", 9), + super_helldive("super_helldive", 10); + + final String id; + final int level; + + const Difficulties(this.id, this.level); +} + +extension DifficultiesExtension on Difficulties { + String get icon { + switch (this) { + case Difficulties.trivial: + return Assets.helldivers.images.difficulties.trivial.path; + case Difficulties.easy: + return Assets.helldivers.images.difficulties.easy.path; + case Difficulties.medium: + return Assets.helldivers.images.difficulties.medium.path; + case Difficulties.challenging: + return Assets.helldivers.images.difficulties.challenging.path; + case Difficulties.hard: + return Assets.helldivers.images.difficulties.hard.path; + case Difficulties.extreme: + return Assets.helldivers.images.difficulties.extreme.path; + case Difficulties.suicide: + return Assets.helldivers.images.difficulties.suicide.path; + case Difficulties.impossible: + return Assets.helldivers.images.difficulties.impossible.path; + case Difficulties.helldive: + return Assets.helldivers.images.difficulties.helldive.path; + case Difficulties.super_helldive: + return Assets.helldivers.images.difficulties.superHelldive.path; + + } + } +} diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/faction.dart b/games_richpresence/lib/model/class/game_activities/helldivers/faction.dart index 2722869..00690ab 100644 --- a/games_richpresence/lib/model/class/game_activities/helldivers/faction.dart +++ b/games_richpresence/lib/model/class/game_activities/helldivers/faction.dart @@ -2,9 +2,14 @@ import 'package:flutter/material.dart'; import 'package:games_richpresence/gen/assets.gen.dart'; enum HelldiversFactions { - humans, - terminids, - automatons; + humans(name: "Humans"), + terminids(name: "Terminids"), + automatons(name: "Automaton"), + unknown(name: "Unknown"); + + final String name; + + const HelldiversFactions({required this.name}); static HelldiversFactions fromString(String faction) { switch (faction) { @@ -12,8 +17,10 @@ enum HelldiversFactions { return HelldiversFactions.humans; case 'Terminids': return HelldiversFactions.terminids; - case 'Automatons': + case 'Automaton': return HelldiversFactions.automatons; + case 'Unknown': + return HelldiversFactions.unknown; } throw Exception('Unknown faction: $faction'); } @@ -28,17 +35,21 @@ extension HelldiversFactionsExtension on HelldiversFactions { return Assets.helldivers.images.terminidIcon.path; case HelldiversFactions.automatons: return Assets.helldivers.images.automatonIcon.path; + case HelldiversFactions.unknown: + return Assets.helldivers.images.superhearthIcon.path; } } Color get color { switch (this) { case HelldiversFactions.humans: - return const Color(0xFFa7daeb); - case HelldiversFactions.terminids: - return const Color(0xFFfe6d72); + return const Color(0xFF6bb7ea); case HelldiversFactions.automatons: + return const Color(0xFFfe6d72); + case HelldiversFactions.terminids: return const Color(0xFFffc100); + case HelldiversFactions.unknown: + return const Color.fromARGB(255, 182, 182, 182); } } } diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart b/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart new file mode 100644 index 0000000..75dca11 --- /dev/null +++ b/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart @@ -0,0 +1,25 @@ +import 'package:games_richpresence/gen/assets.gen.dart'; + +enum HelldiversObjective { + defense("defense"), + liberation("liberation"), + unknown("unknown"); + + final String value; + + const HelldiversObjective(this.value); +} + +extension HelldiversObjectiveExtension on HelldiversObjective { + String get icon { + switch (this) { + case HelldiversObjective.defense: + return Assets.helldivers.images.defenseIcon.path; + case HelldiversObjective.liberation: + return Assets.helldivers.images.liberationIcon.path; + case HelldiversObjective.unknown: + return Assets.helldivers.images.defenseIcon.path; + } + } +} + diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/planets.dart b/games_richpresence/lib/model/class/game_activities/helldivers/planets.dart index 9e781cc..5fb37ac 100644 --- a/games_richpresence/lib/model/class/game_activities/helldivers/planets.dart +++ b/games_richpresence/lib/model/class/game_activities/helldivers/planets.dart @@ -1,4 +1,5 @@ import 'package:games_richpresence/model/class/game_activities/helldivers/faction.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/objective.dart'; class HelldiversPlanet { final int id; @@ -7,6 +8,9 @@ class HelldiversPlanet { final String biomeImage; final Position position; final HelldiversFactions owner; + final HelldiversFactions? ennemy; + final HelldiversObjective? objective; + final double? objectiveProgression; HelldiversPlanet( {required this.id, @@ -14,7 +18,10 @@ class HelldiversPlanet { required this.sector, required this.biomeImage, required this.position, - required this.owner}); + required this.owner, + this.ennemy, + this.objective, + this.objectiveProgression}); } class Position { diff --git a/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page.dart b/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page.dart new file mode 100644 index 0000000..070cddc --- /dev/null +++ b/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page.dart @@ -0,0 +1,15 @@ +import 'package:flutter/widgets.dart'; + +class DifficultyActivitySelectPage extends StatefulWidget { + const DifficultyActivitySelectPage({super.key}); + + @override + State createState() => _DifficultyActivitySelectPageState(); +} + +class _DifficultyActivitySelectPageState extends State { + @override + Widget build(BuildContext context) { + return Container(); + } +} \ No newline at end of file diff --git a/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page_view_model.dart b/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page_view_model.dart new file mode 100644 index 0000000..ab2f393 --- /dev/null +++ b/games_richpresence/lib/pages/helldivers/activity_select/difficulty_activity_select_page_view_model.dart @@ -0,0 +1,9 @@ +import 'package:games_richpresence/model/mvvm/view_model.dart'; +import 'package:get_it/get_it.dart'; + +class DifficultyActivitySelectPageViewModel extends EventViewModel { + GetIt getIt = GetIt.instance; + + + +} \ No newline at end of file diff --git a/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page.dart b/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page.dart new file mode 100644 index 0000000..feca0df --- /dev/null +++ b/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page.dart @@ -0,0 +1,70 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; +import 'package:games_richpresence/components/helldivers/atoms/background/background.dart'; +import 'package:games_richpresence/components/helldivers/atoms/buttons/button.dart'; +import 'package:games_richpresence/components/helldivers/molecules/panels/planet_panel.dart'; +import 'package:games_richpresence/model/mvvm/widget_event_observer.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/planet_select_page_view_model.dart'; + +class HelldiversPlanetSelectPage extends StatefulWidget { + static const route = '/helldivers/activity_select'; + + const HelldiversPlanetSelectPage({super.key}); + + @override + State createState() => _HelldiversPlanetSelectPageState(); +} + +class _HelldiversPlanetSelectPageState extends WidgetEventObserver { + HelldiversPlanetSelectPageViewModel viewModel = HelldiversPlanetSelectPageViewModel(); + + @override + void initState() { + // TODO: implement initState + super.initState(); + viewModel.subscribe(this); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: HelldiversBackground( + child: Column( + children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: + Text("Select a planet", style: TextStyle(fontSize: 30, color: Colors.white, fontWeight: FontWeight.bold)), + ), + Expanded(child: _buildPlanetList()), + Padding( + padding: const EdgeInsets.all(8.0), + child: HelldiversButton(text: "Go back", onClick: () => Navigator.pop(context))), + ], + ))); + } + + Widget _buildPlanetList() { + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: ListView( + shrinkWrap: true, + children: [ + Wrap( + spacing: 40, + runSpacing: 20, + alignment: WrapAlignment.center, + children: List.generate(viewModel.planets.length, (int index) { + return GestureDetector( + onTap: () => viewModel.onPlanetClick(viewModel.planets[index]), + child: HelldiversPlanetPanel( + planet: viewModel.planets[index], + ), + ); + }), + ) + ], + ), + ); + } +} diff --git a/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page_view_model.dart b/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page_view_model.dart new file mode 100644 index 0000000..c44e10e --- /dev/null +++ b/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page_view_model.dart @@ -0,0 +1,25 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; +import 'package:games_richpresence/model/mvvm/view_model.dart'; +import 'package:games_richpresence/services/helldivers/helldivers_api_service.dart'; +import 'package:get_it/get_it.dart'; + +class HelldiversPlanetSelectPageViewModel extends EventViewModel { + GetIt getIt = GetIt.instance; + + late HelldiversApiService _apiService; + List planets = []; + bool isLoading = true; + + HelldiversPlanetSelectPageViewModel({HelldiversApiService? apiService}) { + _apiService = apiService ?? getIt.get(); + fetchPlanets(); + } + + void fetchPlanets() async { + planets = await _apiService.fetchPlanets(); + isLoading = false; + notify(); + } + + onPlanetClick(HelldiversPlanet planet) {} +} diff --git a/games_richpresence/lib/pages/helldivers/home/home_page.dart b/games_richpresence/lib/pages/helldivers/home/home_page.dart index 3fab15c..57387f3 100644 --- a/games_richpresence/lib/pages/helldivers/home/home_page.dart +++ b/games_richpresence/lib/pages/helldivers/home/home_page.dart @@ -4,6 +4,7 @@ import 'package:games_richpresence/components/helldivers/molecules/panels/large_ import 'package:games_richpresence/components/helldivers/molecules/panels/planet_panel.dart'; import 'package:games_richpresence/gen/assets.gen.dart'; import 'package:games_richpresence/model/class/game_activities/helldivers/faction.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/objective.dart'; import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; import 'package:games_richpresence/model/class/user_data/user_data.dart'; import 'package:games_richpresence/model/mvvm/widget_event_observer.dart'; @@ -51,18 +52,21 @@ class _HelldiversHomePageState extends WidgetEventObserver { children: _buildDiversCount(), ), ), - HelldiversLargePanel( - title: "GALACTIC MAP", - subtitle: "SUPEREARTH GALAXY", - description: "Select the region where you are currently fighting", - icon: Container( - width: 70, - height: 70, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(50), color: Color(0xFF3F3F3F)), - child: Image.asset(Assets.helldivers.images.flag.path), - ), - child: Wrap( - children: _buildDiversCount(), + GestureDetector( + onTap: () => viewModel.onActivityClick(), + child: HelldiversLargePanel( + title: "GALACTIC MAP", + subtitle: "SUPEREARTH GALAXY", + description: "Select the region where you are currently fighting", + icon: Container( + width: 70, + height: 70, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(50), color: Color(0xFF3F3F3F)), + child: Image.asset(Assets.helldivers.images.flag.path), + ), + child: Wrap( + children: _buildDiversCount(), + ), ), ), HelldiversPlanetPanel( @@ -70,9 +74,12 @@ class _HelldiversHomePageState extends WidgetEventObserver { id: 145, name: "GAELLIVARE", sector: "Talus", - biomeImage: "", + biomeImage: "https://alexisl61.github.io/Games_RichPresence/assets/helldivers/biomes/Canyon.webp", position: Position(x: 0.5, y: 0.5), - owner: HelldiversFactions.terminids)) + owner: HelldiversFactions.humans, + objective: HelldiversObjective.defense, + ennemy: HelldiversFactions.automatons, + objectiveProgression: 0.8588 )) ], )); } diff --git a/games_richpresence/lib/pages/helldivers/home/home_page_view_model.dart b/games_richpresence/lib/pages/helldivers/home/home_page_view_model.dart index c06aeb3..966fc97 100644 --- a/games_richpresence/lib/pages/helldivers/home/home_page_view_model.dart +++ b/games_richpresence/lib/pages/helldivers/home/home_page_view_model.dart @@ -1,13 +1,9 @@ -import 'package:games_richpresence/model/class/game_activities/the_finals/gamemode.dart'; import 'package:games_richpresence/model/class/user_data/helldivers_user_data.dart'; -import 'package:games_richpresence/model/class/user_data/the_finals_user_data.dart'; import 'package:games_richpresence/model/class/user_data/user_data.dart'; -import 'package:games_richpresence/model/class/user_group/the_finals/group.dart'; import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; -import 'package:games_richpresence/pages/the_finals/gamemodes/gamemodes_categories_page.dart'; -import 'package:games_richpresence/pages/the_finals/group/group_page.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/planet_select_page.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; import '../../../model/class/user_group/helldivers/group.dart'; @@ -31,7 +27,7 @@ class HelldiversHomePageViewModel extends EventViewModel { } void onActivityClick() async { - //userData.gamemode = await notify(const PushRouteEvent(TheFinalsGamemodesCategoriesPage.route)) as TheFinalsGamemode?; + await notify(const PushRouteEvent(HelldiversPlanetSelectPage.route)); notify(); updateRpc(userData); } diff --git a/games_richpresence/lib/pages/home/home_view_model.dart b/games_richpresence/lib/pages/home/home_view_model.dart index fb8912f..d184b76 100644 --- a/games_richpresence/lib/pages/home/home_view_model.dart +++ b/games_richpresence/lib/pages/home/home_view_model.dart @@ -1,9 +1,9 @@ import 'package:games_richpresence/model/class/games/game_object.dart'; import 'package:games_richpresence/model/class/user_data/user_data.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; -import 'package:games_richpresence/services/discord_service.dart'; -import 'package:games_richpresence/services/game_change_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/discord_service.dart'; +import 'package:games_richpresence/services/common/game_change_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class HomeViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_company_view_model.dart b/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_company_view_model.dart index 7fe6202..7c26855 100644 --- a/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_company_view_model.dart +++ b/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_company_view_model.dart @@ -4,8 +4,8 @@ import 'package:games_richpresence/model/mvvm/view_events/pop_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; import 'package:games_richpresence/pages/sea_of_thieves/activities/choose_activity.dart'; -import 'package:games_richpresence/services/activity_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/activity_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class ChooseActivityCompanyViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_view_model.dart b/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_view_model.dart index 075d9a0..f622c03 100644 --- a/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_view_model.dart +++ b/games_richpresence/lib/pages/sea_of_thieves/activities/choose_activity_view_model.dart @@ -1,7 +1,7 @@ import 'package:games_richpresence/model/class/game_activities/sea_of_thieves/activity.dart'; import 'package:games_richpresence/model/mvvm/view_events/pop_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class ChooseActivityViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/sea_of_thieves/home/home_page_view_model.dart b/games_richpresence/lib/pages/sea_of_thieves/home/home_page_view_model.dart index c1fdbd3..f634622 100644 --- a/games_richpresence/lib/pages/sea_of_thieves/home/home_page_view_model.dart +++ b/games_richpresence/lib/pages/sea_of_thieves/home/home_page_view_model.dart @@ -6,7 +6,7 @@ import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart' import 'package:games_richpresence/model/mvvm/view_model.dart'; import 'package:games_richpresence/pages/sea_of_thieves/activities/choose_activity_company.dart'; import 'package:games_richpresence/pages/sea_of_thieves/ships/choose_ship.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class SeaOfThievesHomePageViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_categories_page_view_model.dart b/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_categories_page_view_model.dart index 8cffb4c..a0718c6 100644 --- a/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_categories_page_view_model.dart +++ b/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_categories_page_view_model.dart @@ -4,8 +4,8 @@ import 'package:games_richpresence/model/mvvm/view_events/pop_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; import 'package:games_richpresence/pages/the_finals/gamemodes/gamemodes_page.dart'; -import 'package:games_richpresence/services/activity_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/activity_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class TheFinalsGamemodesCategoriesPageViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_page_view_model.dart b/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_page_view_model.dart index dcb2882..b783447 100644 --- a/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_page_view_model.dart +++ b/games_richpresence/lib/pages/the_finals/gamemodes/gamemodes_page_view_model.dart @@ -1,8 +1,8 @@ import 'package:games_richpresence/model/class/game_activities/the_finals/gamemode.dart'; import 'package:games_richpresence/model/mvvm/view_events/pop_route_event.dart'; import 'package:games_richpresence/model/mvvm/view_model.dart'; -import 'package:games_richpresence/services/activity_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/activity_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class TheFinalsGamemodesPageViewModel extends EventViewModel { diff --git a/games_richpresence/lib/pages/the_finals/home/home_page_view_model.dart b/games_richpresence/lib/pages/the_finals/home/home_page_view_model.dart index 4726968..4877ddd 100644 --- a/games_richpresence/lib/pages/the_finals/home/home_page_view_model.dart +++ b/games_richpresence/lib/pages/the_finals/home/home_page_view_model.dart @@ -6,7 +6,7 @@ import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart' import 'package:games_richpresence/model/mvvm/view_model.dart'; import 'package:games_richpresence/pages/the_finals/gamemodes/gamemodes_categories_page.dart'; import 'package:games_richpresence/pages/the_finals/group/group_page.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; class TheFinalsHomePageViewModel extends EventViewModel { diff --git a/games_richpresence/lib/providers/provider.dart b/games_richpresence/lib/providers/provider.dart index 8e56c39..bc31f64 100644 --- a/games_richpresence/lib/providers/provider.dart +++ b/games_richpresence/lib/providers/provider.dart @@ -1,10 +1,12 @@ import 'package:games_richpresence/model/class/games/game_object.dart'; import 'package:games_richpresence/repositories/api/api_repository.dart'; -import 'package:games_richpresence/services/activity_service.dart'; -import 'package:games_richpresence/services/api_service.dart'; -import 'package:games_richpresence/services/discord_service.dart'; -import 'package:games_richpresence/services/game_change_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/activity_service.dart'; +import 'package:games_richpresence/services/common/api_service.dart'; +import 'package:games_richpresence/services/common/discord_service.dart'; +import 'package:games_richpresence/services/common/game_change_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; +import 'package:games_richpresence/services/helldivers/helldivers_api_service.dart'; +import 'package:games_richpresence/transformers/activity/helldivers/helldivers_planet_transformer.dart'; import 'package:games_richpresence/transformers/activity/the_finals/the_finals_gamemode_category_transformer.dart'; import 'package:games_richpresence/transformers/activity/the_finals/the_finals_gamemode_transformer.dart'; import 'package:games_richpresence/transformers/available_translations_transformer.dart'; @@ -32,6 +34,8 @@ class Provider { getIt.registerSingleton(SeaOfThievesActivityCategoryTransformer()); getIt.registerSingleton(TheFinalsGamemodeTransformer()); getIt.registerSingleton(TheFinalsGamemodeCategoryTransformer()); + getIt.registerSingleton(HelldiversPlanetTransformer( + biomeImageUrl: 'https://alexisl61.github.io/Games_RichPresence/assets/helldivers/biomes')); } initRepositories() { @@ -39,10 +43,13 @@ class Provider { } initServices() { - getIt.registerSingleton(ApiServiceImpl(baseUrl: 'https://alexisl61.github.io/Games_RichPresence/api/v1', gameObject: GameObject.seaOfThieves)); + getIt.registerSingleton(ApiServiceImpl( + baseUrl: 'https://alexisl61.github.io/Games_RichPresence/api/v1', gameObject: GameObject.seaOfThieves)); getIt.registerSingleton(OnlineTranslationServiceImpl()); getIt.registerSingleton(DiscordServiceImpl()); getIt.registerSingleton(ActivityServiceImpl()); getIt.registerSingleton(GameChangeServiceImpl()); + getIt.registerSingleton(HelldiversApiServiceImpl( + baseUrl: 'https://api.helldivers2.dev/api/v1')); } } diff --git a/games_richpresence/lib/repositories/api/api_repository.dart b/games_richpresence/lib/repositories/api/api_repository.dart index ccfddbd..c7e1847 100644 --- a/games_richpresence/lib/repositories/api/api_repository.dart +++ b/games_richpresence/lib/repositories/api/api_repository.dart @@ -1,13 +1,13 @@ import 'package:http/http.dart'; abstract class ApiRepository { - Future fetch(String url); + Future fetch(String url, {Map? headers}); } class ApiRepositoryImpl extends ApiRepository { @override - Future fetch(String url) async { + Future fetch(String url, {Map? headers}) async { print("Fetching data from $url"); - return (await get(Uri.parse(url))).body; + return (await get(Uri.parse(url), headers: headers)).body; } } diff --git a/games_richpresence/lib/services/activity_service.dart b/games_richpresence/lib/services/common/activity_service.dart similarity index 90% rename from games_richpresence/lib/services/activity_service.dart rename to games_richpresence/lib/services/common/activity_service.dart index d87d96a..0b50390 100644 --- a/games_richpresence/lib/services/activity_service.dart +++ b/games_richpresence/lib/services/common/activity_service.dart @@ -1,5 +1,5 @@ import 'package:games_richpresence/model/class/game_activities/game_activity.dart'; -import 'package:games_richpresence/services/api_service.dart'; +import 'package:games_richpresence/services/common/api_service.dart'; import 'package:get_it/get_it.dart'; abstract class ActivityService { diff --git a/games_richpresence/lib/services/api_service.dart b/games_richpresence/lib/services/common/api_service.dart similarity index 100% rename from games_richpresence/lib/services/api_service.dart rename to games_richpresence/lib/services/common/api_service.dart diff --git a/games_richpresence/lib/services/discord_service.dart b/games_richpresence/lib/services/common/discord_service.dart similarity index 100% rename from games_richpresence/lib/services/discord_service.dart rename to games_richpresence/lib/services/common/discord_service.dart diff --git a/games_richpresence/lib/services/game_change_service.dart b/games_richpresence/lib/services/common/game_change_service.dart similarity index 81% rename from games_richpresence/lib/services/game_change_service.dart rename to games_richpresence/lib/services/common/game_change_service.dart index 96a5e2e..7f88970 100644 --- a/games_richpresence/lib/services/game_change_service.dart +++ b/games_richpresence/lib/services/common/game_change_service.dart @@ -1,8 +1,8 @@ import 'package:games_richpresence/model/class/games/game_object.dart'; -import 'package:games_richpresence/services/activity_service.dart'; -import 'package:games_richpresence/services/api_service.dart'; -import 'package:games_richpresence/services/discord_service.dart'; -import 'package:games_richpresence/services/online_translation_service.dart'; +import 'package:games_richpresence/services/common/activity_service.dart'; +import 'package:games_richpresence/services/common/api_service.dart'; +import 'package:games_richpresence/services/common/discord_service.dart'; +import 'package:games_richpresence/services/common/online_translation_service.dart'; import 'package:get_it/get_it.dart'; abstract class GameChangeService { diff --git a/games_richpresence/lib/services/online_translation_service.dart b/games_richpresence/lib/services/common/online_translation_service.dart similarity index 95% rename from games_richpresence/lib/services/online_translation_service.dart rename to games_richpresence/lib/services/common/online_translation_service.dart index 7fe995d..1a20558 100644 --- a/games_richpresence/lib/services/online_translation_service.dart +++ b/games_richpresence/lib/services/common/online_translation_service.dart @@ -1,5 +1,5 @@ import 'package:games_richpresence/model/class/translations/available_translation.dart'; -import 'package:games_richpresence/services/api_service.dart'; +import 'package:games_richpresence/services/common/api_service.dart'; import 'package:get_it/get_it.dart'; abstract class OnlineTranslationsService { diff --git a/games_richpresence/lib/services/helldivers/helldivers_api_service.dart b/games_richpresence/lib/services/helldivers/helldivers_api_service.dart new file mode 100644 index 0000000..90d7117 --- /dev/null +++ b/games_richpresence/lib/services/helldivers/helldivers_api_service.dart @@ -0,0 +1,34 @@ +import 'dart:convert'; + +import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; +import 'package:games_richpresence/repositories/api/api_repository.dart'; +import 'package:games_richpresence/transformers/activity/helldivers/helldivers_planet_transformer.dart'; +import 'package:get_it/get_it.dart'; + +abstract class HelldiversApiService { + Future> fetchPlanets(); +} + +class HelldiversApiServiceImpl implements HelldiversApiService { + final GetIt _getIt = GetIt.instance; + late ApiRepository _apiRepository; + late HelldiversPlanetTransformer _planetTransformer; + + String _baseUrl; + + HelldiversApiServiceImpl( + {required String baseUrl, ApiRepository? apiRepository, HelldiversPlanetTransformer? planetTransformer}) + : _baseUrl = baseUrl { + _apiRepository = apiRepository ?? _getIt.get(); + _planetTransformer = planetTransformer ?? _getIt.get(); + } + + @override + Future> fetchPlanets() async { + dynamic data = await _apiRepository.fetch("$_baseUrl/campaigns", headers: { + "X-Super-Client": "Games RichPresence", + "X-Super-Contact": "contact@alexisl.fr", + }); + return _planetTransformer.fromJsonList(jsonDecode(data)); + } +} diff --git a/games_richpresence/lib/transformers/activity/helldivers/helldivers_planet_transformer.dart b/games_richpresence/lib/transformers/activity/helldivers/helldivers_planet_transformer.dart new file mode 100644 index 0000000..f8d37aa --- /dev/null +++ b/games_richpresence/lib/transformers/activity/helldivers/helldivers_planet_transformer.dart @@ -0,0 +1,61 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/faction.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/objective.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; + +class HelldiversPlanetTransformer { + final String _biomeImageUrl; + + HelldiversPlanetTransformer({required String biomeImageUrl}) : _biomeImageUrl = biomeImageUrl; + + HelldiversPlanet fromJson(Map json) { + return HelldiversPlanet( + id: json['index'] as int, + name: json['name'] as String, + sector: json['sector'] as String, + position: getPosition(json), + owner: HelldiversFactions.fromString(json['currentOwner']), + ennemy: getEnnemy(json), + objectiveProgression: getProgression(json), + biomeImage: _biomeImageUrl + "/" + json['biome']["name"] + ".webp", + objective: getObjective(json), + ); + } + + HelldiversObjective getObjective(Map json) { + if (json["currentOwner"] == HelldiversFactions.humans.name) { + return HelldiversObjective.defense; + } else { + return HelldiversObjective.liberation; + } + } + + Position getPosition(Map json) { + return Position(x: json['position']['x'], y: json['position']['y']); + } + + HelldiversFactions? getEnnemy(Map json) { + if (json['currentOwner'] == HelldiversFactions.humans.name) { + if (json['event'] != null && json['event']['faction'] != null) { + return HelldiversFactions.fromString(json['event']['faction']); + } else { + return null; + } + } else { + return HelldiversFactions.fromString(json['currentOwner']); + } + } + + double? getProgression(Map json) { + if (json['event'] != null) { + return (json['event']['maxHealth'] - (json['event']['health']).toDouble()) / json['event']['maxHealth']; + } else { + return (json['maxHealth'] - (json['health'] as int).toDouble()) / json['maxHealth']; + } + } + + List fromJsonList(data) { + List planets = ((data as List).map((e) => fromJson(e["planet"])).toList()); + planets.sort((a, b) => b.objectiveProgression?.compareTo(a.objectiveProgression ?? 0) ?? 0); + return planets; + } +} diff --git a/games_richpresence/pubspec.yaml b/games_richpresence/pubspec.yaml index de33b98..59b672b 100644 --- a/games_richpresence/pubspec.yaml +++ b/games_richpresence/pubspec.yaml @@ -55,7 +55,9 @@ flutter: - assets/sea_of_thieves/separator/ - assets/the_finals/images/ - assets/helldivers/images/ + - assets/helldivers/images/difficulties/ - assets/helldivers/svg/ + - assets/helldivers/buttons/ - assets/translations/ fonts: