You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

115 lines
3.5 KiB

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 HighScoreCtrl from '../high-score/high-score.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);
HighScoreCtrl.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 && e.keyCode !== 13 && MessageCtrl.isShowing() === false) {
MuncherCtrl.move(e);
}
else if (ScorebarCtrl.isGameOver()) {
level = -1;
HighScoreCtrl.updateScore(ScorebarCtrl.getCurrentScore());
ScorebarCtrl.reset();
MessageCtrl.hide();
TroggleCtrl.unfreeze();
ModeCtrl.highscore();
}
else if (ScorebarCtrl.getLives() === 0) {
ScorebarCtrl.gameOver();
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;