fix: mirror X axis for dungeon tiles to match UB coordinate system
UB uses mirrored X: x = -(cell.X - playerX), direct Y: y = cell.Y - playerY. Applied same transform to tile rendering, object positioning, and entity list distance calculations in dungeon mode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
683d1cf337
commit
3857c0de79
1 changed files with 9 additions and 8 deletions
|
|
@ -3877,12 +3877,13 @@ function updateRadarWindow(msg) {
|
||||||
ctx.globalAlpha = isCurrentFloor ? 0.85 : 0.12;
|
ctx.globalAlpha = isCurrentFloor ? 0.85 : 0.12;
|
||||||
|
|
||||||
(level.cells || []).forEach(cell => {
|
(level.cells || []).forEach(cell => {
|
||||||
const dx = (cell.x - playerX) * scale;
|
// UB mirrors X: x = -(cell.x - playerX), Y is direct: y = cell.y - playerY
|
||||||
const dy = -(cell.y - playerY) * scale; // Y flipped
|
const dx = -(cell.x - playerX) * scale;
|
||||||
|
const dy = (cell.y - playerY) * scale;
|
||||||
const tileCanvas = hasTiles ? dungeonTileCanvases[String(cell.env_id)] : null;
|
const tileCanvas = hasTiles ? dungeonTileCanvases[String(cell.env_id)] : null;
|
||||||
|
|
||||||
if (tileCanvas) {
|
if (tileCanvas) {
|
||||||
// Draw processed tile with rotation
|
// Draw processed tile with per-cell rotation
|
||||||
ctx.save();
|
ctx.save();
|
||||||
ctx.translate(dx, dy);
|
ctx.translate(dx, dy);
|
||||||
ctx.rotate(cellRotation(cell.rotation));
|
ctx.rotate(cellRotation(cell.rotation));
|
||||||
|
|
@ -3972,11 +3973,11 @@ function updateRadarWindow(msg) {
|
||||||
const cosA = Math.cos(rotAngle);
|
const cosA = Math.cos(rotAngle);
|
||||||
const sinA = Math.sin(rotAngle);
|
const sinA = Math.sin(rotAngle);
|
||||||
objects.forEach(obj => {
|
objects.forEach(obj => {
|
||||||
// Use raw physics coords in dungeons, EW/NS on surface
|
// Use raw physics coords in dungeons (X mirrored), EW/NS on surface
|
||||||
let dX, dY;
|
let dX, dY;
|
||||||
if (isDungeon && obj.raw_x !== undefined) {
|
if (isDungeon && obj.raw_x !== undefined) {
|
||||||
dX = obj.raw_x - playerX;
|
dX = -(obj.raw_x - playerX); // X mirrored to match UB coordinate system
|
||||||
dY = obj.raw_y - playerY;
|
dY = (obj.raw_y - playerY);
|
||||||
} else {
|
} else {
|
||||||
dX = obj.ew - playerEW;
|
dX = obj.ew - playerEW;
|
||||||
dY = obj.ns - playerNS;
|
dY = obj.ns - playerNS;
|
||||||
|
|
@ -4038,8 +4039,8 @@ function updateRadarWindow(msg) {
|
||||||
const withDist = objects.map(obj => {
|
const withDist = objects.map(obj => {
|
||||||
let distMeters, dX, dY;
|
let distMeters, dX, dY;
|
||||||
if (isDungeon && obj.raw_x !== undefined) {
|
if (isDungeon && obj.raw_x !== undefined) {
|
||||||
dX = obj.raw_x - playerX;
|
dX = -(obj.raw_x - playerX); // X mirrored
|
||||||
dY = obj.raw_y - playerY;
|
dY = (obj.raw_y - playerY);
|
||||||
distMeters = Math.sqrt(dX * dX + dY * dY); // raw coords are ~meters
|
distMeters = Math.sqrt(dX * dX + dY * dY); // raw coords are ~meters
|
||||||
} else {
|
} else {
|
||||||
dX = obj.ew - playerEW;
|
dX = obj.ew - playerEW;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue