mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-23 07:29:06 +00:00
116 lines
3.4 KiB
TypeScript
116 lines
3.4 KiB
TypeScript
import authorize_user_letters from "../../resources/authorize_user_letters.json";
|
|
import handleNameSelection from "../../utils/handleNameSelection";
|
|
|
|
const handleBootSceneKeyPress = (bootSceneContext: any) => {
|
|
const {
|
|
keyPress,
|
|
subscene,
|
|
activeMainMenuComponent,
|
|
activePromptComponent,
|
|
promptVisible,
|
|
authorizeUserLetterIdx,
|
|
playerName,
|
|
} = bootSceneContext;
|
|
|
|
if (promptVisible) {
|
|
switch (keyPress) {
|
|
case "LEFT":
|
|
return { event: "prompt_left" };
|
|
case "RIGHT":
|
|
return { event: "prompt_right" };
|
|
case "CIRCLE":
|
|
switch (activePromptComponent) {
|
|
case "no":
|
|
return { event: "load_data_no" };
|
|
case "yes":
|
|
return {
|
|
event: "load_data_yes",
|
|
};
|
|
}
|
|
}
|
|
} else {
|
|
switch (subscene) {
|
|
case "main_menu":
|
|
switch (keyPress) {
|
|
case "UP":
|
|
case "DOWN":
|
|
return { event: `main_menu_${keyPress.toLowerCase()}` };
|
|
case "CIRCLE":
|
|
return { event: `main_menu_${activeMainMenuComponent}_select` };
|
|
}
|
|
break;
|
|
case "authorize_user":
|
|
switch (keyPress) {
|
|
case "X":
|
|
if (playerName.length > 0) {
|
|
return {
|
|
event: "update_player_name",
|
|
playerName: playerName.slice(0, -1),
|
|
};
|
|
} else {
|
|
return { event: "authorize_user_back" };
|
|
}
|
|
case "LEFT":
|
|
// if utmost left, break
|
|
if ([0, 13, 26, 39, 52].includes(authorizeUserLetterIdx)) break;
|
|
else {
|
|
return {
|
|
event: "authorize_user_left",
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 1,
|
|
};
|
|
}
|
|
case "RIGHT":
|
|
// if utmost right, break
|
|
if ([12, 25, 38, 51, 64].includes(authorizeUserLetterIdx)) break;
|
|
else {
|
|
return {
|
|
event: "authorize_user_right",
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 1,
|
|
};
|
|
}
|
|
case "DOWN":
|
|
// if utmost down, break
|
|
if (
|
|
Array.from(new Array(13), (x, i) => i + 52).includes(
|
|
authorizeUserLetterIdx
|
|
)
|
|
)
|
|
break;
|
|
else {
|
|
return {
|
|
event: "authorize_user_down",
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 13,
|
|
};
|
|
}
|
|
case "UP":
|
|
// if utmost up, break
|
|
if (
|
|
Array.from(new Array(13), (x, i) => i).includes(
|
|
authorizeUserLetterIdx
|
|
)
|
|
)
|
|
break;
|
|
else {
|
|
return {
|
|
event: "authorize_user_up",
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 13,
|
|
};
|
|
}
|
|
case "CIRCLE":
|
|
const chosenCharacter =
|
|
authorize_user_letters[
|
|
authorizeUserLetterIdx.toString() as keyof typeof authorize_user_letters
|
|
];
|
|
|
|
const newName = handleNameSelection(playerName, chosenCharacter);
|
|
|
|
if (newName !== undefined)
|
|
return { event: "update_player_name", playerName: newName };
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
};
|
|
|
|
export default handleBootSceneKeyPress;
|