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",
+ };
+ }
}
}
};