diff --git a/assets/helldivers/difficulties/challenging.png b/assets/helldivers/difficulties/challenging.png new file mode 100644 index 0000000..0161a18 Binary files /dev/null and b/assets/helldivers/difficulties/challenging.png differ diff --git a/assets/helldivers/difficulties/easy.png b/assets/helldivers/difficulties/easy.png new file mode 100644 index 0000000..24678c8 Binary files /dev/null and b/assets/helldivers/difficulties/easy.png differ diff --git a/assets/helldivers/difficulties/extreme.png b/assets/helldivers/difficulties/extreme.png new file mode 100644 index 0000000..6d44b88 Binary files /dev/null and b/assets/helldivers/difficulties/extreme.png differ diff --git a/assets/helldivers/difficulties/hard.png b/assets/helldivers/difficulties/hard.png new file mode 100644 index 0000000..bbd0789 Binary files /dev/null and b/assets/helldivers/difficulties/hard.png differ diff --git a/assets/helldivers/difficulties/helldive.png b/assets/helldivers/difficulties/helldive.png new file mode 100644 index 0000000..53104f2 Binary files /dev/null and b/assets/helldivers/difficulties/helldive.png differ diff --git a/assets/helldivers/difficulties/impossible.png b/assets/helldivers/difficulties/impossible.png new file mode 100644 index 0000000..b62bf77 Binary files /dev/null and b/assets/helldivers/difficulties/impossible.png differ diff --git a/assets/helldivers/difficulties/medium.png b/assets/helldivers/difficulties/medium.png new file mode 100644 index 0000000..d91f4c2 Binary files /dev/null and b/assets/helldivers/difficulties/medium.png differ diff --git a/assets/helldivers/difficulties/suicide.png b/assets/helldivers/difficulties/suicide.png new file mode 100644 index 0000000..0ddd410 Binary files /dev/null and b/assets/helldivers/difficulties/suicide.png differ diff --git a/assets/helldivers/difficulties/super_helldive.png b/assets/helldivers/difficulties/super_helldive.png new file mode 100644 index 0000000..8e6a975 Binary files /dev/null and b/assets/helldivers/difficulties/super_helldive.png differ diff --git a/assets/helldivers/difficulties/trivial.png b/assets/helldivers/difficulties/trivial.png new file mode 100644 index 0000000..28aa5ba Binary files /dev/null and b/assets/helldivers/difficulties/trivial.png differ diff --git a/games_richpresence/assets/translations/en.json b/games_richpresence/assets/translations/en.json index f6bc32a..fa76d96 100644 --- a/games_richpresence/assets/translations/en.json +++ b/games_richpresence/assets/translations/en.json @@ -40,5 +40,34 @@ "_the_finals_select_gamemode": "Select a gamemode", "_the_finals_in_game": "In game", - "_the_final_team_rpc": "{players} / {max_players} players" + "_the_final_team_rpc": "{players} / {max_players} players", + + "_helldivers_objective_defense": "Defense", + "_helldivers_objective_liberation": "Liberation", + + "_helldivers_difficulty_trivial": "Trivial", + "_helldivers_difficulty_easy": "Easy", + "_helldivers_difficulty_medium": "Medium", + "_helldivers_difficulty_challenging": "Challenging", + "_helldivers_difficulty_hard": "Hard", + "_helldivers_difficulty_extreme": "Extreme", + "_helldivers_difficulty_suicide": "Suicidal", + "_helldivers_difficulty_impossible": "Impossible", + "_helldivers_difficulty_helldive": "Helldive", + "_helldivers_difficulty_super_helldive": "Super helldive", + + "_helldivers_select_planet": "Select a planet", + "_helldivers_select_difficulty": "Select a difficulty", + + "_helldivers_team_panel_title": "HELLDIVER'S TEAM", + "_helldivers_team_panel_subtitle" : "SUPEREARTH FORCE", + "_helldivers_team_panel_description": "Liberate the galaxy by sharing how many helldivers are in your destroyer.", + + "_helldivers_map_panel_title": "GALACTIC MAP", + "_helldivers_map_panel_subtitle": "SUPEREARTH GALAXY", + "_helldivers_map_panel_description": "Select the region you are currently fighting in.", + + "_helldivers_in_game": "In game", + "_helldivers_activity_rpc": "{planet} ({enemy}) | {difficulty_level} - {difficulty}", + "_helldivers_team_rpc": "{players} / {max_players} players" } diff --git a/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart b/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart index 61aa6b9..5393247 100644 --- a/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart +++ b/games_richpresence/lib/components/helldivers/atoms/buttons/button.dart @@ -2,10 +2,10 @@ import 'package:flutter/widgets.dart'; import 'package:games_richpresence/gen/assets.gen.dart'; class HelldiversButton extends StatefulWidget { - final String text; + final Widget child; final Function onClick; - const HelldiversButton({super.key, required this.text, required this.onClick}); + const HelldiversButton({super.key, required this.child, required this.onClick}); @override State createState() => _HelldiversButtonState(); @@ -31,14 +31,7 @@ class _HelldiversButtonState extends State { 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, - ), - ), + child: widget.child ), ), ); diff --git a/games_richpresence/lib/components/helldivers/atoms/buttons/difficulty_button.dart b/games_richpresence/lib/components/helldivers/atoms/buttons/difficulty_button.dart new file mode 100644 index 0000000..d21fbc7 --- /dev/null +++ b/games_richpresence/lib/components/helldivers/atoms/buttons/difficulty_button.dart @@ -0,0 +1,35 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/widgets.dart'; +import 'package:games_richpresence/components/helldivers/atoms/buttons/button.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.dart'; + +class DifficultyButton extends StatefulWidget { + final Difficulties difficulty; + final Function onClick; + const DifficultyButton({super.key, required this.difficulty, required this.onClick}); + + @override + State createState() => _DifficultyButtonState(); +} + +class _DifficultyButtonState extends State { + @override + Widget build(BuildContext context) { + return HelldiversButton( + onClick: () { + widget.onClick(); + }, + child: Container( + height: 30, + width: 300, + child: Row( + children: [ + SizedBox(width: 100, child: Image.asset(widget.difficulty.icon)), + SizedBox(width: 20), + Text(tr(widget.difficulty.name), + style: TextStyle(color: Color.fromRGBO(255, 255, 255, 1), fontSize: 20, fontWeight: FontWeight.bold)) + ], + ), + )); + } +} diff --git a/games_richpresence/lib/components/helldivers/atoms/buttons/text_button.dart b/games_richpresence/lib/components/helldivers/atoms/buttons/text_button.dart new file mode 100644 index 0000000..529d7f1 --- /dev/null +++ b/games_richpresence/lib/components/helldivers/atoms/buttons/text_button.dart @@ -0,0 +1,22 @@ +import 'package:flutter/widgets.dart'; +import 'package:games_richpresence/components/helldivers/atoms/buttons/button.dart'; + +class HelldiversTextButton extends StatelessWidget { + final String text; + final Function onClick; + const HelldiversTextButton({super.key, required this.text, required this.onClick}); + + @override + Widget build(BuildContext context) { + return HelldiversButton( + child: Text( + text, + style: TextStyle( + color: Color.fromRGBO(255, 255, 255, 1), + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + onClick: onClick); + } +} 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 8974972..8f6c3fb 100644 --- a/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart +++ b/games_richpresence/lib/components/helldivers/molecules/panels/planet_panel.dart @@ -1,52 +1,56 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.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 { final HelldiversPlanet planet; + final bool showObjectiveStats; + final Difficulties? difficulty; - const HelldiversPlanetPanel({super.key, required this.planet}); + const HelldiversPlanetPanel({super.key, required this.planet, this.showObjectiveStats = true, this.difficulty}); @override Widget build(BuildContext context) { return Container( - width:350, + 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, - ), - ), - ], + 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( + tr(planet.objective!.name).toUpperCase(), + 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, + ], + ), ), - ), - padding: EdgeInsets.all(2), - child: Column( - children: [ - Container( + Container( + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + border: Border.all( + color: Color(0xFFffe702), + width: 2, + ), + ), + padding: EdgeInsets.all(2), + child: Column( + children: [ + Container( width: 350, decoration: BoxDecoration( color: Color.fromRGBO(0, 0, 0, 0.8), @@ -79,66 +83,78 @@ class HelldiversPlanetPanel extends StatelessWidget { style: TextStyle(color: planet.owner.color, fontSize: 16, fontWeight: FontWeight.bold), ), ], - )) + )), + + if (difficulty != null) + Padding( + padding: const EdgeInsets.all(8.0), + child: Image.asset(difficulty!.icon, width: 50, height: 50), + ), ]), - Image.network( - planet.biomeImage, - width: 350, - height: 100, - fit: BoxFit.cover, - errorBuilder: (context, error, stackTrace) => Container( - width: 350, - height: 100, - color: Color(0xFF3F3F3F), - ), + Stack( + children: [ + Image.network( + planet.biomeImage, + width: 350, + height: 70, + fit: BoxFit.cover, + errorBuilder: (context, error, stackTrace) => Container( + width: 350, + height: 70, + 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, + if (planet.objectiveProgression != null && planet.ennemy != null && showObjectiveStats) + SizedBox(height: 2), + if (planet.objectiveProgression != null && planet.ennemy != null && showObjectiveStats) + Container( + width: 350, + decoration: BoxDecoration( + color: Color.fromRGBO(0, 0, 0, 0.8), + border: Border.all( + color: planet.owner.color, + width: 2, ), ), - 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(), + 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/main.dart b/games_richpresence/lib/main.dart index 4d40e53..eace7cf 100644 --- a/games_richpresence/lib/main.dart +++ b/games_richpresence/lib/main.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/difficulty_activity_select_page.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/difficulty_activity_select_page_view_model.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'; @@ -39,6 +41,7 @@ class _MyAppState extends State { TheFinalsGamemodesCategoriesPage.route: (context) => TheFinalsGamemodesCategoriesPage(), TheFinalsGamemodesPageRoute.route: (context) => TheFinalsGamemodesPageRoute(), HelldiversPlanetSelectPage.route: (context) => HelldiversPlanetSelectPage(), + DifficultyActivitySelectPage.route: (context) => DifficultyActivitySelectPage(), }, ); } diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/activity.dart b/games_richpresence/lib/model/class/game_activities/helldivers/activity.dart new file mode 100644 index 0000000..4945fd0 --- /dev/null +++ b/games_richpresence/lib/model/class/game_activities/helldivers/activity.dart @@ -0,0 +1,9 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; + +class HelldiversActivity { + Difficulties? difficulty; + HelldiversPlanet? planet; + + HelldiversActivity({required this.difficulty, required this.planet}); +} diff --git a/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart b/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart index f97b0e3..8e9c3f5 100644 --- a/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart +++ b/games_richpresence/lib/model/class/game_activities/helldivers/difficulties.dart @@ -1,21 +1,22 @@ 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); + trivial("trivial", "_helldivers_difficulty_trivial", 1), + easy("easy", "_helldivers_difficulty_easy", 2), + medium("medium", "_helldivers_difficulty_medium", 3), + challenging("challenging", "_helldivers_difficulty_challenging", 4), + hard("hard", "_helldivers_difficulty_hard", 5), + extreme("extreme", "_helldivers_difficulty_extreme", 6), + suicide("suicide", "_helldivers_difficulty_suicide", 7), + impossible("impossible", "_helldivers_difficulty_impossible", 8), + helldive("helldive", "_helldivers_difficulty_helldive", 9), + super_helldive("super_helldive", "_helldivers_difficulty_super_helldive", 10); final String id; + final String name; final int level; - const Difficulties(this.id, this.level); + const Difficulties(this.id, this.name, this.level); } extension DifficultiesExtension on Difficulties { @@ -41,7 +42,6 @@ extension DifficultiesExtension on Difficulties { 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/objective.dart b/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart index 75dca11..b5dd8dd 100644 --- a/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart +++ b/games_richpresence/lib/model/class/game_activities/helldivers/objective.dart @@ -1,13 +1,14 @@ import 'package:games_richpresence/gen/assets.gen.dart'; enum HelldiversObjective { - defense("defense"), - liberation("liberation"), - unknown("unknown"); + defense("defense", "_helldivers_objective_defense"), + liberation("liberation", "_helldivers_objective_liberation"), + unknown("unknown", "_helldivers_objective_unknown"); final String value; + final String name; - const HelldiversObjective(this.value); + const HelldiversObjective(this.value, this.name); } extension HelldiversObjectiveExtension on HelldiversObjective { @@ -22,4 +23,3 @@ extension HelldiversObjectiveExtension on HelldiversObjective { } } } - diff --git a/games_richpresence/lib/model/class/games/game_object.dart b/games_richpresence/lib/model/class/games/game_object.dart index 9e0202a..5dfef90 100644 --- a/games_richpresence/lib/model/class/games/game_object.dart +++ b/games_richpresence/lib/model/class/games/game_object.dart @@ -8,7 +8,7 @@ import 'package:games_richpresence/transformers/activity/the_finals/the_finals_g enum GameObject { seaOfThieves("sea_of_thieves", "Sea of Thieves", "Windlass", "992744165802782741"), theFinals("the_finals", "The Finals", "Poppins", "1277334180354723980"), - helldivers("helldivers", "Helldivers 2", "ChakraPetch", "1277334180354723980"); + helldivers("helldivers", "Helldivers 2", "ChakraPetch", "1307762394046398535"); final String id; final String name; diff --git a/games_richpresence/lib/model/class/user_data/helldivers_user_data.dart b/games_richpresence/lib/model/class/user_data/helldivers_user_data.dart index f862897..92a79e7 100644 --- a/games_richpresence/lib/model/class/user_data/helldivers_user_data.dart +++ b/games_richpresence/lib/model/class/user_data/helldivers_user_data.dart @@ -1,40 +1,73 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/activity.dart'; import 'package:games_richpresence/model/class/user_data/user_data.dart'; import 'package:games_richpresence/model/class/user_group/helldivers/group.dart'; class HelldiversUserData extends UserData { HelldiversGroup? group; + HelldiversActivity? activity; String Function(String) onlineTranslate; - HelldiversUserData({this.group, required this.onlineTranslate}); + HelldiversUserData({this.group, this.activity, required this.onlineTranslate}); @override String? getRpcDetails() { - throw UnimplementedError(); + if (activity == null || + activity!.difficulty == null || + activity!.planet == null || + activity!.planet!.ennemy == null) { + return tr("_helldivers_in_game"); + } else { + return tr("_helldivers_activity_rpc", namedArgs: { + "planet": activity!.planet!.name, + "enemy": activity!.planet!.ennemy!.name, + "difficulty": tr(activity!.difficulty!.name), + "difficulty_level": activity!.difficulty!.level.toString() + }); + } } @override String? getRpcLargeImageKey() { - throw UnimplementedError(); + if (activity != null && activity!.planet != null) { + return activity!.planet!.biomeImage; + } else { + return null; + } } @override String? getRpcLargeImageText() { - throw UnimplementedError(); + if (activity != null && activity!.planet != null) { + return activity!.planet!.name; + } + return null; } @override String? getRpcSmallImageKey() { - throw UnimplementedError(); + if (activity != null && activity!.difficulty != null) { + return activity!.difficulty!.id; + } + return null; } @override String? getRpcSmallImageText() { - throw UnimplementedError(); + if (activity != null && activity!.difficulty != null) { + return tr(activity!.difficulty!.name); + } + return null; } @override String? getRpcState() { - throw UnimplementedError(); + if (group != null) { + return tr("_helldivers_team_rpc", + namedArgs: {"players": group!.groupSize.toString(), "max_players": 4.toString()}); + } else { + return null; + } } } 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 index 070cddc..7c0fee9 100644 --- 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 @@ -1,15 +1,76 @@ +import 'package:easy_localization/easy_localization.dart'; +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/difficulty_button.dart'; +import 'package:games_richpresence/components/helldivers/atoms/buttons/text_button.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.dart'; +import 'package:games_richpresence/model/mvvm/widget_event_observer.dart'; +import 'package:games_richpresence/pages/helldivers/activity_select/difficulty_activity_select_page_view_model.dart'; class DifficultyActivitySelectPage extends StatefulWidget { + static String route = '/helldivers/activity_select/difficulty'; + const DifficultyActivitySelectPage({super.key}); @override State createState() => _DifficultyActivitySelectPageState(); } -class _DifficultyActivitySelectPageState extends State { +class _DifficultyActivitySelectPageState extends WidgetEventObserver { + DifficultyActivitySelectPageViewModel viewModel = DifficultyActivitySelectPageViewModel(); + + @override + void initState() { + // TODO: implement initState + super.initState(); + viewModel.subscribe(this); + } + @override Widget build(BuildContext context) { - return Container(); + return Scaffold( + body: HelldiversBackground( + child: Column(children: [ + Padding( + padding: const EdgeInsets.all(8.0), + child: Text(tr("_helldivers_select_difficulty"), + style: TextStyle(fontSize: 30, color: Colors.white, fontWeight: FontWeight.bold)), + ), + Expanded(child: _buildDifficultiesList()), + Padding( + padding: const EdgeInsets.all(8.0), + child: HelldiversTextButton(text: tr("_back"), onClick: () => Navigator.pop(context))), + ]))); + } + + Widget _buildDifficultiesList() { + return Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 10.0), + child: Center( + child: ListView( + shrinkWrap: true, + children: [ + Wrap( + spacing: 40, + runSpacing: 20, + alignment: WrapAlignment.center, + children: List.generate(Difficulties.values.length, (int index) { + Difficulties difficulty = Difficulties.values[index]; + return DifficultyButton( + onClick: () => viewModel.onDifficultyClick(difficulty), + difficulty: difficulty, + ); + }), + ) + ], + ), + ), + ), + ], + ); } -} \ 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 index ab2f393..7e98768 100644 --- 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 @@ -1,9 +1,9 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.dart'; +import 'package:games_richpresence/model/mvvm/view_events/pop_route_event.dart'; 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 + onDifficultyClick(Difficulties difficulty) { + notify(PopRouteEvent(arguments: difficulty)); + } +} 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 index feca0df..201c3d7 100644 --- a/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page.dart +++ b/games_richpresence/lib/pages/helldivers/activity_select/planet_select_page.dart @@ -1,7 +1,8 @@ +import 'package:easy_localization/easy_localization.dart'; 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/atoms/buttons/text_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'; @@ -33,13 +34,13 @@ class _HelldiversPlanetSelectPageState extends WidgetEventObserver Navigator.pop(context))), + child: HelldiversTextButton(text: tr("_back"), onClick: () => Navigator.pop(context))), ], ))); } @@ -55,10 +56,13 @@ class _HelldiversPlanetSelectPageState extends WidgetEventObserver viewModel.onPlanetClick(viewModel.planets[index]), - child: HelldiversPlanetPanel( - planet: viewModel.planets[index], + return MouseRegion( + cursor: SystemMouseCursors.click, + child: 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 index c44e10e..653d2fa 100644 --- 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 @@ -1,5 +1,10 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/activity.dart'; +import 'package:games_richpresence/model/class/game_activities/helldivers/difficulties.dart'; import 'package:games_richpresence/model/class/game_activities/helldivers/planets.dart'; +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/helldivers/activity_select/difficulty_activity_select_page.dart'; import 'package:games_richpresence/services/helldivers/helldivers_api_service.dart'; import 'package:get_it/get_it.dart'; @@ -8,6 +13,7 @@ class HelldiversPlanetSelectPageViewModel extends EventViewModel { late HelldiversApiService _apiService; List planets = []; + HelldiversPlanet? selectedPlanet; bool isLoading = true; HelldiversPlanetSelectPageViewModel({HelldiversApiService? apiService}) { @@ -21,5 +27,12 @@ class HelldiversPlanetSelectPageViewModel extends EventViewModel { notify(); } - onPlanetClick(HelldiversPlanet planet) {} + onPlanetClick(HelldiversPlanet planet) async { + Difficulties? difficulty = await notify(PushRouteEvent(DifficultyActivitySelectPage.route)) as Difficulties?; + if (difficulty == null) { + notify(); + } else { + notify(PopRouteEvent(arguments: HelldiversActivity(difficulty: difficulty, planet: planet))); + } + } } diff --git a/games_richpresence/lib/pages/helldivers/home/home_page.dart b/games_richpresence/lib/pages/helldivers/home/home_page.dart index 57387f3..706650e 100644 --- a/games_richpresence/lib/pages/helldivers/home/home_page.dart +++ b/games_richpresence/lib/pages/helldivers/home/home_page.dart @@ -1,11 +1,9 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:games_richpresence/components/helldivers/atoms/background/background.dart'; import 'package:games_richpresence/components/helldivers/molecules/panels/large_panel.dart'; 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'; import 'package:games_richpresence/pages/helldivers/home/home_page_view_model.dart'; @@ -32,55 +30,51 @@ class _HelldiversHomePageState extends WidgetEventObserver { @override Widget build(BuildContext context) { return HelldiversBackground( - child: Wrap( - alignment: WrapAlignment.center, - runAlignment: WrapAlignment.center, - spacing: 20, - runSpacing: 20, - children: [ - HelldiversLargePanel( - title: "HELLDIVER'S TEAM", - subtitle: "SUPEREARTH FORCE", - description: "Liberate the galaxy by sharing how many helldivers are in your destroyer", - icon: Container( - width: 70, - height: 70, - decoration: BoxDecoration(borderRadius: BorderRadius.circular(50), color: Color(0xFF3F3F3F)), - child: Image.asset(Assets.helldivers.images.helldiver.path), + child: Center( + child: ListView( + shrinkWrap: true, + children: [ + Wrap( + alignment: WrapAlignment.center, + runAlignment: WrapAlignment.center, + spacing: 20, + runSpacing: 20, + children: [ + HelldiversLargePanel( + title: tr("_helldivers_team_panel_title"), + subtitle: tr("_helldivers_team_panel_subtitle"), + description: tr("_helldivers_team_panel_description"), + icon: Container( + width: 70, + height: 70, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(50), color: Color(0xFF3F3F3F)), + child: Image.asset(Assets.helldivers.images.helldiver.path), + ), + child: Wrap( + children: _buildDiversCount(), + ), + ), + MouseRegion( + cursor: SystemMouseCursors.click, + child: GestureDetector( + onTap: () => viewModel.onActivityClick(), + child: HelldiversLargePanel( + title: tr("_helldivers_map_panel_title"), + subtitle: tr("_helldivers_map_panel_subtitle"), + description: tr("_helldivers_map_panel_description"), + icon: Container( + width: 70, + height: 70, + decoration: BoxDecoration(borderRadius: BorderRadius.circular(50), color: Color(0xFF3F3F3F)), + child: Image.asset(Assets.helldivers.images.flag.path), + ), + child: _buildActivitySelected()), + ), + ), + ], ), - 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( - planet: HelldiversPlanet( - id: 145, - name: "GAELLIVARE", - sector: "Talus", - biomeImage: "https://alexisl61.github.io/Games_RichPresence/assets/helldivers/biomes/Canyon.webp", - position: Position(x: 0.5, y: 0.5), - owner: HelldiversFactions.humans, - objective: HelldiversObjective.defense, - ennemy: HelldiversFactions.automatons, - objectiveProgression: 0.8588 )) - ], + ], + ), )); } @@ -90,7 +84,7 @@ class _HelldiversHomePageState extends WidgetEventObserver { cursor: SystemMouseCursors.click, child: GestureDetector( onTap: () { - viewModel.onGroupClicked(index); + viewModel.onGroupClicked(index + 1); }, child: Container( margin: EdgeInsets.only(right: 8, top: 8), @@ -98,11 +92,23 @@ class _HelldiversHomePageState extends WidgetEventObserver { height: 50, decoration: BoxDecoration(color: Color(0xFF3F3F3F)), child: Opacity( - opacity: viewModel.userData.group != null && viewModel.userData.group!.groupSize >= index ? 1 : 0.2, + opacity: viewModel.userData.group != null && viewModel.userData.group!.groupSize > index ? 1 : 0.2, child: Image.asset(Assets.helldivers.images.helldiverDecorated.path)), ), ), ); }); } + + Widget _buildActivitySelected() { + if (viewModel.userData.activity != null && viewModel.userData.activity!.planet != null) { + return HelldiversPlanetPanel( + planet: viewModel.userData.activity!.planet!, + difficulty: viewModel.userData.activity!.difficulty, + showObjectiveStats: false, + ); + } else { + return Container(); + } + } } 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 966fc97..49d3840 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,3 +1,4 @@ +import 'package:games_richpresence/model/class/game_activities/helldivers/activity.dart'; import 'package:games_richpresence/model/class/user_data/helldivers_user_data.dart'; import 'package:games_richpresence/model/class/user_data/user_data.dart'; import 'package:games_richpresence/model/mvvm/view_events/push_route_event.dart'; @@ -27,7 +28,7 @@ class HelldiversHomePageViewModel extends EventViewModel { } void onActivityClick() async { - await notify(const PushRouteEvent(HelldiversPlanetSelectPage.route)); + userData.activity = await notify(const PushRouteEvent(HelldiversPlanetSelectPage.route)) as HelldiversActivity?; notify(); updateRpc(userData); } diff --git a/games_richpresence/pubspec.yaml b/games_richpresence/pubspec.yaml index 59b672b..2f6f0ab 100644 --- a/games_richpresence/pubspec.yaml +++ b/games_richpresence/pubspec.yaml @@ -1,7 +1,7 @@ name: games_richpresence description: "A new Flutter project." publish_to: 'none' -version: 0.1.0 +version: 0.3.0 environment: sdk: ^3.5.3