diff --git a/src/components/MainScene/Lain.tsx b/src/components/MainScene/Lain.tsx index 11373ee..0d1eb40 100644 --- a/src/components/MainScene/Lain.tsx +++ b/src/components/MainScene/Lain.tsx @@ -121,6 +121,8 @@ const Lain = () => { move_right: , move_up: , move_down: , + select_level_down: , + select_level_up: , throw_node: , }; diff --git a/src/core/StateManagers/GreenTextManager.tsx b/src/core/StateManagers/GreenTextManager.tsx index 67d3fa0..7350768 100644 --- a/src/core/StateManagers/GreenTextManager.tsx +++ b/src/core/StateManagers/GreenTextManager.tsx @@ -86,9 +86,13 @@ const GreenTextManager = (props: StateManagerProps) => { action: initializeGreenTextForMediaScene, value: [newActiveNodeId, newLevel], }; + case "toggle_level_selection": + return { + action: toggleActive, + }; } }, - [initializeGreenTextForMediaScene, toggleAndSetGreenText] + [initializeGreenTextForMediaScene, toggleActive, toggleAndSetGreenText] ); useEffect(() => { @@ -106,7 +110,10 @@ const GreenTextManager = (props: StateManagerProps) => { ); if (dispatchedObject) { - dispatchedObject.action.apply(null, dispatchedObject.value as any); + (dispatchedObject.action as any).apply( + null, + dispatchedObject.value as any + ); } } }, [props.eventState, dispatchObject]); diff --git a/src/core/StateManagers/LainManager.tsx b/src/core/StateManagers/LainManager.tsx index 58dd6f5..9e0cc18 100644 --- a/src/core/StateManagers/LainManager.tsx +++ b/src/core/StateManagers/LainManager.tsx @@ -12,7 +12,8 @@ const LainManager = (props: StateManagerProps) => { case "move_down": case "move_left": case "move_right": - case "select_level": + case "select_level_up": + case "select_level_down": return { action: setLainMoveState, value: event, diff --git a/src/core/StateManagers/LevelManager.tsx b/src/core/StateManagers/LevelManager.tsx index b0bf464..1de3601 100644 --- a/src/core/StateManagers/LevelManager.tsx +++ b/src/core/StateManagers/LevelManager.tsx @@ -10,10 +10,17 @@ const LevelManager = (props: StateManagerProps) => { switch (event) { case "move_up": case "move_down": - case "select_level": return { action: setActiveLevel, value: newLevel, + delay: 0, + }; + case "select_level_down": + case "select_level_up": + return { + action: setActiveLevel, + value: newLevel, + delay: 1500, }; } }, @@ -27,7 +34,9 @@ const LevelManager = (props: StateManagerProps) => { const dispatchedObject = dispatchObject(eventAction, newLevel); if (dispatchedObject) { - dispatchedObject.action(dispatchedObject.value); + setTimeout(() => { + dispatchedObject.action(dispatchedObject.value); + }, dispatchedObject.delay); } } }, [props.eventState, dispatchObject]); diff --git a/src/core/StateManagers/LevelSelectionManager.tsx b/src/core/StateManagers/LevelSelectionManager.tsx index f9c69d0..ffe058f 100644 --- a/src/core/StateManagers/LevelSelectionManager.tsx +++ b/src/core/StateManagers/LevelSelectionManager.tsx @@ -24,6 +24,11 @@ const LevelSelectionManager = (props: StateManagerProps) => { action: setSelectedLevelIdx, value: newSelectedLevelIdx, }; + case "select_level_up": + case "select_level_down": + return { + action: toggleLevelSelection, + }; } }, [setSelectedLevelIdx, toggleLevelSelection] diff --git a/src/core/StateManagers/MiddleRingManager.tsx b/src/core/StateManagers/MiddleRingManager.tsx index 0695e96..d0584af 100644 --- a/src/core/StateManagers/MiddleRingManager.tsx +++ b/src/core/StateManagers/MiddleRingManager.tsx @@ -143,7 +143,9 @@ const MiddleRingManager = (props: any) => { (event: string) => { switch (event) { case "move_up": + case "select_level_up": return { action: moveUp }; + case "select_level_down": case "move_down": return { action: moveDown }; case "move_left": diff --git a/src/core/StateManagers/NodeHUDManager.tsx b/src/core/StateManagers/NodeHUDManager.tsx index d06cbe4..fb612b0 100644 --- a/src/core/StateManagers/NodeHUDManager.tsx +++ b/src/core/StateManagers/NodeHUDManager.tsx @@ -6,6 +6,40 @@ const NodeHUDManager = (props: StateManagerProps) => { const setId = useHudStore((state) => state.setId); const toggleActive = useHudStore((state) => state.toggleActive); + const moveAndChangeNode = useCallback( + (targetNodeHudId: string) => { + toggleActive(); + + setTimeout(() => { + setId(targetNodeHudId); + toggleActive(); + }, 3900); + }, + [setId, toggleActive] + ); + + const changeNode = useCallback( + (targetNodeHudId: string) => { + toggleActive(); + + setTimeout(() => { + setId(targetNodeHudId); + toggleActive(); + }, 500); + }, + [setId, toggleActive] + ); + + const selectLevelAnimation = useCallback( + (targetNodeHudId: string) => { + setTimeout(() => { + setId(targetNodeHudId); + toggleActive(); + }, 3900); + }, + [setId, toggleActive] + ); + const dispatchObject = useCallback( (event: string, targetNodeHudId: string) => { switch (event) { @@ -14,19 +48,27 @@ const NodeHUDManager = (props: StateManagerProps) => { case "move_left": case "move_right": return { - action: setId, - value: targetNodeHudId, - actionDelay: 3903.704, + action: moveAndChangeNode, + value: [targetNodeHudId], }; case "change_node": return { - action: setId, - value: targetNodeHudId, - actionDelay: 500, + action: changeNode, + value: [targetNodeHudId], + }; + case "toggle_level_selection": + return { + action: toggleActive, + }; + case "select_level_up": + case "select_level_down": + return { + action: selectLevelAnimation, + value: [targetNodeHudId], }; } }, - [setId] + [changeNode, moveAndChangeNode, selectLevelAnimation, toggleActive] ); useEffect(() => { @@ -37,12 +79,7 @@ const NodeHUDManager = (props: StateManagerProps) => { const dispatchedObject = dispatchObject(eventAction, newActiveHudId); if (dispatchedObject) { - toggleActive(); - - setTimeout(() => { - dispatchedObject.action(dispatchedObject.value); - toggleActive(); - }, dispatchedObject.actionDelay); + (dispatchedObject.action as any).apply(null, dispatchedObject.value); } } }, [props.eventState, toggleActive, dispatchObject]); diff --git a/src/core/StateManagers/NodeManager.tsx b/src/core/StateManagers/NodeManager.tsx index 089ff99..4a76c7c 100644 --- a/src/core/StateManagers/NodeManager.tsx +++ b/src/core/StateManagers/NodeManager.tsx @@ -8,31 +8,31 @@ const NodeManager = (props: StateManagerProps) => { (state) => state.setNodeMatrixIndices ); - // const animateActiveNodeThrow = useCallback(() => { - // setIsActiveNodeInteractedWith(true); - // - // setActiveNodePosZ(0.3); - // setActiveNodePosX(0.9); - // - // setTimeout(() => { - // setActiveNodePosZ(0.2); - // setActiveNodePosX(0.5); - // }, 800); - // setTimeout(() => { - // setActiveNodePosX(1.55); - // setActiveNodeRotZ(-0.005); - // }, 2600); - // setTimeout(() => { - // setActiveNodePosZ(2); - // setActiveNodePosX(0); - // setActiveNodeRotZ(-0.5); - // }, 2700); - // - // setTimeout(() => { - // setActiveNodeRotZ(0); - // setIsActiveNodeInteractedWith(false); - // }, 3800); - // }, []); + const animateActiveNodeThrow = useCallback(() => { + setActiveNodeState(true, "interactedWith"); + + setActiveNodeState(0.3, "posZ"); + setActiveNodeState(0.9, "posX"); + + setTimeout(() => { + setActiveNodeState(0.2, "posZ"); + setActiveNodeState(0.5, "posX"); + }, 800); + setTimeout(() => { + setActiveNodeState(1.55, "posX"); + setActiveNodeState(-0.005, "rotZ"); + }, 2600); + setTimeout(() => { + setActiveNodeState(2, "posZ"); + setActiveNodeState(0, "posX"); + setActiveNodeState(-0.5, "rotZ"); + }, 2700); + + setTimeout(() => { + setActiveNodeState(0, "rotZ"); + setActiveNodeState(false, "interactedWith"); + }, 3800); + }, [setActiveNodeState]); const updateActiveNode = useCallback( ( @@ -71,7 +71,7 @@ const NodeManager = (props: StateManagerProps) => { return { action: updateActiveNode, value: [ - 3903.704, + 3900, true, newActiveNodeId, newNodeColIdx, @@ -91,16 +91,16 @@ const NodeManager = (props: StateManagerProps) => { newNodeMatIdx, ], }; - // case "throw_node_media": - // case "throw_node_gate": - // case "throw_node_sskn": - // return { - // action: animateActiveNodeThrow, - // value: [0, true], - // }; + case "throw_node_media": + case "throw_node_gate": + case "throw_node_sskn": + return { + action: animateActiveNodeThrow, + value: [0, true], + }; } }, - [updateActiveNode] + [animateActiveNodeThrow, updateActiveNode] ); useEffect(() => { diff --git a/src/core/StateManagers/SiteManager.tsx b/src/core/StateManagers/SiteManager.tsx index 3ea5b2a..275a3e6 100644 --- a/src/core/StateManagers/SiteManager.tsx +++ b/src/core/StateManagers/SiteManager.tsx @@ -10,7 +10,8 @@ const SiteManager = (props: StateManagerProps) => { switch (event) { case "move_up": case "move_down": - case "select_level": + case "select_level_up": + case "select_level_down": return { action: setTransformState, value: [newSitePosY, "posY"], diff --git a/src/core/StateManagers/SubsceneManager.tsx b/src/core/StateManagers/SubsceneManager.tsx index 805ac35..2c3b0d9 100644 --- a/src/core/StateManagers/SubsceneManager.tsx +++ b/src/core/StateManagers/SubsceneManager.tsx @@ -10,6 +10,8 @@ const SubsceneManager = (props: StateManagerProps) => { (event: string) => { switch (event) { case "level_selection_back": + case "select_level_up": + case "select_level_down": return { action: setMainSubscene, value: "site", diff --git a/src/core/StateManagers/YellowTextManager.tsx b/src/core/StateManagers/YellowTextManager.tsx index 8083e94..aef0e85 100644 --- a/src/core/StateManagers/YellowTextManager.tsx +++ b/src/core/StateManagers/YellowTextManager.tsx @@ -145,7 +145,7 @@ const YellowTextManager = (props: StateManagerProps) => { setTimeout(() => { setTransformState(-0.02, "posX"); - setTransformState(0, "posY"); + setTransformState(0.005, "posY"); }, 400); setTimeout(() => { @@ -252,6 +252,8 @@ const YellowTextManager = (props: StateManagerProps) => { value: [newActiveNodeId, newActiveHudId, newLevel], }; case "level_selection_back": + case "select_level_up": + case "select_level_down": return { action: levelSelectionBack, value: [newActiveNodeId, newActiveHudId, newLevel], @@ -269,6 +271,7 @@ const YellowTextManager = (props: StateManagerProps) => { initializeLevelSelection, initializeYellowTextForMainScene, initializeYellowTextForMediaScene, + levelSelectionBack, ] ); diff --git a/src/core/mainSceneEventHandler.ts b/src/core/mainSceneEventHandler.ts index e36e527..41efeb3 100644 --- a/src/core/mainSceneEventHandler.ts +++ b/src/core/mainSceneEventHandler.ts @@ -174,12 +174,27 @@ const handleMainSceneEvent = (gameContext: any) => { newLevel: newLevel, }; case "select": + const oldLevel = newLevel; newLevel = (levelSelectionIdx + 1).toString().padStart(2, "0"); - return { - event: "select_level", - newLevel: newLevel, - newSitePosY: level_y_values[newLevel as keyof typeof level_y_values], - }; + if (oldLevel === newLevel) break; + else if (newLevel < oldLevel) { + return { + event: "select_level_down", + newLevel: newLevel, + newSitePosY: + level_y_values[newLevel as keyof typeof level_y_values], + }; + } else { + return { + event: "select_level_up", + newLevel: newLevel, + newSitePosY: -level_y_values[ + newLevel as keyof typeof level_y_values + ], + newActiveNodeId: "2022", + newActiveHudId: "fg_hud_1", + }; + } } } };