mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
empty territory node selection handling
This commit is contained in:
parent
2b911fd6c4
commit
82436249d1
6 changed files with 61 additions and 24 deletions
|
@ -57,6 +57,7 @@ const EventManager = () => {
|
||||||
const currentScene = useSceneStore((state) => state.currentScene);
|
const currentScene = useSceneStore((state) => state.currentScene);
|
||||||
|
|
||||||
// main scene
|
// main scene
|
||||||
|
const activeNodeId = useNodeStore((state) => state.activeNodeState.id);
|
||||||
const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices);
|
const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices);
|
||||||
const siteTransformState = useSiteStore((state) => state.transformState);
|
const siteTransformState = useSiteStore((state) => state.transformState);
|
||||||
const activeLevel = useLevelStore((state) => state.activeLevel);
|
const activeLevel = useLevelStore((state) => state.activeLevel);
|
||||||
|
@ -146,6 +147,7 @@ const EventManager = () => {
|
||||||
mainSubscene: mainSubscene,
|
mainSubscene: mainSubscene,
|
||||||
keyPress: keyPress,
|
keyPress: keyPress,
|
||||||
siteTransformState: siteTransformState,
|
siteTransformState: siteTransformState,
|
||||||
|
activeNodeId: activeNodeId,
|
||||||
nodeMatrixIndices: nodeMatrixIndices,
|
nodeMatrixIndices: nodeMatrixIndices,
|
||||||
activeLevel: activeLevel,
|
activeLevel: activeLevel,
|
||||||
selectedLevel: selectedLevel,
|
selectedLevel: selectedLevel,
|
||||||
|
|
|
@ -20,8 +20,10 @@ const GreenTextManager = (props: StateManagerProps) => {
|
||||||
delay: number,
|
delay: number,
|
||||||
shouldToggleAtStart: boolean
|
shouldToggleAtStart: boolean
|
||||||
) => {
|
) => {
|
||||||
const targetGreenText = (site_a as SiteType)[newLevel][newActiveNodeId]
|
const targetGreenText =
|
||||||
.title;
|
newActiveNodeId === "UNKNOWN"
|
||||||
|
? ""
|
||||||
|
: (site_a as SiteType)[newLevel][newActiveNodeId].title;
|
||||||
|
|
||||||
const targetGreenTextPosData =
|
const targetGreenTextPosData =
|
||||||
node_huds[newActiveHudId as keyof typeof node_huds].medium_text;
|
node_huds[newActiveHudId as keyof typeof node_huds].medium_text;
|
||||||
|
|
|
@ -52,7 +52,12 @@ const YellowTextManager = (props: StateManagerProps) => {
|
||||||
"posY"
|
"posY"
|
||||||
);
|
);
|
||||||
// set new text according to the node name
|
// set new text according to the node name
|
||||||
setText((site_a as SiteType)[newLevel][newActiveNodeId].node_name);
|
const targetText =
|
||||||
|
newActiveNodeId === "UNKNOWN"
|
||||||
|
? "Unknown"
|
||||||
|
: (site_a as SiteType)[newLevel][newActiveNodeId].node_name;
|
||||||
|
|
||||||
|
setText(targetText);
|
||||||
setDisableTrail(false);
|
setDisableTrail(false);
|
||||||
}, 3000);
|
}, 3000);
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
const pauseMatrixIdx = gameContext.pauseMatrixIdx;
|
const pauseMatrixIdx = gameContext.pauseMatrixIdx;
|
||||||
const activePauseComponent = gameContext.activePauseComponent;
|
const activePauseComponent = gameContext.activePauseComponent;
|
||||||
const unlockedNodes = gameContext.unlockedNodes;
|
const unlockedNodes = gameContext.unlockedNodes;
|
||||||
|
const activeNodeId = gameContext.activeNodeId;
|
||||||
|
|
||||||
let nodeMatrixIndices = gameContext.nodeMatrixIndices;
|
let nodeMatrixIndices = gameContext.nodeMatrixIndices;
|
||||||
|
|
||||||
|
@ -34,6 +35,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
case "UP":
|
case "UP":
|
||||||
selectedNodeData = nodeSelector({
|
selectedNodeData = nodeSelector({
|
||||||
action: `site_${keyPress.toLowerCase()}`,
|
action: `site_${keyPress.toLowerCase()}`,
|
||||||
|
activeId: activeNodeId,
|
||||||
nodeMatrixIndices: nodeMatrixIndices,
|
nodeMatrixIndices: nodeMatrixIndices,
|
||||||
level: level,
|
level: level,
|
||||||
siteRotY: siteRotY,
|
siteRotY: siteRotY,
|
||||||
|
@ -49,6 +51,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
newSitePosY = selectedNodeData.newSitePosY;
|
newSitePosY = selectedNodeData.newSitePosY;
|
||||||
newLevel = selectedNodeData.newLevel;
|
newLevel = selectedNodeData.newLevel;
|
||||||
newActiveHudId = selectedNodeData.newActiveHudId;
|
newActiveHudId = selectedNodeData.newActiveHudId;
|
||||||
|
console.log(selectedNodeData.newActiveNodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -97,7 +100,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
} else if (subscene === "level_selection") {
|
} else if (subscene === "level_selection") {
|
||||||
switch (keyPress) {
|
switch (keyPress) {
|
||||||
case "UP":
|
case "UP":
|
||||||
if (selectedLevel + 1 <= 21)
|
if (selectedLevel + 1 <= 22)
|
||||||
return {
|
return {
|
||||||
event: `level_selection_up`,
|
event: `level_selection_up`,
|
||||||
newSelectedLevelIdx: selectedLevel + 1,
|
newSelectedLevelIdx: selectedLevel + 1,
|
||||||
|
@ -120,6 +123,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
case "CIRCLE":
|
case "CIRCLE":
|
||||||
const selectedNodeData = nodeSelector({
|
const selectedNodeData = nodeSelector({
|
||||||
action: "select_level",
|
action: "select_level",
|
||||||
|
activeId: activeNodeId,
|
||||||
nodeMatrixIndices: nodeMatrixIndices,
|
nodeMatrixIndices: nodeMatrixIndices,
|
||||||
level: selectedLevel,
|
level: selectedLevel,
|
||||||
siteRotY: siteRotY,
|
siteRotY: siteRotY,
|
||||||
|
|
|
@ -6,6 +6,7 @@ import level_y_values from "../resources/level_y_values.json";
|
||||||
|
|
||||||
type NodeSelectorContext = {
|
type NodeSelectorContext = {
|
||||||
action: string;
|
action: string;
|
||||||
|
activeId: string;
|
||||||
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number };
|
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number };
|
||||||
level: number;
|
level: number;
|
||||||
siteRotY: number;
|
siteRotY: number;
|
||||||
|
@ -135,7 +136,7 @@ const findNodeVertical = (
|
||||||
) => {
|
) => {
|
||||||
let newNodeId;
|
let newNodeId;
|
||||||
let newLevel = level;
|
let newLevel = level;
|
||||||
let newMatIndices = nodeMatrixIndices;
|
let newMatIndices = Object.assign({}, nodeMatrixIndices);
|
||||||
|
|
||||||
if (direction === "down") {
|
if (direction === "down") {
|
||||||
newMatIndices.rowIdx++;
|
newMatIndices.rowIdx++;
|
||||||
|
@ -158,6 +159,11 @@ const findNodeVertical = (
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (newMatIndices.rowIdx === 2) {
|
if (newMatIndices.rowIdx === 2) {
|
||||||
|
if (newLevel === level - 1) {
|
||||||
|
newNodeId = "UNKNOWN";
|
||||||
|
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
newMatIndices.rowIdx = 0;
|
newMatIndices.rowIdx = 0;
|
||||||
newLevel = level - 1;
|
newLevel = level - 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -189,6 +195,11 @@ const findNodeVertical = (
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (newMatIndices.rowIdx === 0) {
|
if (newMatIndices.rowIdx === 0) {
|
||||||
|
if (newLevel === level + 1) {
|
||||||
|
newNodeId = "UNKNOWN";
|
||||||
|
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
newMatIndices.rowIdx = 2;
|
newMatIndices.rowIdx = 2;
|
||||||
newLevel = level + 1;
|
newLevel = level + 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -213,14 +224,15 @@ const findNodeHorizontal = (
|
||||||
direction: string,
|
direction: string,
|
||||||
unlockedNodes: typeof unlocked_nodes,
|
unlockedNodes: typeof unlocked_nodes,
|
||||||
level: number,
|
level: number,
|
||||||
|
activeId: string,
|
||||||
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number }
|
nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number }
|
||||||
) => {
|
) => {
|
||||||
let newNodeId;
|
let newNodeId;
|
||||||
let newMatIndices = nodeMatrixIndices;
|
let newMatIndices = Object.assign({}, nodeMatrixIndices);
|
||||||
|
|
||||||
if (direction === "left") {
|
|
||||||
let didMove = false;
|
let didMove = false;
|
||||||
|
|
||||||
|
if (direction === "left") {
|
||||||
newMatIndices.colIdx--;
|
newMatIndices.colIdx--;
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
let triedRows: number[] = [];
|
||||||
|
@ -244,9 +256,17 @@ const findNodeHorizontal = (
|
||||||
} else {
|
} else {
|
||||||
if (newMatIndices.colIdx < 0) {
|
if (newMatIndices.colIdx < 0) {
|
||||||
didMove = true;
|
didMove = true;
|
||||||
|
if (activeId === "UNKNOWN") {
|
||||||
|
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
|
||||||
|
newMatIndices.matrixIdx =
|
||||||
|
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1;
|
||||||
|
newNodeId = "UNKNOWN";
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
newMatIndices.colIdx = 0;
|
newMatIndices.colIdx = 0;
|
||||||
newMatIndices.matrixIdx =
|
newMatIndices.matrixIdx =
|
||||||
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1;
|
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
didMove ? newMatIndices.colIdx++ : newMatIndices.colIdx--;
|
didMove ? newMatIndices.colIdx++ : newMatIndices.colIdx--;
|
||||||
triedRows = [];
|
triedRows = [];
|
||||||
|
@ -256,8 +276,6 @@ const findNodeHorizontal = (
|
||||||
newNodeId = getNodeId(level, newMatIndices);
|
newNodeId = getNodeId(level, newMatIndices);
|
||||||
}
|
}
|
||||||
} else if (direction === "right") {
|
} else if (direction === "right") {
|
||||||
let didMove = false;
|
|
||||||
|
|
||||||
newMatIndices.colIdx++;
|
newMatIndices.colIdx++;
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
let triedRows: number[] = [];
|
||||||
|
@ -280,9 +298,17 @@ const findNodeHorizontal = (
|
||||||
} else {
|
} else {
|
||||||
if (newMatIndices.colIdx > 3) {
|
if (newMatIndices.colIdx > 3) {
|
||||||
didMove = true;
|
didMove = true;
|
||||||
|
if (activeId === "UNKNOWN") {
|
||||||
|
newMatIndices.colIdx = nodeMatrixIndices.colIdx;
|
||||||
|
newMatIndices.matrixIdx =
|
||||||
|
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1;
|
||||||
|
newNodeId = "UNKNOWN";
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
newMatIndices.colIdx = 3;
|
newMatIndices.colIdx = 3;
|
||||||
newMatIndices.matrixIdx =
|
newMatIndices.matrixIdx =
|
||||||
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1;
|
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
didMove ? newMatIndices.colIdx-- : newMatIndices.colIdx++;
|
didMove ? newMatIndices.colIdx-- : newMatIndices.colIdx++;
|
||||||
triedRows = [];
|
triedRows = [];
|
||||||
|
@ -296,6 +322,7 @@ const findNodeHorizontal = (
|
||||||
const newNodeHudId = getNodeHudId(newMatIndices);
|
const newNodeHudId = getNodeHudId(newMatIndices);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
didMove: didMove,
|
||||||
newNodeId: newNodeId,
|
newNodeId: newNodeId,
|
||||||
newNodeHudId: newNodeHudId,
|
newNodeHudId: newNodeHudId,
|
||||||
newNodeMatrixIndices: newMatIndices,
|
newNodeMatrixIndices: newMatIndices,
|
||||||
|
@ -314,22 +341,19 @@ const nodeSelector = (context: NodeSelectorContext) => {
|
||||||
move,
|
move,
|
||||||
context.unlockedNodes,
|
context.unlockedNodes,
|
||||||
context.level,
|
context.level,
|
||||||
Object.assign({}, context.nodeMatrixIndices)
|
context.activeId,
|
||||||
|
context.nodeMatrixIndices
|
||||||
);
|
);
|
||||||
|
|
||||||
if (newNodeData) {
|
if (newNodeData) {
|
||||||
const didMove =
|
|
||||||
context.nodeMatrixIndices.matrixIdx !==
|
|
||||||
newNodeData.newNodeMatrixIndices.matrixIdx;
|
|
||||||
|
|
||||||
const siteRotYModifier = move === "left" ? Math.PI / 4 : -Math.PI / 4;
|
const siteRotYModifier = move === "left" ? Math.PI / 4 : -Math.PI / 4;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
event: didMove ? context.action : "change_node",
|
event: newNodeData.didMove ? context.action : "change_node",
|
||||||
newActiveNodeId: newNodeData.newNodeId,
|
newActiveNodeId: newNodeData.newNodeId,
|
||||||
newActiveHudId: newNodeData.newNodeHudId,
|
newActiveHudId: newNodeData.newNodeHudId,
|
||||||
newNodeMatrixIndices: newNodeData.newNodeMatrixIndices,
|
newNodeMatrixIndices: newNodeData.newNodeMatrixIndices,
|
||||||
newSiteRotY: didMove
|
newSiteRotY: newNodeData.didMove
|
||||||
? context.siteRotY + siteRotYModifier
|
? context.siteRotY + siteRotYModifier
|
||||||
: context.siteRotY,
|
: context.siteRotY,
|
||||||
newSitePosY: context.sitePosY,
|
newSitePosY: context.sitePosY,
|
||||||
|
|
|
@ -105,6 +105,6 @@
|
||||||
|
|
||||||
"?": {
|
"?": {
|
||||||
"position": [-0.15, 0.3, -1.3],
|
"position": [-0.15, 0.3, -1.3],
|
||||||
"rotation": [0, -2.45, 0]
|
"rotation": [0, -0.45, 0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue