2021-02-09 17:26:08 +00:00
|
|
|
import authorize_user_letters from "../../resources/authorize_user_letters.json";
|
|
|
|
import handleNameSelection from "../../utils/handleNameSelection";
|
|
|
|
|
2021-02-08 17:53:28 +00:00
|
|
|
const handleBootSceneKeyPress = (bootSceneContext: any) => {
|
|
|
|
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":
|
|
|
|
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) {
|
2021-02-10 16:05:20 +00:00
|
|
|
case "START":
|
|
|
|
if (playerName.length > 0) {
|
|
|
|
return {
|
|
|
|
event: "start_new_game",
|
|
|
|
};
|
|
|
|
}
|
|
|
|
break;
|
2021-02-08 17:53:28 +00:00
|
|
|
case "X":
|
2021-02-09 17:26:08 +00:00
|
|
|
if (playerName.length > 0) {
|
|
|
|
return {
|
2021-02-10 16:05:20 +00:00
|
|
|
event: "remove_last_char",
|
2021-02-09 17:26:08 +00:00
|
|
|
playerName: playerName.slice(0, -1),
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
return { event: "authorize_user_back" };
|
|
|
|
}
|
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
|
|
|
|
)
|
|
|
|
break;
|
|
|
|
// skip
|
|
|
|
else if (
|
|
|
|
authorizeUserLetterIdx === 41 ||
|
|
|
|
authorizeUserLetterIdx === 17 ||
|
|
|
|
authorizeUserLetterIdx === 30 ||
|
|
|
|
authorizeUserLetterIdx === 43 ||
|
|
|
|
authorizeUserLetterIdx === 19 ||
|
|
|
|
authorizeUserLetterIdx === 45
|
|
|
|
) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_left",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 2,
|
|
|
|
};
|
|
|
|
} else {
|
2021-02-08 17:53:28 +00:00
|
|
|
return {
|
|
|
|
event: "authorize_user_left",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 1,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
case "RIGHT":
|
|
|
|
// if utmost right, break
|
|
|
|
if ([12, 25, 38, 51, 64].includes(authorizeUserLetterIdx)) break;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
else if (
|
|
|
|
authorizeUserLetterIdx === 39 ||
|
|
|
|
authorizeUserLetterIdx === 41 ||
|
|
|
|
authorizeUserLetterIdx === 28 ||
|
|
|
|
authorizeUserLetterIdx === 15 ||
|
|
|
|
authorizeUserLetterIdx === 43 ||
|
|
|
|
authorizeUserLetterIdx === 17
|
|
|
|
) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_right",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 2,
|
|
|
|
};
|
|
|
|
} else {
|
2021-02-08 17:53:28 +00:00
|
|
|
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
|
|
|
|
)
|
2021-02-10 16:05:20 +00:00
|
|
|
) {
|
2021-02-08 17:53:28 +00:00
|
|
|
break;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
} else if (
|
|
|
|
authorizeUserLetterIdx === 0 ||
|
|
|
|
authorizeUserLetterIdx === 1 ||
|
|
|
|
authorizeUserLetterIdx === 52 ||
|
|
|
|
authorizeUserLetterIdx === 27 ||
|
|
|
|
authorizeUserLetterIdx === 31 ||
|
|
|
|
authorizeUserLetterIdx === 5
|
|
|
|
) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_down",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 26,
|
|
|
|
};
|
|
|
|
} else if (authorizeUserLetterIdx === 3) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_down",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx + 52,
|
|
|
|
};
|
|
|
|
} else {
|
2021-02-08 17:53:28 +00:00
|
|
|
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
|
|
|
|
)
|
2021-02-10 16:05:20 +00:00
|
|
|
) {
|
2021-02-08 17:53:28 +00:00
|
|
|
break;
|
2021-02-10 16:05:20 +00:00
|
|
|
// skip empty
|
|
|
|
} else if (
|
|
|
|
authorizeUserLetterIdx === 26 ||
|
|
|
|
authorizeUserLetterIdx === 27 ||
|
|
|
|
authorizeUserLetterIdx === 53 ||
|
|
|
|
authorizeUserLetterIdx === 31 ||
|
|
|
|
authorizeUserLetterIdx === 57
|
|
|
|
) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_up",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 26,
|
|
|
|
};
|
|
|
|
} else if (authorizeUserLetterIdx === 55) {
|
|
|
|
return {
|
|
|
|
event: "authorize_user_up",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 52,
|
|
|
|
};
|
|
|
|
} else {
|
2021-02-08 17:53:28 +00:00
|
|
|
return {
|
|
|
|
event: "authorize_user_up",
|
|
|
|
authorizeUserLetterIdx: authorizeUserLetterIdx - 13,
|
|
|
|
};
|
|
|
|
}
|
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)
|
|
|
|
return { event: "update_player_name", playerName: newName };
|
2021-02-10 16:05:20 +00:00
|
|
|
else return { event: "update_player_name_denied" };
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
2021-02-09 17:26:08 +00:00
|
|
|
break;
|
2021-02-08 17:53:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
export default handleBootSceneKeyPress;
|