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);
// 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,

View file

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

View file

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

View file

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

View file

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

View file

@ -105,6 +105,6 @@
"?": {
"position": [-0.15, 0.3, -1.3],
"rotation": [0, -2.45, 0]
"rotation": [0, -0.45, 0]
}
}