import SETTINGS from '../../AppSettings'; import TroggleCtrl from './troggle.controller'; import MessageCtrl from './message.controller'; 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; let dispatch; const BoardCtrl = { setDispatch: (d) => { dispatch = d; GridCtrl.setDispatch(d); MuncherCtrl.setDispatch(d); TitlebarCtrl.setDispatch(d); ScorebarCtrl.setDispatch(d); MessageCtrl.setDispatch(d); TroggleCtrl.setDispatch(d); ModeCtrl.setDispatch(d); }, isCollision: () => collision, munch() { const index = MuncherCtrl.getY() * SETTINGS.GRID_WIDTH + MuncherCtrl.getX(); if (GridCtrl.getValues()[index].valid) { GridCtrl.hideValue(index); ScorebarCtrl.munchSucceeded(); if (GridCtrl.isCompleted() === true) { TroggleCtrl.freeze(); MessageCtrl.goodNews('Level complete!'); } } else { TroggleCtrl.freeze(); MessageCtrl.badNews(`${GridCtrl.getValues()[index].value} is not a match.`); ScorebarCtrl.munchFailed(); } }, keyListener(e) { if (e.keyCode !== 32 && MessageCtrl.isShowing() === false) { MuncherCtrl.move(e); } else if (ScorebarCtrl.isGameOver()) { level = -1; ScorebarCtrl.reset(); MessageCtrl.hide(); TroggleCtrl.unfreeze(); ModeCtrl.welcome(); } else if (ScorebarCtrl.getLives() === 0) { ScorebarCtrl.flagGameOver(); MessageCtrl.show("Game over!"); } else if (GridCtrl.isCompleted() === true) { this.nextLevel(); TroggleCtrl.unfreeze(); ScorebarCtrl.levelUp(level); MessageCtrl.hide(); } else if (BoardCtrl.isCollision() === true) { collision = false; TroggleCtrl.clearTroggles(); TroggleCtrl.createTroggles(level); TroggleCtrl.unfreeze(); MessageCtrl.hide(); } else if (MessageCtrl.isShowing() === true) { TroggleCtrl.unfreeze(); MessageCtrl.hide(); } else if (MessageCtrl.isShowing() === false) { this.munch(); } }, nextLevel() { level++; collision = false; ScorebarCtrl.update(); GridCtrl.generateValues(level); TitlebarCtrl.setTitle(level); TroggleCtrl.clearTroggles(); TroggleCtrl.createTroggles(level); }, checkCollision() { const x = MuncherCtrl.getX(); const y = MuncherCtrl.getY(); const troggles = TroggleCtrl.getTroggles(); for (let i = 0; i < troggles.length; i++) { if (troggles[i].x === x && troggles[i].y === y) { collision = true; TroggleCtrl.freeze(); MessageCtrl.badNews("You've been eaten by a troggle!"); ScorebarCtrl.eatenByTroggle(); break; } } } }; export default BoardCtrl;