2020-10-30 18:34:04 +00:00
|
|
|
import { GameContext } from "../components/StateManagers/EventManager";
|
2020-10-31 18:11:27 +00:00
|
|
|
import available_blue_orbs_on_projection from "../resources/available_blue_orbs_on_projection.json";
|
2020-10-29 18:47:37 +00:00
|
|
|
|
|
|
|
const computeAction = (gameContext: GameContext) => {
|
2020-10-30 18:34:04 +00:00
|
|
|
let event;
|
|
|
|
let newBlueOrbColIdx;
|
|
|
|
let newBlueOrbRowIdx;
|
|
|
|
let newLevel;
|
|
|
|
let newSiteRotIdx;
|
2020-10-31 18:11:27 +00:00
|
|
|
let newActiveBlueOrbId;
|
2020-10-29 18:47:37 +00:00
|
|
|
|
|
|
|
switch (gameContext.keyPress) {
|
|
|
|
case "left":
|
2020-10-31 18:11:27 +00:00
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx - 1;
|
|
|
|
if (newBlueOrbColIdx < 0) {
|
|
|
|
event = "move_left";
|
|
|
|
newSiteRotIdx = parseInt(gameContext.siteRotIdx) + 1;
|
|
|
|
if (newSiteRotIdx > 8) newSiteRotIdx = "1";
|
|
|
|
console.log(newSiteRotIdx)
|
|
|
|
newBlueOrbColIdx = 0;
|
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
2020-10-30 18:34:04 +00:00
|
|
|
} else {
|
2020-10-31 18:11:27 +00:00
|
|
|
event = "change_blue_orb";
|
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
2020-10-30 18:34:04 +00:00
|
|
|
}
|
2020-10-31 18:11:27 +00:00
|
|
|
break;
|
2020-10-30 18:34:04 +00:00
|
|
|
case "down":
|
2020-10-31 18:11:27 +00:00
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx + 1;
|
|
|
|
if (newBlueOrbRowIdx > 2) {
|
2020-10-30 18:34:04 +00:00
|
|
|
event = "move_down";
|
2020-10-29 18:47:37 +00:00
|
|
|
|
2020-10-30 18:34:04 +00:00
|
|
|
newLevel = (parseInt(gameContext.currentLevel) - 1)
|
|
|
|
.toString()
|
|
|
|
.padStart(2, "0");
|
2020-10-31 18:11:27 +00:00
|
|
|
|
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx;
|
|
|
|
newBlueOrbRowIdx = 0;
|
|
|
|
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
2020-10-30 18:34:04 +00:00
|
|
|
} else {
|
|
|
|
event = "change_blue_orb";
|
2020-10-31 18:11:27 +00:00
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
2020-10-30 18:34:04 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "up":
|
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx - 1;
|
|
|
|
if (newBlueOrbRowIdx < 0) {
|
|
|
|
event = "move_up";
|
|
|
|
|
|
|
|
newLevel = (parseInt(gameContext.currentLevel) + 1)
|
|
|
|
.toString()
|
|
|
|
.padStart(2, "0");
|
|
|
|
|
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx;
|
|
|
|
newBlueOrbRowIdx = 2;
|
|
|
|
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
|
|
|
} else {
|
|
|
|
event = "change_blue_orb";
|
2020-10-31 18:11:27 +00:00
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "right":
|
|
|
|
newBlueOrbColIdx = gameContext.blueOrbColIdx + 1;
|
|
|
|
if (newBlueOrbColIdx > 3) {
|
|
|
|
event = "move_right";
|
|
|
|
newSiteRotIdx = (parseInt(gameContext.siteRotIdx) - 1).toString();
|
|
|
|
newBlueOrbColIdx = 0;
|
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
|
|
|
} else {
|
|
|
|
event = "change_blue_orb";
|
|
|
|
newBlueOrbRowIdx = gameContext.blueOrbRowIdx;
|
|
|
|
newLevel = gameContext.currentLevel;
|
|
|
|
newSiteRotIdx = gameContext.siteRotIdx;
|
2020-10-29 18:47:37 +00:00
|
|
|
}
|
|
|
|
}
|
2020-10-30 18:34:04 +00:00
|
|
|
|
2020-10-31 18:11:27 +00:00
|
|
|
newActiveBlueOrbId =
|
|
|
|
newLevel +
|
|
|
|
available_blue_orbs_on_projection[
|
|
|
|
newSiteRotIdx as keyof typeof available_blue_orbs_on_projection
|
|
|
|
][newBlueOrbRowIdx as number][newBlueOrbColIdx as number];
|
|
|
|
|
2020-10-30 18:34:04 +00:00
|
|
|
return {
|
|
|
|
event: event,
|
|
|
|
newBlueOrbColIdx: newBlueOrbColIdx,
|
|
|
|
newBlueOrbRowIdx: newBlueOrbRowIdx,
|
|
|
|
newSiteRotIdx: newSiteRotIdx,
|
|
|
|
newLevel: newLevel,
|
2020-10-31 18:11:27 +00:00
|
|
|
newActiveBlueOrbId: newActiveBlueOrbId,
|
2020-10-30 18:34:04 +00:00
|
|
|
};
|
2020-10-29 18:47:37 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
export default computeAction;
|