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

Add board animations

parent edbc066c
No related branches found
No related tags found
1 merge request!49Resolve "Add board animations"
Pipeline #1950 passed
This commit is part of merge request !49. Comments created here will be created in the context of that merge request.
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=0.0.44 app.versionName=0.0.45
app.versionCode=44 app.versionCode=45
Add board animations (start game and win)
Ajout d'animations sur le plateau (début de partie et victoire)
...@@ -7,6 +7,7 @@ class Cell { ...@@ -7,6 +7,7 @@ class Cell {
int value; int value;
bool isFixed; bool isFixed;
int conflictsCount = 0; int conflictsCount = 0;
bool isAnimated = false;
Cell( Cell(
@required this.value, @required this.value,
...@@ -84,6 +85,14 @@ class Cell { ...@@ -84,6 +85,14 @@ class Cell {
} }
} }
if (this.isAnimated) {
if (this.isFixed) {
backgroundColor = Colors.green[300];
} else {
backgroundColor = Colors.green[200];
}
}
return backgroundColor; return backgroundColor;
} }
......
...@@ -5,12 +5,18 @@ import 'package:flutter/material.dart'; ...@@ -5,12 +5,18 @@ import 'package:flutter/material.dart';
import '../entities/cell.dart'; import '../entities/cell.dart';
import '../layout/board.dart'; import '../layout/board.dart';
import '../provider/data.dart'; import '../provider/data.dart';
import '../utils/board_animate.dart';
import '../utils/board_utils.dart'; import '../utils/board_utils.dart';
import '../utils/game_utils.dart'; import '../utils/game_utils.dart';
class Game { class Game {
static Container buildGameWidget(Data myProvider) { static Container buildGameWidget(Data myProvider) {
bool gameIsFinished = BoardUtils.checkBoardIsSolved(myProvider);
if (gameIsFinished) {
BoardAnimate.startAnimation(myProvider, 'win');
}
return Container( return Container(
child: Column( child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
...@@ -18,7 +24,7 @@ class Game { ...@@ -18,7 +24,7 @@ class Game {
children: [ children: [
Board.buildGameBoard(myProvider), Board.buildGameBoard(myProvider),
SizedBox(height: 2), SizedBox(height: 2),
BoardUtils.checkBoardIsSolved(myProvider) ? Game.buildWinMessage(myProvider) : Game.buildSelectCellValueBar(myProvider), gameIsFinished ? Game.buildWinMessage(myProvider) : Game.buildSelectCellValueBar(myProvider),
], ],
), ),
); );
......
...@@ -32,6 +32,7 @@ class Data extends ChangeNotifier { ...@@ -32,6 +32,7 @@ class Data extends ChangeNotifier {
int _currentCellRow = null; int _currentCellRow = null;
int _currentCellValue = null; int _currentCellValue = null;
int _givenTipsCount = 0; int _givenTipsCount = 0;
bool _animationInProgress = false;
List _shuffledCellValues = []; List _shuffledCellValues = [];
String get level => _level; String get level => _level;
...@@ -182,4 +183,28 @@ class Data extends ChangeNotifier { ...@@ -182,4 +183,28 @@ class Data extends ChangeNotifier {
_stateRunning = stateRunning; _stateRunning = stateRunning;
notifyListeners(); notifyListeners();
} }
bool get animationInProgress => _animationInProgress;
void updateAnimationInProgress(bool animationInProgress) {
_animationInProgress = animationInProgress;
notifyListeners();
}
void setAnimatedBackground(List animatedCellsPattern) {
int boardSideLength = _blockSizeHorizontal * _blockSizeVertical;
for (var row = 0; row < boardSideLength; row++) {
for (var col = 0; col < boardSideLength; col++) {
_cells[row][col].isAnimated = animatedCellsPattern[row][col];
}
}
notifyListeners();
}
void resetAnimatedBackground() {
int boardSideLength = _blockSizeHorizontal * _blockSizeVertical;
for (var row = 0; row < boardSideLength; row++) {
for (var col = 0; col < boardSideLength; col++) {
_cells[row][col].isAnimated = false;
}
}
}
} }
import 'dart:async';
import 'dart:math';
import '../entities/cell.dart';
import '../provider/data.dart';
class BoardAnimate {
// Start game animation: blinking tiles
static List createStartGameAnimationPatterns(Data myProvider) {
List<List> patterns = [];
int patternsCount = 3;
int boardSideLength = myProvider.blockSizeHorizontal * myProvider.blockSizeVertical;
for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
List<List> pattern = [];
for (var row = 0; row < boardSideLength; row++) {
List<bool> patternRow = [];
for (var col = 0; col < boardSideLength; col++) {
patternRow.add(((patternIndex + row + col) % 2 == 0));
}
pattern.add(patternRow);
}
patterns.add(pattern);
}
return patterns;
}
// Win game animation: fill board with colored rows, from bottom to top
static List createWinGameAnimationPatterns(Data myProvider) {
List<List> patterns = [];
int boardSideLength = myProvider.blockSizeHorizontal * myProvider.blockSizeVertical;
int patternsCount = boardSideLength + 6;
for (var patternIndex = 0; patternIndex < patternsCount; patternIndex++) {
List<List> pattern = [];
for (var row = 0; row < boardSideLength; row++) {
List<bool> patternRow = [];
for (var col = 0; col < boardSideLength; col++) {
patternRow.add(row > (patternIndex - 3));
}
pattern.add(patternRow);
}
patterns.add(pattern);
}
return patterns;
}
static void startAnimation(Data myProvider, String animationType) {
List patterns = [];
switch(animationType) {
case 'start':
patterns = createStartGameAnimationPatterns(myProvider);
break;
case 'win':
patterns = createWinGameAnimationPatterns(myProvider);
break;
}
int _patternIndex = patterns.length;
myProvider.updateAnimationInProgress(true);
Timer _timerAnimateBoard;
const interval = const Duration(milliseconds: 200);
_timerAnimateBoard = new Timer.periodic(
interval,
(Timer timer) {
if (_patternIndex == 0) {
timer.cancel();
myProvider.resetAnimatedBackground();
myProvider.updateAnimationInProgress(false);
} else {
_patternIndex--;
myProvider.setAnimatedBackground(patterns[_patternIndex]);
}
},
);
}
}
import '../provider/data.dart'; import '../provider/data.dart';
import '../utils/board_animate.dart';
import '../utils/board_utils.dart'; import '../utils/board_utils.dart';
import '../utils/game_utils.dart'; import '../utils/game_utils.dart';
...@@ -15,6 +16,7 @@ class GameUtils { ...@@ -15,6 +16,7 @@ class GameUtils {
myProvider.shuffleCellValues(); myProvider.shuffleCellValues();
myProvider.updateCells = BoardUtils.createEmptyBoard(myProvider.blockSizeHorizontal * myProvider.blockSizeVertical); myProvider.updateCells = BoardUtils.createEmptyBoard(myProvider.blockSizeHorizontal * myProvider.blockSizeVertical);
BoardUtils.pickGrid(myProvider); BoardUtils.pickGrid(myProvider);
BoardAnimate.startAnimation(myProvider, 'start');
} }
static void showTip(Data myProvider) { static void showTip(Data myProvider) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment