2021-02-20 14:35:23 +00:00
|
|
|
import { findNodeFromWord } from "../../helpers/media-helpers";
|
2021-02-17 16:21:27 +00:00
|
|
|
import { MediaSceneContext } from "../../store";
|
2021-02-20 14:35:23 +00:00
|
|
|
import {
|
|
|
|
changeLeftMediaComponent,
|
|
|
|
changeMediaSide,
|
|
|
|
changeRightMediaComponent,
|
|
|
|
exitMedia,
|
|
|
|
playMedia,
|
|
|
|
selectWord,
|
|
|
|
wordNotFound,
|
|
|
|
} from "../eventTemplates";
|
|
|
|
import { GameEvent } from "../handleEvent";
|
2021-02-02 16:31:50 +00:00
|
|
|
|
2021-02-20 14:35:23 +00:00
|
|
|
const handleMediaSceneKeyPress = (
|
|
|
|
mediaSceneContext: MediaSceneContext
|
|
|
|
): GameEvent | undefined => {
|
2021-02-01 18:13:32 +00:00
|
|
|
const {
|
|
|
|
keyPress,
|
|
|
|
activeMediaComponent,
|
|
|
|
wordPosStateIdx,
|
2021-02-02 16:31:50 +00:00
|
|
|
activeNode,
|
|
|
|
activeSite,
|
2021-02-07 15:12:19 +00:00
|
|
|
gameProgress,
|
2021-02-17 16:21:27 +00:00
|
|
|
currentMediaSide,
|
|
|
|
lastActiveMediaComponents,
|
2021-02-01 18:13:32 +00:00
|
|
|
} = mediaSceneContext;
|
2020-12-21 16:56:06 +00:00
|
|
|
|
2021-02-17 16:21:27 +00:00
|
|
|
switch (currentMediaSide) {
|
|
|
|
case "left":
|
|
|
|
switch (keyPress) {
|
|
|
|
case "UP":
|
2021-02-19 17:57:02 +00:00
|
|
|
case "DOWN": {
|
2021-02-20 14:35:23 +00:00
|
|
|
const newComponent = keyPress === "UP" ? "play" : "exit";
|
|
|
|
|
2021-02-19 17:57:02 +00:00
|
|
|
return changeLeftMediaComponent({ activeComponent: newComponent });
|
|
|
|
}
|
|
|
|
case "RIGHT": {
|
|
|
|
return changeMediaSide({
|
|
|
|
activeMediaComponent: lastActiveMediaComponents.right,
|
|
|
|
lastActiveMediaComponents: {
|
|
|
|
...lastActiveMediaComponents,
|
|
|
|
left: activeMediaComponent as "play" | "exit",
|
|
|
|
},
|
|
|
|
currentMediaSide: "right",
|
|
|
|
});
|
|
|
|
}
|
2021-02-17 16:21:27 +00:00
|
|
|
case "CIRCLE":
|
|
|
|
switch (activeMediaComponent) {
|
|
|
|
case "play":
|
2021-02-20 14:35:23 +00:00
|
|
|
return playMedia;
|
2021-02-17 16:21:27 +00:00
|
|
|
case "exit":
|
2021-02-20 14:35:23 +00:00
|
|
|
return exitMedia;
|
2021-02-17 16:21:27 +00:00
|
|
|
}
|
2020-12-21 16:56:06 +00:00
|
|
|
}
|
2021-02-17 16:21:27 +00:00
|
|
|
break;
|
|
|
|
case "right":
|
|
|
|
switch (keyPress) {
|
|
|
|
case "UP": {
|
|
|
|
const newWordPosStateIdx =
|
|
|
|
wordPosStateIdx - 1 < 1 ? 6 : wordPosStateIdx - 1;
|
|
|
|
const newComponent = (() => {
|
|
|
|
switch (activeMediaComponent) {
|
2021-02-20 14:35:23 +00:00
|
|
|
default:
|
2021-02-17 16:21:27 +00:00
|
|
|
case "fstWord":
|
|
|
|
return "thirdWord";
|
|
|
|
case "sndWord":
|
|
|
|
return "fstWord";
|
|
|
|
case "thirdWord":
|
|
|
|
return "sndWord";
|
|
|
|
}
|
|
|
|
})();
|
2021-02-20 14:35:23 +00:00
|
|
|
return changeRightMediaComponent({
|
|
|
|
activeComponent: newComponent,
|
2021-02-17 16:21:27 +00:00
|
|
|
wordPosStateIdx: newWordPosStateIdx,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-17 16:21:27 +00:00
|
|
|
}
|
|
|
|
case "DOWN": {
|
|
|
|
const newWordPosStateIdx =
|
|
|
|
wordPosStateIdx + 1 > 6 ? 1 : wordPosStateIdx + 1;
|
|
|
|
const newComponent = (() => {
|
|
|
|
switch (activeMediaComponent) {
|
2021-02-20 14:35:23 +00:00
|
|
|
default:
|
2021-02-17 16:21:27 +00:00
|
|
|
case "fstWord":
|
|
|
|
return "sndWord";
|
|
|
|
case "sndWord":
|
|
|
|
return "thirdWord";
|
|
|
|
case "thirdWord":
|
|
|
|
return "fstWord";
|
|
|
|
}
|
|
|
|
})();
|
2020-12-21 16:56:06 +00:00
|
|
|
|
2021-02-20 14:35:23 +00:00
|
|
|
return changeRightMediaComponent({
|
|
|
|
activeComponent: newComponent,
|
2021-02-17 16:21:27 +00:00
|
|
|
wordPosStateIdx: newWordPosStateIdx,
|
2021-02-20 14:35:23 +00:00
|
|
|
});
|
2021-02-17 16:21:27 +00:00
|
|
|
}
|
2020-12-21 16:56:06 +00:00
|
|
|
|
2021-02-17 16:21:27 +00:00
|
|
|
case "LEFT":
|
2021-02-19 17:57:02 +00:00
|
|
|
return changeMediaSide({
|
|
|
|
activeMediaComponent: lastActiveMediaComponents.left,
|
|
|
|
lastActiveMediaComponents: {
|
|
|
|
...lastActiveMediaComponents,
|
|
|
|
right: activeMediaComponent as
|
|
|
|
| "fstWord"
|
|
|
|
| "sndWord"
|
|
|
|
| "thirdWord",
|
|
|
|
},
|
|
|
|
currentMediaSide: "left",
|
|
|
|
});
|
2021-02-17 16:21:27 +00:00
|
|
|
|
|
|
|
case "CIRCLE":
|
2021-02-02 16:31:50 +00:00
|
|
|
const data = findNodeFromWord(
|
|
|
|
activeMediaComponent,
|
|
|
|
activeNode,
|
2021-02-07 15:12:19 +00:00
|
|
|
activeSite,
|
|
|
|
gameProgress
|
2021-02-02 16:31:50 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
if (data) {
|
2021-02-20 14:35:23 +00:00
|
|
|
const { node, level, siteRotY } = { ...data };
|
|
|
|
return selectWord({
|
|
|
|
activeNode: node,
|
|
|
|
activeLevel: level,
|
|
|
|
siteRot: [0, siteRotY, 0],
|
|
|
|
});
|
2021-02-02 16:31:50 +00:00
|
|
|
} else {
|
2021-02-20 14:35:23 +00:00
|
|
|
return wordNotFound;
|
2021-02-02 16:31:50 +00:00
|
|
|
}
|
|
|
|
}
|
2020-11-25 15:14:23 +00:00
|
|
|
}
|
2020-11-01 15:40:46 +00:00
|
|
|
};
|
|
|
|
|
2021-02-08 17:53:28 +00:00
|
|
|
export default handleMediaSceneKeyPress;
|