mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-23 07:29:06 +00:00
69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
const handleMediaSceneEvent = (gameContext: any) => {
|
|
const keyPress = gameContext.keyPress;
|
|
const activeMediaComponent = gameContext.activeMediaComponent;
|
|
|
|
const wordPosStateIdx = gameContext.wordPosStateIdx;
|
|
const rightSideComponentIdx = gameContext.rightSideComponentIdx;
|
|
|
|
const rightSideComponents = ["fstWord", "sndWord", "thirdWord"];
|
|
|
|
const calculateNewRightSide = (
|
|
direction: string,
|
|
wordPosStateIdx: number,
|
|
rightSideComponentIdx: number
|
|
) => {
|
|
if (direction === "UP") {
|
|
wordPosStateIdx--;
|
|
if (wordPosStateIdx < 1) {
|
|
wordPosStateIdx = 6;
|
|
}
|
|
rightSideComponentIdx--;
|
|
if (rightSideComponentIdx < 0) {
|
|
rightSideComponentIdx = 2;
|
|
}
|
|
} else if (direction === "DOWN") {
|
|
wordPosStateIdx++;
|
|
if (wordPosStateIdx > 6) {
|
|
wordPosStateIdx = 1;
|
|
}
|
|
rightSideComponentIdx++;
|
|
if (rightSideComponentIdx > 2) {
|
|
rightSideComponentIdx = 0;
|
|
}
|
|
}
|
|
|
|
return {
|
|
wordPosStateIdx: wordPosStateIdx,
|
|
rightSideComponentIdx: rightSideComponentIdx,
|
|
};
|
|
};
|
|
|
|
switch (keyPress) {
|
|
case "UP":
|
|
case "DOWN":
|
|
case "RIGHT":
|
|
case "LEFT":
|
|
if (rightSideComponents.includes(activeMediaComponent)) {
|
|
const rightSide = calculateNewRightSide(
|
|
keyPress,
|
|
wordPosStateIdx,
|
|
rightSideComponentIdx
|
|
);
|
|
return {
|
|
event: `media_rightside_${keyPress.toLowerCase()}`,
|
|
rightSideComponentIdx: rightSide.rightSideComponentIdx,
|
|
wordPosStateIdx: rightSide.wordPosStateIdx,
|
|
};
|
|
} else {
|
|
const leftSideComponentIdx = keyPress === "UP" ? 0 : 1;
|
|
return {
|
|
event: `media_leftside_${keyPress.toLowerCase()}`,
|
|
leftSideComponentIdx: leftSideComponentIdx,
|
|
};
|
|
}
|
|
case "CIRCLE":
|
|
return { event: `media_${activeMediaComponent}_select` };
|
|
}
|
|
};
|
|
|
|
export default handleMediaSceneEvent;
|