empty territory node selection handling

This commit is contained in:
ad044 2020-12-15 21:24:51 +04:00
parent 2b911fd6c4
commit 82436249d1
6 changed files with 61 additions and 24 deletions

View file

@ -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,

View file

@ -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;

View file

@ -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);

View file

@ -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,

View file

@ -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);
let didMove = false;
if (direction === "left") { if (direction === "left") {
let didMove = false;
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;
newMatIndices.colIdx = 0; if (activeId === "UNKNOWN") {
newMatIndices.matrixIdx = newMatIndices.colIdx = nodeMatrixIndices.colIdx;
newMatIndices.matrixIdx + 1 > 8 ? 1 : newMatIndices.matrixIdx + 1; 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 { } 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;
newMatIndices.colIdx = 3; if (activeId === "UNKNOWN") {
newMatIndices.matrixIdx = newMatIndices.colIdx = nodeMatrixIndices.colIdx;
newMatIndices.matrixIdx - 1 < 1 ? 8 : newMatIndices.matrixIdx - 1; 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 { } 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,

View file

@ -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]
} }
} }