mirror of
https://github.com/ad044/lainTSX.git
synced 2024-10-22 23:19:06 +00:00
added up movement, cleaning up the node selector
This commit is contained in:
parent
630537f8ac
commit
a4f50525f8
2 changed files with 127 additions and 287 deletions
|
@ -50,6 +50,7 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
case "LEFT":
|
case "LEFT":
|
||||||
case "RIGHT":
|
case "RIGHT":
|
||||||
case "DOWN":
|
case "DOWN":
|
||||||
|
case "UP":
|
||||||
selectedNodeData = nodeSelector({
|
selectedNodeData = nodeSelector({
|
||||||
keyPress: keyPress,
|
keyPress: keyPress,
|
||||||
nodeMatIdx: nodeMatIdx,
|
nodeMatIdx: nodeMatIdx,
|
||||||
|
@ -71,21 +72,6 @@ const handleMainSceneEvent = (gameContext: any) => {
|
||||||
newLevel = selectedNodeData.newLevel;
|
newLevel = selectedNodeData.newLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
case "UP":
|
|
||||||
newNodeRowIdx = nodeRowIdx - 1;
|
|
||||||
if (newNodeRowIdx < 0) {
|
|
||||||
event = "move_up";
|
|
||||||
|
|
||||||
newLevel = (parseInt(gameContext.activeLevel) + 1)
|
|
||||||
.toString()
|
|
||||||
.padStart(2, "0");
|
|
||||||
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
newSitePosY -= 1.5;
|
|
||||||
} else {
|
|
||||||
event = "change_node";
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case "CIRCLE":
|
case "CIRCLE":
|
||||||
// in this case we have to check the type of the blue orb
|
// in this case we have to check the type of the blue orb
|
||||||
|
|
|
@ -49,173 +49,6 @@ const isNodeVisible = (
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const findNodeAfterMoving = (
|
|
||||||
direction: string,
|
|
||||||
unlockedNodes: typeof unlocked_nodes,
|
|
||||||
level: string,
|
|
||||||
nodeMatIdx: number,
|
|
||||||
nodeRowIdx: number
|
|
||||||
) => {
|
|
||||||
let newNodeId;
|
|
||||||
let newNodeRowIdx = nodeRowIdx;
|
|
||||||
let newNodeMatIdx = nodeMatIdx;
|
|
||||||
let newNodeColIdx;
|
|
||||||
|
|
||||||
if (direction === "left") {
|
|
||||||
newNodeColIdx = 0;
|
|
||||||
|
|
||||||
newNodeMatIdx = nodeMatIdx + 1 > 8 ? 1 : nodeMatIdx + 1;
|
|
||||||
newNodeId = getNodeId(level, newNodeMatIdx, nodeRowIdx, newNodeColIdx);
|
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
|
||||||
|
|
||||||
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
|
||||||
if (triedRows.length < 3) {
|
|
||||||
triedRows.push(newNodeRowIdx);
|
|
||||||
if (newNodeRowIdx === 1 && !triedRows.includes(0)) newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 1 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(0))
|
|
||||||
newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
} else {
|
|
||||||
if (newNodeColIdx === 3) {
|
|
||||||
newNodeId = getNodeId(
|
|
||||||
level,
|
|
||||||
newNodeMatIdx,
|
|
||||||
newNodeRowIdx,
|
|
||||||
newNodeColIdx
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
newNodeColIdx++;
|
|
||||||
triedRows = [];
|
|
||||||
newNodeRowIdx = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
newNodeId = getNodeId(level, newNodeMatIdx, newNodeRowIdx, newNodeColIdx);
|
|
||||||
}
|
|
||||||
} else if (direction === "right") {
|
|
||||||
newNodeColIdx = 3;
|
|
||||||
|
|
||||||
newNodeMatIdx = nodeMatIdx - 1 < 1 ? 8 : nodeMatIdx - 1;
|
|
||||||
newNodeId = getNodeId(level, newNodeMatIdx, nodeRowIdx, newNodeColIdx);
|
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
|
||||||
|
|
||||||
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
|
||||||
if (triedRows.length < 3) {
|
|
||||||
triedRows.push(newNodeRowIdx);
|
|
||||||
if (newNodeRowIdx === 1 && !triedRows.includes(0)) newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 1 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(0))
|
|
||||||
newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
} else {
|
|
||||||
if (newNodeColIdx === 0) {
|
|
||||||
newNodeId = getNodeId(
|
|
||||||
level,
|
|
||||||
newNodeMatIdx,
|
|
||||||
newNodeRowIdx,
|
|
||||||
newNodeColIdx
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
newNodeColIdx--;
|
|
||||||
triedRows = [];
|
|
||||||
newNodeRowIdx = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
newNodeId = getNodeId(level, newNodeMatIdx, newNodeRowIdx, newNodeColIdx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
newNodeId: newNodeId,
|
|
||||||
newNodeMatIdx: newNodeMatIdx,
|
|
||||||
newNodeRowIdx: newNodeRowIdx,
|
|
||||||
newNodeColIdx: newNodeColIdx,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const findNodeAfterMovingVertical = (
|
|
||||||
direction: string,
|
|
||||||
unlockedNodes: typeof unlocked_nodes,
|
|
||||||
level: string,
|
|
||||||
nodeMatIdx: number,
|
|
||||||
nodeColIdx: number
|
|
||||||
) => {
|
|
||||||
let newNodeId;
|
|
||||||
let newNodeRowIdx;
|
|
||||||
let newNodeColIdx = nodeColIdx;
|
|
||||||
let newLevel = (parseInt(level) - 1).toString().padStart(2, "0");
|
|
||||||
|
|
||||||
if (direction === "down") {
|
|
||||||
newNodeRowIdx = 0;
|
|
||||||
|
|
||||||
console.log(newNodeColIdx);
|
|
||||||
newNodeId = getNodeId(newLevel, nodeMatIdx, newNodeRowIdx, newNodeColIdx);
|
|
||||||
|
|
||||||
let triedCols: number[] = [];
|
|
||||||
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
|
||||||
if (triedCols.length < 4) {
|
|
||||||
triedCols.push(newNodeColIdx);
|
|
||||||
if (newNodeColIdx === 1 && !triedCols.includes(0)) newNodeColIdx = 0;
|
|
||||||
else if (newNodeColIdx === 1 && !triedCols.includes(2))
|
|
||||||
newNodeColIdx = 2;
|
|
||||||
else if (newNodeColIdx === 1 && !triedCols.includes(3))
|
|
||||||
newNodeColIdx = 3;
|
|
||||||
else if (newNodeColIdx === 2 && !triedCols.includes(1))
|
|
||||||
newNodeColIdx = 1;
|
|
||||||
else if (newNodeColIdx === 2 && !triedCols.includes(3))
|
|
||||||
newNodeColIdx = 3;
|
|
||||||
else if (newNodeColIdx === 2 && !triedCols.includes(0))
|
|
||||||
newNodeColIdx = 0;
|
|
||||||
else if (newNodeColIdx === 3 && !triedCols.includes(2))
|
|
||||||
newNodeColIdx = 2;
|
|
||||||
else if (newNodeColIdx === 3 && !triedCols.includes(1))
|
|
||||||
newNodeColIdx = 1;
|
|
||||||
else if (newNodeColIdx === 3 && !triedCols.includes(0))
|
|
||||||
newNodeColIdx = 0;
|
|
||||||
else if (newNodeColIdx === 0 && !triedCols.includes(1))
|
|
||||||
newNodeColIdx = 1;
|
|
||||||
else if (newNodeColIdx === 0 && !triedCols.includes(2))
|
|
||||||
newNodeColIdx = 2;
|
|
||||||
else if (newNodeColIdx === 0 && !triedCols.includes(3))
|
|
||||||
newNodeColIdx = 3;
|
|
||||||
} else {
|
|
||||||
if (newNodeRowIdx === 2) {
|
|
||||||
newNodeId = getNodeId(
|
|
||||||
newLevel,
|
|
||||||
nodeMatIdx,
|
|
||||||
newNodeRowIdx,
|
|
||||||
newNodeColIdx
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
newNodeRowIdx++;
|
|
||||||
triedCols = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
newNodeId = getNodeId(newLevel, nodeMatIdx, newNodeRowIdx, newNodeColIdx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
newNodeId: newNodeId,
|
|
||||||
newNodeRowIdx: newNodeRowIdx,
|
|
||||||
newNodeColIdx: newNodeColIdx,
|
|
||||||
newLevel: newLevel,
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
const findNodeVertical = (
|
const findNodeVertical = (
|
||||||
direction: string,
|
direction: string,
|
||||||
unlockedNodes: typeof unlocked_nodes,
|
unlockedNodes: typeof unlocked_nodes,
|
||||||
|
@ -225,26 +58,23 @@ const findNodeVertical = (
|
||||||
nodeColIdx: number
|
nodeColIdx: number
|
||||||
) => {
|
) => {
|
||||||
let newNodeId;
|
let newNodeId;
|
||||||
|
let newLevel = level;
|
||||||
let newNodeRowIdx = nodeRowIdx;
|
let newNodeRowIdx = nodeRowIdx;
|
||||||
let newNodeMatIdx = nodeMatIdx;
|
let newNodeMatIdx = nodeMatIdx;
|
||||||
let newNodeColIdx = nodeColIdx;
|
let newNodeColIdx = nodeColIdx;
|
||||||
|
|
||||||
if (direction === "down") {
|
if (direction === "down") {
|
||||||
newNodeRowIdx++;
|
newNodeRowIdx++;
|
||||||
|
|
||||||
let triedCols: number[] = [];
|
let triedCols: number[] = [];
|
||||||
|
|
||||||
if (newNodeRowIdx > 2) {
|
if (newNodeRowIdx > 2) {
|
||||||
return findNodeAfterMovingVertical(
|
newNodeRowIdx = 0;
|
||||||
"down",
|
newLevel = (parseInt(level) - 1).toString().padStart(2, "0");
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeColIdx
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let newNodeId = getNodeId(
|
let newNodeId = getNodeId(
|
||||||
level,
|
newLevel,
|
||||||
newNodeMatIdx,
|
newNodeMatIdx,
|
||||||
newNodeRowIdx,
|
newNodeRowIdx,
|
||||||
newNodeColIdx
|
newNodeColIdx
|
||||||
|
@ -278,30 +108,101 @@ const findNodeVertical = (
|
||||||
newNodeColIdx = 3;
|
newNodeColIdx = 3;
|
||||||
} else {
|
} else {
|
||||||
if (newNodeRowIdx === 2) {
|
if (newNodeRowIdx === 2) {
|
||||||
return findNodeAfterMovingVertical(
|
newNodeRowIdx = 0;
|
||||||
"down",
|
newLevel = (parseInt(level) - 1).toString().padStart(2, "0");
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeColIdx
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
newNodeRowIdx++;
|
newNodeRowIdx++;
|
||||||
triedCols = [];
|
triedCols = [];
|
||||||
newNodeColIdx = 0;
|
newNodeColIdx = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
newNodeId = getNodeId(level, newNodeMatIdx, newNodeRowIdx, newNodeColIdx);
|
newNodeId = getNodeId(
|
||||||
|
newLevel,
|
||||||
|
newNodeMatIdx,
|
||||||
|
newNodeRowIdx,
|
||||||
|
newNodeColIdx
|
||||||
|
);
|
||||||
|
}
|
||||||
|
} else if (direction === "up") {
|
||||||
|
newNodeRowIdx--;
|
||||||
|
|
||||||
|
let triedCols: number[] = [];
|
||||||
|
|
||||||
|
if (newNodeRowIdx < 0) {
|
||||||
|
newNodeRowIdx = 2;
|
||||||
|
newLevel = (parseInt(level) + 1).toString().padStart(2, "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
let newNodeId = getNodeId(
|
||||||
|
newLevel,
|
||||||
|
newNodeMatIdx,
|
||||||
|
newNodeRowIdx,
|
||||||
|
newNodeColIdx
|
||||||
|
);
|
||||||
|
|
||||||
|
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
||||||
|
if (triedCols.length < 4) {
|
||||||
|
triedCols.push(newNodeColIdx);
|
||||||
|
if (newNodeColIdx === 1 && !triedCols.includes(0)) newNodeColIdx = 0;
|
||||||
|
else if (newNodeColIdx === 1 && !triedCols.includes(2))
|
||||||
|
newNodeColIdx = 2;
|
||||||
|
else if (newNodeColIdx === 1 && !triedCols.includes(3))
|
||||||
|
newNodeColIdx = 3;
|
||||||
|
else if (newNodeColIdx === 2 && !triedCols.includes(1))
|
||||||
|
newNodeColIdx = 1;
|
||||||
|
else if (newNodeColIdx === 2 && !triedCols.includes(3))
|
||||||
|
newNodeColIdx = 3;
|
||||||
|
else if (newNodeColIdx === 2 && !triedCols.includes(0))
|
||||||
|
newNodeColIdx = 0;
|
||||||
|
else if (newNodeColIdx === 3 && !triedCols.includes(2))
|
||||||
|
newNodeColIdx = 2;
|
||||||
|
else if (newNodeColIdx === 3 && !triedCols.includes(1))
|
||||||
|
newNodeColIdx = 1;
|
||||||
|
else if (newNodeColIdx === 3 && !triedCols.includes(0))
|
||||||
|
newNodeColIdx = 0;
|
||||||
|
else if (newNodeColIdx === 0 && !triedCols.includes(1))
|
||||||
|
newNodeColIdx = 1;
|
||||||
|
else if (newNodeColIdx === 0 && !triedCols.includes(2))
|
||||||
|
newNodeColIdx = 2;
|
||||||
|
else if (newNodeColIdx === 0 && !triedCols.includes(3))
|
||||||
|
newNodeColIdx = 3;
|
||||||
|
} else {
|
||||||
|
if (newNodeRowIdx === 0) {
|
||||||
|
newNodeRowIdx = 2;
|
||||||
|
newLevel = (parseInt(level) + 1).toString().padStart(2, "0");
|
||||||
|
} else {
|
||||||
|
newNodeRowIdx--;
|
||||||
|
triedCols = [];
|
||||||
|
newNodeColIdx = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
newNodeId = getNodeId(
|
||||||
|
newLevel,
|
||||||
|
newNodeMatIdx,
|
||||||
|
newNodeRowIdx,
|
||||||
|
newNodeColIdx
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
newNodeId: newNodeId,
|
newNodeId: newNodeId,
|
||||||
newLevel: level,
|
newLevel: newLevel,
|
||||||
newNodeRowIdx: newNodeRowIdx,
|
newNodeRowIdx: newNodeRowIdx,
|
||||||
newNodeColIdx: newNodeColIdx,
|
newNodeColIdx: newNodeColIdx,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const tryRow = (row: number, triedRows: number[]) => {
|
||||||
|
console.log(row);
|
||||||
|
console.log(triedRows);
|
||||||
|
if (row === 1 && !triedRows.includes(0)) return 0;
|
||||||
|
else if (row === 1 && !triedRows.includes(2)) return 2;
|
||||||
|
else if (row === 2 && !triedRows.includes(0)) return 0;
|
||||||
|
else if (row === 2 && !triedRows.includes(1)) return 1;
|
||||||
|
else if (row === 0 && !triedRows.includes(1)) return 1;
|
||||||
|
else if (row === 0 && !triedRows.includes(2)) return 2;
|
||||||
|
};
|
||||||
|
|
||||||
const findNode = (
|
const findNode = (
|
||||||
direction: string,
|
direction: string,
|
||||||
unlockedNodes: typeof unlocked_nodes,
|
unlockedNodes: typeof unlocked_nodes,
|
||||||
|
@ -317,6 +218,13 @@ const findNode = (
|
||||||
if (direction === "left") {
|
if (direction === "left") {
|
||||||
newNodeColIdx--;
|
newNodeColIdx--;
|
||||||
|
|
||||||
|
let triedRows: number[] = [];
|
||||||
|
|
||||||
|
if (newNodeColIdx < 0) {
|
||||||
|
newNodeColIdx = 0;
|
||||||
|
newNodeMatIdx = nodeMatIdx + 1 > 8 ? 1 : nodeMatIdx + 1;
|
||||||
|
}
|
||||||
|
|
||||||
let newNodeId = getNodeId(
|
let newNodeId = getNodeId(
|
||||||
level,
|
level,
|
||||||
newNodeMatIdx,
|
newNodeMatIdx,
|
||||||
|
@ -324,40 +232,17 @@ const findNode = (
|
||||||
newNodeColIdx
|
newNodeColIdx
|
||||||
);
|
);
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
|
||||||
|
|
||||||
if (newNodeColIdx < 0)
|
|
||||||
return findNodeAfterMoving(
|
|
||||||
"left",
|
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeRowIdx
|
|
||||||
);
|
|
||||||
|
|
||||||
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
||||||
if (triedRows.length < 3) {
|
if (triedRows.length < 3) {
|
||||||
triedRows.push(newNodeRowIdx);
|
triedRows.push(newNodeRowIdx);
|
||||||
if (newNodeRowIdx === 1 && !triedRows.includes(0)) newNodeRowIdx = 0;
|
const newTry = tryRow(newNodeRowIdx, triedRows);
|
||||||
else if (newNodeRowIdx === 1 && !triedRows.includes(2))
|
if (newTry !== undefined) {
|
||||||
newNodeRowIdx = 2;
|
newNodeRowIdx = newTry;
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(0))
|
}
|
||||||
newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
} else {
|
} else {
|
||||||
if (newNodeColIdx === 0) {
|
if (newNodeColIdx === 0) {
|
||||||
return findNodeAfterMoving(
|
newNodeColIdx = 0;
|
||||||
"left",
|
newNodeMatIdx = nodeMatIdx + 1 > 8 ? 1 : nodeMatIdx + 1;
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeRowIdx
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
newNodeColIdx--;
|
newNodeColIdx--;
|
||||||
triedRows = [];
|
triedRows = [];
|
||||||
|
@ -369,6 +254,13 @@ const findNode = (
|
||||||
} else if (direction === "right") {
|
} else if (direction === "right") {
|
||||||
newNodeColIdx++;
|
newNodeColIdx++;
|
||||||
|
|
||||||
|
let triedRows: number[] = [];
|
||||||
|
|
||||||
|
if (newNodeColIdx > 3) {
|
||||||
|
newNodeColIdx = 3;
|
||||||
|
newNodeMatIdx = nodeMatIdx - 1 < 1 ? 8 : nodeMatIdx - 1;
|
||||||
|
}
|
||||||
|
|
||||||
let newNodeId = getNodeId(
|
let newNodeId = getNodeId(
|
||||||
level,
|
level,
|
||||||
newNodeMatIdx,
|
newNodeMatIdx,
|
||||||
|
@ -376,40 +268,17 @@ const findNode = (
|
||||||
newNodeColIdx
|
newNodeColIdx
|
||||||
);
|
);
|
||||||
|
|
||||||
let triedRows: number[] = [];
|
|
||||||
|
|
||||||
if (newNodeColIdx > 3)
|
|
||||||
return findNodeAfterMoving(
|
|
||||||
"right",
|
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeRowIdx
|
|
||||||
);
|
|
||||||
|
|
||||||
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
while (!isNodeVisible(newNodeId, unlockedNodes)) {
|
||||||
if (triedRows.length < 3) {
|
if (triedRows.length < 3) {
|
||||||
triedRows.push(newNodeRowIdx);
|
triedRows.push(newNodeRowIdx);
|
||||||
if (newNodeRowIdx === 1 && !triedRows.includes(0)) newNodeRowIdx = 0;
|
const newTry = tryRow(newNodeRowIdx, triedRows);
|
||||||
else if (newNodeRowIdx === 1 && !triedRows.includes(2))
|
if (newTry !== undefined) {
|
||||||
newNodeRowIdx = 2;
|
newNodeRowIdx = newTry;
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(0))
|
}
|
||||||
newNodeRowIdx = 0;
|
|
||||||
else if (newNodeRowIdx === 2 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(1))
|
|
||||||
newNodeRowIdx = 1;
|
|
||||||
else if (newNodeRowIdx === 0 && !triedRows.includes(2))
|
|
||||||
newNodeRowIdx = 2;
|
|
||||||
} else {
|
} else {
|
||||||
if (newNodeColIdx === 3) {
|
if (newNodeColIdx === 3) {
|
||||||
return findNodeAfterMoving(
|
newNodeColIdx = 3;
|
||||||
"right",
|
newNodeMatIdx = nodeMatIdx - 1 < 1 ? 8 : nodeMatIdx - 1;
|
||||||
unlockedNodes,
|
|
||||||
level,
|
|
||||||
nodeMatIdx,
|
|
||||||
nodeRowIdx
|
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
newNodeColIdx++;
|
newNodeColIdx++;
|
||||||
triedRows = [];
|
triedRows = [];
|
||||||
|
@ -430,35 +299,13 @@ const findNode = (
|
||||||
|
|
||||||
const nodeSelector = (context: NodeSelectorContext) => {
|
const nodeSelector = (context: NodeSelectorContext) => {
|
||||||
let newNodeData;
|
let newNodeData;
|
||||||
|
const move = context.keyPress.toLowerCase();
|
||||||
|
|
||||||
switch (context.keyPress) {
|
switch (context.keyPress) {
|
||||||
case "LEFT":
|
case "LEFT":
|
||||||
newNodeData = findNode(
|
|
||||||
"left",
|
|
||||||
context.unlockedNodes,
|
|
||||||
context.level,
|
|
||||||
context.nodeMatIdx,
|
|
||||||
context.nodeRowIdx,
|
|
||||||
context.nodeColIdx
|
|
||||||
);
|
|
||||||
|
|
||||||
if (newNodeData) {
|
|
||||||
const didMove = context.nodeMatIdx !== newNodeData.newNodeMatIdx;
|
|
||||||
return {
|
|
||||||
event: didMove ? "move_left" : "change_node",
|
|
||||||
newNodeMatIdx: newNodeData.newNodeMatIdx,
|
|
||||||
newNodeRowIdx: newNodeData.newNodeRowIdx,
|
|
||||||
newNodeColIdx: newNodeData.newNodeColIdx,
|
|
||||||
newSiteRotY: didMove
|
|
||||||
? context.siteRotY + Math.PI / 4
|
|
||||||
: context.siteRotY,
|
|
||||||
newSitePosY: context.sitePosY,
|
|
||||||
newLevel: context.level,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "RIGHT":
|
case "RIGHT":
|
||||||
newNodeData = findNode(
|
newNodeData = findNode(
|
||||||
"right",
|
move,
|
||||||
context.unlockedNodes,
|
context.unlockedNodes,
|
||||||
context.level,
|
context.level,
|
||||||
context.nodeMatIdx,
|
context.nodeMatIdx,
|
||||||
|
@ -468,13 +315,15 @@ const nodeSelector = (context: NodeSelectorContext) => {
|
||||||
|
|
||||||
if (newNodeData) {
|
if (newNodeData) {
|
||||||
const didMove = context.nodeMatIdx !== newNodeData.newNodeMatIdx;
|
const didMove = context.nodeMatIdx !== newNodeData.newNodeMatIdx;
|
||||||
|
const siteRotYModifier = move === "left" ? Math.PI / 4 : -Math.PI / 4;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
event: didMove ? "move_right" : "change_node",
|
event: didMove ? `move_${move}` : "change_node",
|
||||||
newNodeMatIdx: newNodeData.newNodeMatIdx,
|
newNodeMatIdx: newNodeData.newNodeMatIdx,
|
||||||
newNodeRowIdx: newNodeData.newNodeRowIdx,
|
newNodeRowIdx: newNodeData.newNodeRowIdx,
|
||||||
newNodeColIdx: newNodeData.newNodeColIdx,
|
newNodeColIdx: newNodeData.newNodeColIdx,
|
||||||
newSiteRotY: didMove
|
newSiteRotY: didMove
|
||||||
? context.siteRotY - Math.PI / 4
|
? context.siteRotY + siteRotYModifier
|
||||||
: context.siteRotY,
|
: context.siteRotY,
|
||||||
newSitePosY: context.sitePosY,
|
newSitePosY: context.sitePosY,
|
||||||
newLevel: context.level,
|
newLevel: context.level,
|
||||||
|
@ -482,8 +331,9 @@ const nodeSelector = (context: NodeSelectorContext) => {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "DOWN":
|
case "DOWN":
|
||||||
|
case "UP":
|
||||||
newNodeData = findNodeVertical(
|
newNodeData = findNodeVertical(
|
||||||
"down",
|
move,
|
||||||
context.unlockedNodes,
|
context.unlockedNodes,
|
||||||
context.level,
|
context.level,
|
||||||
context.nodeMatIdx,
|
context.nodeMatIdx,
|
||||||
|
@ -493,16 +343,20 @@ const nodeSelector = (context: NodeSelectorContext) => {
|
||||||
|
|
||||||
if (newNodeData) {
|
if (newNodeData) {
|
||||||
const didMove = context.level !== newNodeData.newLevel;
|
const didMove = context.level !== newNodeData.newLevel;
|
||||||
|
const sitePosYModifier = move === "up" ? -1.5 : 1.5;
|
||||||
return {
|
return {
|
||||||
event: didMove ? "move_down" : "change_node",
|
event: didMove ? `move_${move}` : "change_node",
|
||||||
newNodeMatIdx: context.nodeMatIdx,
|
newNodeMatIdx: context.nodeMatIdx,
|
||||||
newNodeRowIdx: newNodeData.newNodeRowIdx,
|
newNodeRowIdx: newNodeData.newNodeRowIdx,
|
||||||
newNodeColIdx: newNodeData.newNodeColIdx,
|
newNodeColIdx: newNodeData.newNodeColIdx,
|
||||||
newSiteRotY: context.siteRotY,
|
newSiteRotY: context.siteRotY,
|
||||||
newSitePosY: didMove ? context.sitePosY + 1.5 : context.sitePosY,
|
newSitePosY: didMove
|
||||||
|
? context.sitePosY + sitePosYModifier
|
||||||
|
: context.sitePosY,
|
||||||
newLevel: newNodeData.newLevel,
|
newLevel: newNodeData.newLevel,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue