2021-02-09 17:26:08 +00:00
|
|
|
import authorize_user_letters from "../../resources/authorize_user_letters.json";
|
2021-02-20 14:35:23 +00:00
|
|
|
import handleNameSelection from "../../helpers/name-selection-helpers";
|
|
|
|
import {
|
|
|
|
changeMainMenuComponent,
|
|
|
|
changePromptComponent,
|
|
|
|
enterLoadData,
|
|
|
|
enterUserAuthorization,
|
|
|
|
exitLoadData,
|
|
|
|
exitUserAuthorization,
|
|
|
|
failUpdatePlayerName,
|
|
|
|
loadGame,
|
2021-02-23 17:04:53 +00:00
|
|
|
loadGameFail,
|
2021-02-20 14:35:23 +00:00
|
|
|
removePlayerNameLastChar,
|
|
|
|
startNewGame,
|
|
|
|
updateAuthorizeUserLetterIdx,
|
|
|
|
updatePlayerName,
|
|
|
|
} from "../eventTemplates";
|
2021-02-23 17:04:53 +00:00
|
|
|
import { BootSceneContext, GameEvent } from "../../types/types";
|
2021-02-09 17:26:08 +00:00
|
|
|
|
2021-02-20 14:35:23 +00:00
|
|
|
const handleBootSceneKeyPress = (
|
|
|
|
bootSceneContext: BootSceneContext
|
|
|
|
): GameEvent | undefined => {
|
2021-02-08 17:53:28 +00:00
|
|
|
const {
|
|
|
|
keyPress,
|
|
|
|
subscene,
|
|
|
|
activeMainMenuComponent,
|
|
|
|
activePromptComponent,
|
|
|
|
promptVisible,
|
|
|
|
authorizeUserLetterIdx,
|
2021-02-09 17:26:08 +00:00
|
|
|
playerName,
|
2021-02-08 17:53:28 +00:00
|
|
|
} = bootSceneContext;
|
|
|
|
|
|
|
|
if (promptVisible) {
|
|
|
|
switch (keyPress) {
|
|
|
|
case "LEFT":
|
2021-02-20 14:35:23 +00:00
|
|
|
return changePromptComponent({ activePromptComponent: "yes" });
|
2021-02-08 17:53:28 +00:00
|
|
|
case "RIGHT":
|
2021-02-20 14:35:23 +00:00
|
|
|
return changePromptComponent({ activePromptComponent: "no" });
|
2021-02-08 17:53:28 +00:00
|
|
|
case "CIRCLE":
|
|
|
|
switch (activePromptComponent) {
|
|
|
|
case "no":
|
2021-02-20 14:35:23 +00:00
|
|
|
return exitLoadData;
|
2021-02-08 17:53:28 +00:00
|
|
|
case "yes":
|
2021-02-23 17:04:53 +00:00
|
|
|
const stateToLoad = localStorage.getItem("lainSaveState");
|
|
|
|
|
|
|
|
if (stateToLoad)
|
|
|
|
return loadGame({
|
|
|
|
userSaveState: JSON.parse(stateToLoad),
|
|
|
|
});
|
|
|
|
else return loadGameFail;
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch (subscene) {
|
|
|
|
case "main_menu":
|
|
|
|
switch (keyPress) {
|
|
|
|
case "UP":
|
|
|
|
case "DOWN":
|
2021-02-20 14:35:23 +00:00
|
|
|
const newComponent =
|
|
|
|
keyPress === "UP" ? "authorize_user" : "load_data";
|
|
|
|
return changeMainMenuComponent({
|
|
|
|
activeMainMenuComponent: newComponent,
|
|
|
|
});
|
2021-02-08 17:53:28 +00:00
|
|
|
case "CIRCLE":
|
2021-02-20 14:35:23 +00:00
|
|
|
switch (activeMainMenuComponent) {
|
|
|
|
case "authorize_user":
|
|
|
|
return enterUserAuthorization;
|
|
|
|
case "load_data":
|
|
|
|
return enterLoadData;
|
|
|
|
}
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "authorize_user":
|
|
|
|
switch (keyPress) {
|
2021-02-10 16:05:20 +00:00
|
|
|
case "START":
|
|
|
|
if (playerName.length > 0) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return startNewGame;
|
2021-02-10 16:05:20 +00:00
|
|
|
}
|
2021-02-20 14:35:23 +00:00
|
|
|
return;
|
2021-02-08 17:53:28 +00:00
|
|
|
case "X":
|
2021-02-09 17:26:08 +00:00
|
|
|
if (playerName.length > 0) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return removePlayerNameLastChar({
|
2021-02-09 17:26:08 +00:00
|
|
|
playerName: playerName.slice(0, -1),
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-09 17:26:08 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return exitUserAuthorization;
|
2021-02-09 17:26:08 +00:00
|
|
|
}
|
2021-02-08 17:53:28 +00:00
|
|
|
case "LEFT":
|
|
|
|
// if utmost left, break
|
2021-02-10 16:05:20 +00:00
|
|
|
if (
|
|
|
|
[0, 13, 26, 39, 52].includes(authorizeUserLetterIdx) ||
|
|
|
|
authorizeUserLetterIdx === 15
|
|
|
|
)
|
2021-02-20 14:35:23 +00:00
|
|
|
return;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip
|
|
|
|
else if (
|
|
|
|
authorizeUserLetterIdx === 41 ||
|
|
|
|
authorizeUserLetterIdx === 17 ||
|
|
|
|
authorizeUserLetterIdx === 30 ||
|
|
|
|
authorizeUserLetterIdx === 43 ||
|
|
|
|
authorizeUserLetterIdx === 19 ||
|
|
|
|
authorizeUserLetterIdx === 45
|
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 2,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-08 17:53:28 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 1,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
case "RIGHT":
|
|
|
|
// if utmost right, break
|
2021-02-20 14:35:23 +00:00
|
|
|
if ([12, 25, 38, 51, 64].includes(authorizeUserLetterIdx)) return;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
else if (
|
|
|
|
authorizeUserLetterIdx === 39 ||
|
|
|
|
authorizeUserLetterIdx === 41 ||
|
|
|
|
authorizeUserLetterIdx === 28 ||
|
|
|
|
authorizeUserLetterIdx === 15 ||
|
|
|
|
authorizeUserLetterIdx === 43 ||
|
|
|
|
authorizeUserLetterIdx === 17
|
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 2,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-08 17:53:28 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 1,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
case "DOWN":
|
|
|
|
// if utmost down, break
|
|
|
|
if (
|
|
|
|
Array.from(new Array(13), (x, i) => i + 52).includes(
|
|
|
|
authorizeUserLetterIdx
|
|
|
|
)
|
2021-02-10 16:05:20 +00:00
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
} else if (
|
|
|
|
authorizeUserLetterIdx === 0 ||
|
|
|
|
authorizeUserLetterIdx === 1 ||
|
|
|
|
authorizeUserLetterIdx === 52 ||
|
|
|
|
authorizeUserLetterIdx === 27 ||
|
|
|
|
authorizeUserLetterIdx === 31 ||
|
|
|
|
authorizeUserLetterIdx === 5
|
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 26,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else if (authorizeUserLetterIdx === 3) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 52,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-08 17:53:28 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 13,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
case "UP":
|
|
|
|
// if utmost up, break
|
|
|
|
if (
|
|
|
|
Array.from(new Array(13), (x, i) => i).includes(
|
|
|
|
authorizeUserLetterIdx
|
|
|
|
)
|
2021-02-10 16:05:20 +00:00
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
} else if (
|
|
|
|
authorizeUserLetterIdx === 26 ||
|
|
|
|
authorizeUserLetterIdx === 27 ||
|
|
|
|
authorizeUserLetterIdx === 53 ||
|
|
|
|
authorizeUserLetterIdx === 31 ||
|
|
|
|
authorizeUserLetterIdx === 57
|
|
|
|
) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 26,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else if (authorizeUserLetterIdx === 55) {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-10 16:05:20 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 52,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-10 16:05:20 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return updateAuthorizeUserLetterIdx({
|
2021-02-08 17:53:28 +00:00
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 13,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
2021-02-09 17:26:08 +00:00
|
|
|
case "CIRCLE":
|
|
|
|
const chosenCharacter =
|
|
|
|
authorize_user_letters[
|
|
|
|
authorizeUserLetterIdx.toString() as keyof typeof authorize_user_letters
|
|
|
|
];
|
|
|
|
|
|
|
|
const newName = handleNameSelection(playerName, chosenCharacter);
|
|
|
|
|
|
|
|
if (newName !== undefined)
|
2021-02-20 14:35:23 +00:00
|
|
|
return updatePlayerName({ playerName: newName });
|
|
|
|
else return failUpdatePlayerName;
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default handleBootSceneKeyPress;
|