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_right: <LainMoveRight />,
|
||||||
move_up: <LainMoveUp />,
|
move_up: <LainMoveUp />,
|
||||||
move_down: <LainMoveDown />,
|
move_down: <LainMoveDown />,
|
||||||
|
select_level_down: <LainMoveDown />,
|
||||||
|
select_level_up: <LainMoveUp />,
|
||||||
throw_node: <LainThrowNode />,
|
throw_node: <LainThrowNode />,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -86,9 +86,13 @@ const GreenTextManager = (props: StateManagerProps) => {
|
||||||
action: initializeGreenTextForMediaScene,
|
action: initializeGreenTextForMediaScene,
|
||||||
value: [newActiveNodeId, newLevel],
|
value: [newActiveNodeId, newLevel],
|
||||||
};
|
};
|
||||||
|
case "toggle_level_selection":
|
||||||
|
return {
|
||||||
|
action: toggleActive,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[initializeGreenTextForMediaScene, toggleAndSetGreenText]
|
[initializeGreenTextForMediaScene, toggleActive, toggleAndSetGreenText]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
@ -106,7 +110,10 @@ const GreenTextManager = (props: StateManagerProps) => {
|
||||||
);
|
);
|
||||||
|
|
||||||
if (dispatchedObject) {
|
if (dispatchedObject) {
|
||||||
dispatchedObject.action.apply(null, dispatchedObject.value as any);
|
(dispatchedObject.action as any).apply(
|
||||||
|
null,
|
||||||
|
dispatchedObject.value as any
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [props.eventState, dispatchObject]);
|
}, [props.eventState, dispatchObject]);
|
||||||
|
|
|
@ -12,7 +12,8 @@ const LainManager = (props: StateManagerProps) => {
|
||||||
case "move_down":
|
case "move_down":
|
||||||
case "move_left":
|
case "move_left":
|
||||||
case "move_right":
|
case "move_right":
|
||||||
case "select_level":
|
case "select_level_up":
|
||||||
|
case "select_level_down":
|
||||||
return {
|
return {
|
||||||
action: setLainMoveState,
|
action: setLainMoveState,
|
||||||
value: event,
|
value: event,
|
||||||
|
|
|
@ -10,10 +10,17 @@ const LevelManager = (props: StateManagerProps) => {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "move_up":
|
case "move_up":
|
||||||
case "move_down":
|
case "move_down":
|
||||||
case "select_level":
|
|
||||||
return {
|
return {
|
||||||
action: setActiveLevel,
|
action: setActiveLevel,
|
||||||
value: newLevel,
|
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);
|
const dispatchedObject = dispatchObject(eventAction, newLevel);
|
||||||
|
|
||||||
if (dispatchedObject) {
|
if (dispatchedObject) {
|
||||||
|
setTimeout(() => {
|
||||||
dispatchedObject.action(dispatchedObject.value);
|
dispatchedObject.action(dispatchedObject.value);
|
||||||
|
}, dispatchedObject.delay);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [props.eventState, dispatchObject]);
|
}, [props.eventState, dispatchObject]);
|
||||||
|
|
|
@ -24,6 +24,11 @@ const LevelSelectionManager = (props: StateManagerProps) => {
|
||||||
action: setSelectedLevelIdx,
|
action: setSelectedLevelIdx,
|
||||||
value: newSelectedLevelIdx,
|
value: newSelectedLevelIdx,
|
||||||
};
|
};
|
||||||
|
case "select_level_up":
|
||||||
|
case "select_level_down":
|
||||||
|
return {
|
||||||
|
action: toggleLevelSelection,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[setSelectedLevelIdx, toggleLevelSelection]
|
[setSelectedLevelIdx, toggleLevelSelection]
|
||||||
|
|
|
@ -143,7 +143,9 @@ const MiddleRingManager = (props: any) => {
|
||||||
(event: string) => {
|
(event: string) => {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "move_up":
|
case "move_up":
|
||||||
|
case "select_level_up":
|
||||||
return { action: moveUp };
|
return { action: moveUp };
|
||||||
|
case "select_level_down":
|
||||||
case "move_down":
|
case "move_down":
|
||||||
return { action: moveDown };
|
return { action: moveDown };
|
||||||
case "move_left":
|
case "move_left":
|
||||||
|
|
|
@ -6,6 +6,40 @@ const NodeHUDManager = (props: StateManagerProps) => {
|
||||||
const setId = useHudStore((state) => state.setId);
|
const setId = useHudStore((state) => state.setId);
|
||||||
const toggleActive = useHudStore((state) => state.toggleActive);
|
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(
|
const dispatchObject = useCallback(
|
||||||
(event: string, targetNodeHudId: string) => {
|
(event: string, targetNodeHudId: string) => {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
|
@ -14,19 +48,27 @@ const NodeHUDManager = (props: StateManagerProps) => {
|
||||||
case "move_left":
|
case "move_left":
|
||||||
case "move_right":
|
case "move_right":
|
||||||
return {
|
return {
|
||||||
action: setId,
|
action: moveAndChangeNode,
|
||||||
value: targetNodeHudId,
|
value: [targetNodeHudId],
|
||||||
actionDelay: 3903.704,
|
|
||||||
};
|
};
|
||||||
case "change_node":
|
case "change_node":
|
||||||
return {
|
return {
|
||||||
action: setId,
|
action: changeNode,
|
||||||
value: targetNodeHudId,
|
value: [targetNodeHudId],
|
||||||
actionDelay: 500,
|
};
|
||||||
|
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(() => {
|
useEffect(() => {
|
||||||
|
@ -37,12 +79,7 @@ const NodeHUDManager = (props: StateManagerProps) => {
|
||||||
const dispatchedObject = dispatchObject(eventAction, newActiveHudId);
|
const dispatchedObject = dispatchObject(eventAction, newActiveHudId);
|
||||||
|
|
||||||
if (dispatchedObject) {
|
if (dispatchedObject) {
|
||||||
toggleActive();
|
(dispatchedObject.action as any).apply(null, dispatchedObject.value);
|
||||||
|
|
||||||
setTimeout(() => {
|
|
||||||
dispatchedObject.action(dispatchedObject.value);
|
|
||||||
toggleActive();
|
|
||||||
}, dispatchedObject.actionDelay);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, [props.eventState, toggleActive, dispatchObject]);
|
}, [props.eventState, toggleActive, dispatchObject]);
|
||||||
|
|
|
@ -8,31 +8,31 @@ const NodeManager = (props: StateManagerProps) => {
|
||||||
(state) => state.setNodeMatrixIndices
|
(state) => state.setNodeMatrixIndices
|
||||||
);
|
);
|
||||||
|
|
||||||
// const animateActiveNodeThrow = useCallback(() => {
|
const animateActiveNodeThrow = useCallback(() => {
|
||||||
// setIsActiveNodeInteractedWith(true);
|
setActiveNodeState(true, "interactedWith");
|
||||||
//
|
|
||||||
// setActiveNodePosZ(0.3);
|
setActiveNodeState(0.3, "posZ");
|
||||||
// setActiveNodePosX(0.9);
|
setActiveNodeState(0.9, "posX");
|
||||||
//
|
|
||||||
// setTimeout(() => {
|
setTimeout(() => {
|
||||||
// setActiveNodePosZ(0.2);
|
setActiveNodeState(0.2, "posZ");
|
||||||
// setActiveNodePosX(0.5);
|
setActiveNodeState(0.5, "posX");
|
||||||
// }, 800);
|
}, 800);
|
||||||
// setTimeout(() => {
|
setTimeout(() => {
|
||||||
// setActiveNodePosX(1.55);
|
setActiveNodeState(1.55, "posX");
|
||||||
// setActiveNodeRotZ(-0.005);
|
setActiveNodeState(-0.005, "rotZ");
|
||||||
// }, 2600);
|
}, 2600);
|
||||||
// setTimeout(() => {
|
setTimeout(() => {
|
||||||
// setActiveNodePosZ(2);
|
setActiveNodeState(2, "posZ");
|
||||||
// setActiveNodePosX(0);
|
setActiveNodeState(0, "posX");
|
||||||
// setActiveNodeRotZ(-0.5);
|
setActiveNodeState(-0.5, "rotZ");
|
||||||
// }, 2700);
|
}, 2700);
|
||||||
//
|
|
||||||
// setTimeout(() => {
|
setTimeout(() => {
|
||||||
// setActiveNodeRotZ(0);
|
setActiveNodeState(0, "rotZ");
|
||||||
// setIsActiveNodeInteractedWith(false);
|
setActiveNodeState(false, "interactedWith");
|
||||||
// }, 3800);
|
}, 3800);
|
||||||
// }, []);
|
}, [setActiveNodeState]);
|
||||||
|
|
||||||
const updateActiveNode = useCallback(
|
const updateActiveNode = useCallback(
|
||||||
(
|
(
|
||||||
|
@ -71,7 +71,7 @@ const NodeManager = (props: StateManagerProps) => {
|
||||||
return {
|
return {
|
||||||
action: updateActiveNode,
|
action: updateActiveNode,
|
||||||
value: [
|
value: [
|
||||||
3903.704,
|
3900,
|
||||||
true,
|
true,
|
||||||
newActiveNodeId,
|
newActiveNodeId,
|
||||||
newNodeColIdx,
|
newNodeColIdx,
|
||||||
|
@ -91,16 +91,16 @@ const NodeManager = (props: StateManagerProps) => {
|
||||||
newNodeMatIdx,
|
newNodeMatIdx,
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
// case "throw_node_media":
|
case "throw_node_media":
|
||||||
// case "throw_node_gate":
|
case "throw_node_gate":
|
||||||
// case "throw_node_sskn":
|
case "throw_node_sskn":
|
||||||
// return {
|
return {
|
||||||
// action: animateActiveNodeThrow,
|
action: animateActiveNodeThrow,
|
||||||
// value: [0, true],
|
value: [0, true],
|
||||||
// };
|
};
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[updateActiveNode]
|
[animateActiveNodeThrow, updateActiveNode]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|
|
@ -10,7 +10,8 @@ const SiteManager = (props: StateManagerProps) => {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "move_up":
|
case "move_up":
|
||||||
case "move_down":
|
case "move_down":
|
||||||
case "select_level":
|
case "select_level_up":
|
||||||
|
case "select_level_down":
|
||||||
return {
|
return {
|
||||||
action: setTransformState,
|
action: setTransformState,
|
||||||
value: [newSitePosY, "posY"],
|
value: [newSitePosY, "posY"],
|
||||||
|
|
|
@ -10,6 +10,8 @@ const SubsceneManager = (props: StateManagerProps) => {
|
||||||
(event: string) => {
|
(event: string) => {
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case "level_selection_back":
|
case "level_selection_back":
|
||||||
|
case "select_level_up":
|
||||||
|
case "select_level_down":
|
||||||
return {
|
return {
|
||||||
action: setMainSubscene,
|
action: setMainSubscene,
|
||||||
value: "site",
|
value: "site",
|
||||||
|
|
|
@ -145,7 +145,7 @@ const YellowTextManager = (props: StateManagerProps) => {
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setTransformState(-0.02, "posX");
|
setTransformState(-0.02, "posX");
|
||||||
setTransformState(0, "posY");
|
setTransformState(0.005, "posY");
|
||||||
}, 400);
|
}, 400);
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
@ -252,6 +252,8 @@ const YellowTextManager = (props: StateManagerProps) => {
|
||||||
value: [newActiveNodeId, newActiveHudId, newLevel],
|
value: [newActiveNodeId, newActiveHudId, newLevel],
|
||||||
};
|
};
|
||||||
case "level_selection_back":
|
case "level_selection_back":
|
||||||
|
case "select_level_up":
|
||||||
|
case "select_level_down":
|
||||||
return {
|
return {
|
||||||
action: levelSelectionBack,
|
action: levelSelectionBack,
|
||||||
value: [newActiveNodeId, newActiveHudId, newLevel],
|
value: [newActiveNodeId, newActiveHudId, newLevel],
|
||||||
|
@ -269,6 +271,7 @@ const YellowTextManager = (props: StateManagerProps) => {
|
||||||
initializeLevelSelection,
|
initializeLevelSelection,
|
||||||
initializeYellowTextForMainScene,
|
initializeYellowTextForMainScene,
|
||||||
initializeYellowTextForMediaScene,
|
initializeYellowTextForMediaScene,
|
||||||
|
levelSelectionBack,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -174,12 +174,27 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
newLevel: newLevel,
|
newLevel: newLevel,
|
||||||
};
|
};
|
||||||
case "select":
|
case "select":
|
||||||
|
const oldLevel = newLevel;
|
||||||
newLevel = (levelSelectionIdx + 1).toString().padStart(2, "0");
|
newLevel = (levelSelectionIdx + 1).toString().padStart(2, "0");
|
||||||
|
if (oldLevel === newLevel) break;
|
||||||
|
else if (newLevel < oldLevel) {
|
||||||
return {
|
return {
|
||||||
event: "select_level",
|
event: "select_level_down",
|
||||||
newLevel: newLevel,
|
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