Skip to content
Snippets Groups Projects
Commit 89a175f4 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Normalize Activity application architecture

parent 940d6f1f
No related branches found
No related tags found
1 merge request!50Resolve "Normalize Activity application architecture"
Pipeline #6671 passed
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
class ToggleGameModeButton extends StatelessWidget {
const ToggleGameModeButton({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
final Activity currentActivity = activityState.currentActivity;
final String skin = currentGame.globalSettings.skin;
final String reportModeSuffix = currentGame.reportMode ? 'on' : 'off';
final String skin = currentActivity.globalSettings.skin;
final String reportModeSuffix = currentActivity.reportMode ? 'on' : 'off';
return TextButton(
child: Image(
......@@ -22,7 +22,8 @@ class ToggleGameModeButton extends StatelessWidget {
fit: BoxFit.fill,
),
onPressed: () {
BlocProvider.of<GameCubit>(context).updateReportMode(!currentGame.reportMode);
BlocProvider.of<ActivityCubit>(context)
.updateReportMode(!currentActivity.reportMode);
},
);
},
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
class GameModeIndicatorReport extends StatelessWidget {
const GameModeIndicatorReport({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
final Activity currentActivity = activityState.currentActivity;
final String skin = currentGame.globalSettings.skin;
final String reportModeSuffix = currentGame.reportMode ? 'on' : 'off';
final String skin = currentActivity.globalSettings.skin;
final String reportModeSuffix = currentActivity.reportMode ? 'on' : 'off';
return TextButton(
child: Image(
......@@ -22,7 +22,7 @@ class GameModeIndicatorReport extends StatelessWidget {
fit: BoxFit.fill,
),
onPressed: () {
BlocProvider.of<GameCubit>(context).updateReportMode(true);
BlocProvider.of<ActivityCubit>(context).updateReportMode(true);
},
);
},
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
class GameModeIndicatorWalk extends StatelessWidget {
const GameModeIndicatorWalk({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
final Activity currentActivity = activityState.currentActivity;
final String skin = currentGame.globalSettings.skin;
final String reportModeSuffix = currentGame.reportMode ? 'off' : 'on';
final String skin = currentActivity.globalSettings.skin;
final String reportModeSuffix = currentActivity.reportMode ? 'off' : 'on';
return TextButton(
child: Image(
......@@ -22,7 +22,7 @@ class GameModeIndicatorWalk extends StatelessWidget {
fit: BoxFit.fill,
),
onPressed: () {
BlocProvider.of<GameCubit>(context).updateReportMode(false);
BlocProvider.of<ActivityCubit>(context).updateReportMode(false);
},
);
},
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
import 'package:minehunter/ui/widgets/game/mode_button_toggle.dart';
import 'package:minehunter/ui/widgets/game/mode_indicator_report.dart';
import 'package:minehunter/ui/widgets/game/mode_indicator_walk.dart';
......@@ -12,11 +12,11 @@ class ToggleGameMode extends StatelessWidget {
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
final Activity currentActivity = activityState.currentActivity;
final String skin = currentGame.globalSettings.skin;
final String skin = currentActivity.globalSettings.skin;
final Image paddingBlock = Image(
image: AssetImage('assets/skins/${skin}_empty.png'),
......
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
class TopIndicator extends StatelessWidget {
const TopIndicator({super.key});
@override
Widget build(BuildContext context) {
return BlocBuilder<GameCubit, GameState>(
builder: (BuildContext context, GameState gameState) {
final Game currentGame = gameState.currentGame;
return BlocBuilder<ActivityCubit, ActivityState>(
builder: (BuildContext context, ActivityState activityState) {
final Activity currentActivity = activityState.currentActivity;
final String skin = currentGame.globalSettings.skin;
final String skin = currentActivity.globalSettings.skin;
final int flaggedCellsCount = currentGame.countFlaggedCells();
final int minesCount = currentGame.minesCount;
final int flaggedCellsCount = currentActivity.countFlaggedCells();
final int minesCount = currentActivity.minesCount;
const double blockSize = 40;
final Image flagIconBlock = Image(
......
import 'dart:async';
import 'dart:math';
import 'package:minehunter/cubit/game_cubit.dart';
import 'package:minehunter/models/game/game.dart';
import 'package:minehunter/cubit/activity/activity_cubit.dart';
import 'package:minehunter/models/activity/activity.dart';
import 'package:minehunter/models/types.dart';
class BoardAnimate {
// Start game animation: blinking tiles
static AnimatedBoardSequence createStartGameAnimationPatterns({
required Game currentGame,
required Activity currentActivity,
}) {
final AnimatedBoardSequence patterns = [];
const int patternsCount = 4;
final int sizeHorizontal = currentGame.sizeHorizontal;
final int sizeVertical = currentGame.sizeVertical;
final int sizeHorizontal = currentActivity.sizeHorizontal;
final int sizeVertical = currentActivity.sizeVertical;
for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
final AnimatedBoard pattern = [];
......@@ -33,17 +33,17 @@ class BoardAnimate {
// Failed game animation: explosions blowing from exploded mines
static AnimatedBoardSequence createExplosionAnimationPatterns({
required Game currentGame,
required Activity currentActivity,
}) {
final AnimatedBoardSequence patterns = [];
final int sizeHorizontal = currentGame.sizeHorizontal;
final int sizeVertical = currentGame.sizeVertical;
final int sizeHorizontal = currentActivity.sizeHorizontal;
final int sizeVertical = currentActivity.sizeVertical;
final List<List<int>> explodedMines = [];
for (int row = 0; row < sizeVertical; row++) {
for (int col = 0; col < sizeHorizontal; col++) {
if (currentGame.board[row][col].isExploded) {
if (currentActivity.board[row][col].isExploded) {
explodedMines.add([row, col]);
}
}
......@@ -77,13 +77,13 @@ class BoardAnimate {
// Win game animation: rotating rays from center
static AnimatedBoardSequence createWinGameAnimationPatterns({
required Game currentGame,
required Activity currentActivity,
}) {
final AnimatedBoardSequence patterns = [];
const int patternsCount = 20;
final int sizeHorizontal = currentGame.sizeHorizontal;
final int sizeVertical = currentGame.sizeVertical;
final int sizeHorizontal = currentActivity.sizeHorizontal;
final int sizeVertical = currentActivity.sizeVertical;
for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
AnimatedBoard pattern = [];
......@@ -103,13 +103,13 @@ class BoardAnimate {
// Default multi-purpose animation: sliding stripes, from top left to right bottom
static AnimatedBoardSequence createDefaultAnimationPatterns({
required Game currentGame,
required Activity currentActivity,
}) {
final AnimatedBoardSequence patterns = [];
const int patternsCount = 16;
final int sizeHorizontal = currentGame.sizeHorizontal;
final int sizeVertical = currentGame.sizeVertical;
final int sizeHorizontal = currentActivity.sizeHorizontal;
final int sizeVertical = currentActivity.sizeVertical;
for (int patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
final AnimatedBoard pattern = [];
......@@ -127,8 +127,8 @@ class BoardAnimate {
}
static void startAnimation({
required GameCubit gameCubit,
required Game currentGame,
required ActivityCubit activityCubit,
required Activity currentActivity,
required String animationType,
}) {
AnimatedBoardSequence patterns = [];
......@@ -136,28 +136,28 @@ class BoardAnimate {
switch (animationType) {
case 'start':
patterns = createStartGameAnimationPatterns(
currentGame: currentGame,
currentActivity: currentActivity,
);
break;
case 'win':
patterns = createWinGameAnimationPatterns(
currentGame: currentGame,
currentActivity: currentActivity,
);
break;
case 'fail':
patterns = createExplosionAnimationPatterns(
currentGame: currentGame,
currentActivity: currentActivity,
);
break;
default:
patterns = createDefaultAnimationPatterns(
currentGame: currentGame,
currentActivity: currentActivity,
);
}
int patternIndex = patterns.length;
gameCubit.updateAnimationInProgress(true);
activityCubit.updateAnimationInProgress(true);
const interval = Duration(milliseconds: 200);
Timer.periodic(
......@@ -165,11 +165,11 @@ class BoardAnimate {
(Timer timer) {
if (patternIndex == 0) {
timer.cancel();
gameCubit.resetAnimatedBackground();
gameCubit.updateAnimationInProgress(false);
activityCubit.resetAnimatedBackground();
activityCubit.updateAnimationInProgress(false);
} else {
patternIndex--;
gameCubit.setAnimatedBackground(patterns[patternIndex]);
activityCubit.setAnimatedBackground(patterns[patternIndex]);
}
},
);
......
......@@ -245,10 +245,10 @@ packages:
dependency: transitive
description:
name: path_provider
sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378
sha256: "50c5dd5b6e1aaf6fb3a78b33f6aa3afca52bf903a8a5298f53101fdaee55bbcd"
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.1.5"
path_provider_android:
dependency: transitive
description:
......@@ -442,10 +442,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "2735daae5150e8b1dfeb3eb0544b4d3af0061e9e82cef063adcd583bdae4306a"
sha256: "10169d3934549017f0ae278ccb07f828f9d6ea21573bab0fb77b0e1ef0fce454"
url: "https://pub.dev"
source: hosted
version: "5.7.0"
version: "5.7.2"
xdg_directories:
dependency: transitive
description:
......
......@@ -3,7 +3,7 @@ description: A minehunter game application.
publish_to: "none"
version: 0.4.1+46
version: 0.5.0+47
environment:
sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment