diff --git a/actions/mode.actions.js b/actions/mode.actions.js index 19c8a5a..518517b 100644 --- a/actions/mode.actions.js +++ b/actions/mode.actions.js @@ -1,14 +1,14 @@ // Game mode actions and action creators. export const MODE_ACTION = 'MODE_ACTION'; -export const WELCOME = 'WELCOME'; -export const BOARD = 'BOARD'; +export const WELCOME = 'MODE_WELCOME'; +export const BOARD = 'MODE_BOARD'; -export const welcomeMode = () => ({ +export const welcome = () => ({ type: MODE_ACTION, action: WELCOME }); -export const boardMode = () => ({ +export const board = () => ({ type: MODE_ACTION, action: BOARD }); diff --git a/components/board/troggles.component.js b/components/board/troggles.component.js index 50dfeb0..99a69de 100644 --- a/components/board/troggles.component.js +++ b/components/board/troggles.component.js @@ -8,7 +8,7 @@ import TroggleCtrl from '../../controllers/troggle.controller.js'; export class Troggles extends Component { componentWillUnmount() { - TroggleCtrl.clearTimers(); + TroggleCtrl.clearTroggles(); }; render() { diff --git a/components/welcome/new-game.component.js b/components/welcome/new-game.component.js index eeb2396..42c1510 100644 --- a/components/welcome/new-game.component.js +++ b/components/welcome/new-game.component.js @@ -27,7 +27,7 @@ export default class NewGame extends Component { handleKeydown(e) { if (e.keyCode === 32) { - this.props.dispatch(ModeActions.boardMode()); + this.props.dispatch(ModeActions.board()); } }; diff --git a/controllers/board.controller.js b/controllers/board.controller.js index 5499537..8f1de8d 100644 --- a/controllers/board.controller.js +++ b/controllers/board.controller.js @@ -6,6 +6,7 @@ import MuncherCtrl from './muncher.controller'; import GridCtrl from './grid.controller'; import TitlebarCtrl from './titlebar.controller'; import ScorebarCtrl from './scorebar.controller'; +import ModeCtrl from './mode.controller'; let level = -1; let collision = false; @@ -20,6 +21,7 @@ const BoardCtrl = { ScorebarCtrl.setDispatch(d); MessageCtrl.setDispatch(d); TroggleCtrl.setDispatch(d); + ModeCtrl.setDispatch(d); }, isCollision: () => collision, @@ -32,6 +34,7 @@ const BoardCtrl = { ScorebarCtrl.munchSucceeded(); if (GridCtrl.isCompleted() === true) { + TroggleCtrl.freeze(); MessageCtrl.goodNews('Level complete!'); } } @@ -43,20 +46,29 @@ const BoardCtrl = { }, keyListener(e) { - if (e.keyCode === 32 && ScorebarCtrl.getLives() === 0) { + if (e.keyCode === 32 && ScorebarCtrl.isGameOver()) { + level = -1; + ScorebarCtrl.reset(); + MessageCtrl.hide(); + TroggleCtrl.unfreeze(); + ModeCtrl.welcome(); + } + else if (e.keyCode === 32 && ScorebarCtrl.getLives() === 0) { + ScorebarCtrl.flagGameOver(); MessageCtrl.show("Game over!"); } else if (e.keyCode === 32 && GridCtrl.isCompleted() === true) { this.nextLevel(); + TroggleCtrl.unfreeze(); ScorebarCtrl.levelUp(level); MessageCtrl.hide(); } else if (e.keyCode === 32 && BoardCtrl.isCollision() === true) { + console.log("Creating troggles") collision = false; TroggleCtrl.clearTroggles(); TroggleCtrl.createTroggles(level); TroggleCtrl.unfreeze(); - ScorebarCtrl.eatenByTroggle(); MessageCtrl.hide(); } else if (e.keyCode === 32 && MessageCtrl.isShowing() === true) { @@ -73,6 +85,7 @@ const BoardCtrl = { nextLevel() { level++; + collision = false; GridCtrl.generateValues(level); TitlebarCtrl.setTitle(level); TroggleCtrl.clearTroggles(); @@ -89,6 +102,7 @@ const BoardCtrl = { collision = true; TroggleCtrl.freeze(); MessageCtrl.badNews("You've been eaten by a troggle!"); + ScorebarCtrl.eatenByTroggle(); break; } } diff --git a/controllers/mode.controller.js b/controllers/mode.controller.js new file mode 100644 index 0000000..3255dc8 --- /dev/null +++ b/controllers/mode.controller.js @@ -0,0 +1,11 @@ +import * as ModeActions from '../actions/mode.actions'; + +let dispatch; + +const ModeCtrl = { + setDispatch: d => dispatch = d, + + welcome: () => dispatch(ModeActions.welcome()) +}; + +export default ModeCtrl; diff --git a/controllers/scorebar.controller.js b/controllers/scorebar.controller.js index 273478e..037bfe0 100644 --- a/controllers/scorebar.controller.js +++ b/controllers/scorebar.controller.js @@ -2,9 +2,10 @@ import * as ScorebarActions from '../actions/board/scorebar.actions'; import { SETTINGS } from '../App'; let dispatch; -let lives = 3; +let lives = 1; let currentScore = 0; let highScore = 7; +let gameOver = false; const ScorebarCtrl = { setDispatch: d => dispatch = d, @@ -13,6 +14,9 @@ const ScorebarCtrl = { getHighScore: () => highScore, getLives: () => lives, + flagGameOver: () => gameOver = true, + isGameOver: () => gameOver, + munchSucceeded: () => { currentScore += 10; dispatch(ScorebarActions.update()); @@ -37,6 +41,8 @@ const ScorebarCtrl = { reset: () => { lives = SETTINGS.LIVES; currentScore = 0; + gameOver = false; + dispatch(ScorebarActions.update()); } };