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
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;
|
|
|