Skip to content

Commit

Permalink
Fix navigation around map center room coordinates.
Browse files Browse the repository at this point in the history
  • Loading branch information
Mirroar committed Feb 5, 2024
1 parent 40f5657 commit 0977908
Showing 1 changed file with 24 additions and 8 deletions.
32 changes: 24 additions & 8 deletions src/utils/nav-mesh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,8 @@ export default class NavMesh {
const room = Game.rooms[roomName];
for (const portal of room.structuresByType[STRUCTURE_PORTAL] || []) {
if ('shard' in portal.destination) continue;
if (this.isPortalBlocked(room, portal.pos)) continue;

if (!portals[portal.destination.roomName]) {
portals[portal.destination.roomName] = {
targetRoom: portal.destination.roomName,
Expand Down Expand Up @@ -402,6 +404,20 @@ export default class NavMesh {
});
}

isPortalBlocked(room: Room, pos: RoomPosition): boolean {
let hasFreeSpace = false;
this.terrain

handleMapArea(pos.x, pos.y, (x, y) => {
if (this.terrain.get(x, y) === TERRAIN_MASK_WALL) return;
if (this.costMatrix.get(x, y) >= 100) return;

hasFreeSpace = true;
});

return hasFreeSpace;
}

estimateTravelTime(startPos: RoomPosition, endPos: RoomPosition): number {
return cache.inHeap('travelTime:' + encodePosition(startPos) + ':' + encodePosition(endPos), 1000, () => {
const result = this.findPath(startPos, endPos);
Expand Down Expand Up @@ -674,8 +690,8 @@ export default class NavMesh {
return parts[1] + parts[2] + parts[3] + (Number.parseInt(parts[4], 10) + 1);
}

if (parts[4] === '1') {
return parts[1] + parts[2] + 'N1';
if (parts[4] === '0') {
return parts[1] + parts[2] + 'N0';
}

return parts[1] + parts[2] + parts[3] + (Number.parseInt(parts[4], 10) - 1);
Expand All @@ -686,8 +702,8 @@ export default class NavMesh {
return parts[1] + (Number.parseInt(parts[2], 10) + 1) + parts[3] + parts[4];
}

if (parts[2] === '1') {
return 'E1' + parts[3] + parts[4];
if (parts[2] === '0') {
return 'E0' + parts[3] + parts[4];
}

return parts[1] + (Number.parseInt(parts[2], 10) - 1) + parts[3] + parts[4];
Expand All @@ -698,8 +714,8 @@ export default class NavMesh {
return parts[1] + parts[2] + parts[3] + (Number.parseInt(parts[4], 10) + 1);
}

if (parts[4] === '1') {
return parts[1] + parts[2] + 'S1';
if (parts[4] === '0') {
return parts[1] + parts[2] + 'S0';
}

return parts[1] + parts[2] + parts[3] + (Number.parseInt(parts[4], 10) - 1);
Expand All @@ -710,8 +726,8 @@ export default class NavMesh {
return parts[1] + (Number.parseInt(parts[2], 10) + 1) + parts[3] + parts[4];
}

if (parts[2] === '1') {
return 'W1' + parts[3] + parts[4];
if (parts[2] === '0') {
return 'W0' + parts[3] + parts[4];
}

return parts[1] + (Number.parseInt(parts[2], 10) - 1) + parts[3] + parts[4];
Expand Down

0 comments on commit 0977908

Please sign in to comment.