mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
level selection somewhat interactive, still buggy
This commit is contained in:
parent
92bc26bc0b
commit
fbefc0eb3a
12 changed files with 143 additions and 59 deletions
|
@ -121,6 +121,8 @@ const Lain = () => {
|
|||
move_right: <LainMoveRight />,
|
||||
move_up: <LainMoveUp />,
|
||||
move_down: <LainMoveDown />,
|
||||
select_level_down: <LainMoveDown />,
|
||||
select_level_up: <LainMoveUp />,
|
||||
throw_node: <LainThrowNode />,
|
||||
};
|
||||
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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) {
|
||||
setTimeout(() => {
|
||||
dispatchedObject.action(dispatchedObject.value);
|
||||
}, dispatchedObject.delay);
|
||||
}
|
||||
}
|
||||
}, [props.eventState, dispatchObject]);
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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":
|
||||
|
|
|
@ -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]);
|
||||
|
|
|
@ -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(() => {
|
||||
|
|
|
@ -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"],
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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,
|
||||
]
|
||||
);
|
||||
|
||||
|
|
|
@ -174,12 +174,27 @@ const handleMainSceneEvent = (gameContext: any) => {
|
|||
newLevel: newLevel,
|
||||
};
|
||||
case "select":
|
||||
const oldLevel = newLevel;
|
||||
newLevel = (levelSelectionIdx + 1).toString().padStart(2, "0");
|
||||
if (oldLevel === newLevel) break;
|
||||
else if (newLevel < oldLevel) {
|
||||
return {
|
||||
event: "select_level",
|
||||
event: "select_level_down",
|
||||
newLevel: newLevel,
|
||||
newSitePosY: level_y_values[newLevel as keyof typeof level_y_values],
|
||||
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",
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue