lainTSX/src/core/computeAction.ts

103 lines
3.2 KiB
TypeScript
Raw Normal View History

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";
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;
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-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-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
};
};
export default computeAction;