From 82436249d1c5842af9515d22e33f4718790b7b15 Mon Sep 17 00:00:00 2001 From: ad044 Date: Tue, 15 Dec 2020 21:24:51 +0400 Subject: [PATCH] empty territory node selection handling --- src/core/StateManagers/EventManager.tsx | 2 + src/core/StateManagers/GreenTextManager.tsx | 6 +- src/core/StateManagers/YellowTextManager.tsx | 7 ++- src/core/mainSceneEventHandler.ts | 6 +- src/core/nodeSelector.ts | 62 ++++++++++++++------ src/resources/node_positions.json | 2 +- 6 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/core/StateManagers/EventManager.tsx b/src/core/StateManagers/EventManager.tsx index 58e4bd3..6175a90 100644 --- a/src/core/StateManagers/EventManager.tsx +++ b/src/core/StateManagers/EventManager.tsx @@ -57,6 +57,7 @@ const EventManager = () => { const currentScene = useSceneStore((state) => state.currentScene); // main scene + const activeNodeId = useNodeStore((state) => state.activeNodeState.id); const nodeMatrixIndices = useNodeStore((state) => state.nodeMatrixIndices); const siteTransformState = useSiteStore((state) => state.transformState); const activeLevel = useLevelStore((state) => state.activeLevel); @@ -146,6 +147,7 @@ const EventManager = () => { mainSubscene: mainSubscene, keyPress: keyPress, siteTransformState: siteTransformState, + activeNodeId: activeNodeId, nodeMatrixIndices: nodeMatrixIndices, activeLevel: activeLevel, selectedLevel: selectedLevel, diff --git a/src/core/StateManagers/GreenTextManager.tsx b/src/core/StateManagers/GreenTextManager.tsx index 2d9ce72..89576c9 100644 --- a/src/core/StateManagers/GreenTextManager.tsx +++ b/src/core/StateManagers/GreenTextManager.tsx @@ -20,8 +20,10 @@ const GreenTextManager = (props: StateManagerProps) => { delay: number, shouldToggleAtStart: boolean ) => { - const targetGreenText = (site_a as SiteType)[newLevel][newActiveNodeId] - .title; + const targetGreenText = + newActiveNodeId === "UNKNOWN" + ? "" + : (site_a as SiteType)[newLevel][newActiveNodeId].title; const targetGreenTextPosData = node_huds[newActiveHudId as keyof typeof node_huds].medium_text; diff --git a/src/core/StateManagers/YellowTextManager.tsx b/src/core/StateManagers/YellowTextManager.tsx index 1cf4b47..b0fde68 100644 --- a/src/core/StateManagers/YellowTextManager.tsx +++ b/src/core/StateManagers/YellowTextManager.tsx @@ -52,7 +52,12 @@ const YellowTextManager = (props: StateManagerProps) => { "posY" ); // 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); }, 3000); diff --git a/src/core/mainSceneEventHandler.ts b/src/core/mainSceneEventHandler.ts index eb6caef..f85de1e 100644 --- a/src/core/mainSceneEventHandler.ts +++ b/src/core/mainSceneEventHandler.ts @@ -11,6 +11,7 @@ const handleMainSceneEvent = (gameContext: any) => { const pauseMatrixIdx = gameContext.pauseMatrixIdx; const activePauseComponent = gameContext.activePauseComponent; const unlockedNodes = gameContext.unlockedNodes; + const activeNodeId = gameContext.activeNodeId; let nodeMatrixIndices = gameContext.nodeMatrixIndices; @@ -34,6 +35,7 @@ const handleMainSceneEvent = (gameContext: any) => { case "UP": selectedNodeData = nodeSelector({ action: `site_${keyPress.toLowerCase()}`, + activeId: activeNodeId, nodeMatrixIndices: nodeMatrixIndices, level: level, siteRotY: siteRotY, @@ -49,6 +51,7 @@ const handleMainSceneEvent = (gameContext: any) => { newSitePosY = selectedNodeData.newSitePosY; newLevel = selectedNodeData.newLevel; newActiveHudId = selectedNodeData.newActiveHudId; + console.log(selectedNodeData.newActiveNodeId); } break; @@ -97,7 +100,7 @@ const handleMainSceneEvent = (gameContext: any) => { } else if (subscene === "level_selection") { switch (keyPress) { case "UP": - if (selectedLevel + 1 <= 21) + if (selectedLevel + 1 <= 22) return { event: `level_selection_up`, newSelectedLevelIdx: selectedLevel + 1, @@ -120,6 +123,7 @@ const handleMainSceneEvent = (gameContext: any) => { case "CIRCLE": const selectedNodeData = nodeSelector({ action: "select_level", + activeId: activeNodeId, nodeMatrixIndices: nodeMatrixIndices, level: selectedLevel, siteRotY: siteRotY, diff --git a/src/core/nodeSelector.ts b/src/core/nodeSelector.ts index dc545c9..10ca751 100644 --- a/src/core/nodeSelector.ts +++ b/src/core/nodeSelector.ts @@ -6,6 +6,7 @@ import level_y_values from "../resources/level_y_values.json"; type NodeSelectorContext = { action: string; + activeId: string; nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number }; level: number; siteRotY: number; @@ -135,7 +136,7 @@ const findNodeVertical = ( ) => { let newNodeId; let newLevel = level; - let newMatIndices = nodeMatrixIndices; + let newMatIndices = Object.assign({}, nodeMatrixIndices); if (direction === "down") { newMatIndices.rowIdx++; @@ -158,6 +159,11 @@ const findNodeVertical = ( } } else { if (newMatIndices.rowIdx === 2) { + if (newLevel === level - 1) { + newNodeId = "UNKNOWN"; + newMatIndices.colIdx = nodeMatrixIndices.colIdx; + break; + } newMatIndices.rowIdx = 0; newLevel = level - 1; } else { @@ -189,6 +195,11 @@ const findNodeVertical = ( } } else { if (newMatIndices.rowIdx === 0) { + if (newLevel === level + 1) { + newNodeId = "UNKNOWN"; + newMatIndices.colIdx = nodeMatrixIndices.colIdx; + break; + } newMatIndices.rowIdx = 2; newLevel = level + 1; } else { @@ -213,14 +224,15 @@ const findNodeHorizontal = ( direction: string, unlockedNodes: typeof unlocked_nodes, level: number, + activeId: string, nodeMatrixIndices: { matrixIdx: number; rowIdx: number; colIdx: number } ) => { let newNodeId; - let newMatIndices = nodeMatrixIndices; + let newMatIndices = Object.assign({}, nodeMatrixIndices); + + let didMove = false; if (direction === "left") { - let didMove = false; - newMatIndices.colIdx--; let triedRows: number[] = []; @@ -244,9 +256,17 @@ const findNodeHorizontal = ( } else { if (newMatIndices.colIdx < 0) { didMove = true; - newMatIndices.colIdx = 0; - newMatIndices.matrixIdx = - newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1; + 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.matrixIdx = + newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1; + } } else { didMove ? newMatIndices.colIdx++ : newMatIndices.colIdx--; triedRows = []; @@ -256,8 +276,6 @@ const findNodeHorizontal = ( newNodeId = getNodeId(level, newMatIndices); } } else if (direction === "right") { - let didMove = false; - newMatIndices.colIdx++; let triedRows: number[] = []; @@ -280,9 +298,17 @@ const findNodeHorizontal = ( } else { if (newMatIndices.colIdx > 3) { didMove = true; - newMatIndices.colIdx = 3; - newMatIndices.matrixIdx = - newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1; + 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.matrixIdx = + newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1; + } } else { didMove ? newMatIndices.colIdx-- : newMatIndices.colIdx++; triedRows = []; @@ -296,6 +322,7 @@ const findNodeHorizontal = ( const newNodeHudId = getNodeHudId(newMatIndices); return { + didMove: didMove, newNodeId: newNodeId, newNodeHudId: newNodeHudId, newNodeMatrixIndices: newMatIndices, @@ -314,22 +341,19 @@ const nodeSelector = (context: NodeSelectorContext) => { move, context.unlockedNodes, context.level, - Object.assign({}, context.nodeMatrixIndices) + context.activeId, + context.nodeMatrixIndices ); if (newNodeData) { - const didMove = - context.nodeMatrixIndices.matrixIdx !== - newNodeData.newNodeMatrixIndices.matrixIdx; - const siteRotYModifier = move === "left" ? Math.PI / 4 : -Math.PI / 4; return { - event: didMove ? context.action : "change_node", + event: newNodeData.didMove ? context.action : "change_node", newActiveNodeId: newNodeData.newNodeId, newActiveHudId: newNodeData.newNodeHudId, newNodeMatrixIndices: newNodeData.newNodeMatrixIndices, - newSiteRotY: didMove + newSiteRotY: newNodeData.didMove ? context.siteRotY + siteRotYModifier : context.siteRotY, newSitePosY: context.sitePosY, diff --git a/src/resources/node_positions.json b/src/resources/node_positions.json index 3825207..93d8512 100644 --- a/src/resources/node_positions.json +++ b/src/resources/node_positions.json @@ -105,6 +105,6 @@ "?": { "position": [-0.15, 0.3, -1.3], - "rotation": [0, -2.45, 0] + "rotation": [0, -0.45, 0] } }