From 0c4c4a5fb1f3c49bf64495b34c54b45b8c6fcc18 Mon Sep 17 00:00:00 2001 From: Collin Smith Date: Thu, 24 Oct 2019 00:32:43 -0700 Subject: [PATCH] Fixed issue with camera toScreen coordinates applying pixel offset at incorrect time Fixed issue with camera toScreen coordinates applying pixel offset at incorrect time Added debug render of iso boundary rect --- .../com/riiablo/camera/IsometricCamera.java | 18 +++++++++++++++--- tools/src/com/riiablo/camera/CameraTool.java | 14 ++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/core/src/com/riiablo/camera/IsometricCamera.java b/core/src/com/riiablo/camera/IsometricCamera.java index 8dc2215e..462ac29c 100644 --- a/core/src/com/riiablo/camera/IsometricCamera.java +++ b/core/src/com/riiablo/camera/IsometricCamera.java @@ -29,7 +29,7 @@ public class IsometricCamera extends OrthographicCamera { public void translate(float x, float y) { position.add(x, y); toScreen(position.x, position.y, tmp); - super.position.set(tmp, 0).add(pixOffset.x, pixOffset.y, 0); + super.position.set(tmp, 0); } public void set(Vector2 vec) { @@ -39,7 +39,7 @@ public class IsometricCamera extends OrthographicCamera { public void set(float x, float y) { position.set(x, y); toScreen(position.x, position.y, tmp); - super.position.set(tmp, 0).add(pixOffset.x, pixOffset.y, 0); + super.position.set(tmp, 0); } /** @@ -53,7 +53,8 @@ public class IsometricCamera extends OrthographicCamera { * Converts tile coords to screen coords. */ public Vector2 toScreen(float x, float y, Vector2 dst) { - return EngineUtils.worldToScreenCoords(x, y, dst); + EngineUtils.worldToScreenCoords(x, y, dst); + return dst.add(pixOffset); } /** @@ -109,4 +110,15 @@ public class IsometricCamera extends OrthographicCamera { dst.y = y < 0 ? MathUtils.round(y) : MathUtils.roundPositive(y); return dst; } + + public Vector2 screenToWorld(float x, float y, Vector2 dst) { + dst.set(x, y); + unproject(dst); + return toWorld(dst); + } + + public Vector2 screenToTile(float x, float y, Vector2 dst) { + screenToWorld(x, y, dst); + return toTile(dst); + } } diff --git a/tools/src/com/riiablo/camera/CameraTool.java b/tools/src/com/riiablo/camera/CameraTool.java index 9e289c14..cde43e20 100644 --- a/tools/src/com/riiablo/camera/CameraTool.java +++ b/tools/src/com/riiablo/camera/CameraTool.java @@ -181,7 +181,7 @@ public class CameraTool extends ApplicationAdapter { shapes.set(ShapeRenderer.ShapeType.Filled); shapes.setColor(Color.SALMON); - DebugUtils.drawDiamond(shapes, vec2.x, vec2.y - Tile.SUBTILE_HEIGHT50, Tile.SUBTILE_WIDTH, Tile.SUBTILE_HEIGHT); + DebugUtils.drawDiamond(shapes, vec2.x, vec2.y, Tile.SUBTILE_WIDTH, Tile.SUBTILE_HEIGHT); shapes.set(ShapeRenderer.ShapeType.Filled); shapes.setColor(Color.GREEN); @@ -196,9 +196,19 @@ public class CameraTool extends ApplicationAdapter { iso.toScreen(vec2); shapes.setColor(Color.WHITE); - DebugUtils.drawDiamond(shapes, vec2.x, vec2.y - Tile.SUBTILE_HEIGHT50, Tile.SUBTILE_WIDTH, Tile.SUBTILE_HEIGHT); + DebugUtils.drawDiamond(shapes, vec2.x, vec2.y, Tile.SUBTILE_WIDTH, Tile.SUBTILE_HEIGHT); } shapes.end(); + shapes.begin(ShapeRenderer.ShapeType.Line); { + tmp.set(iso.position); + iso.toScreen(tmp); + shapes.rect( + tmp.x - iso.viewportWidth / 2 - 1, + tmp.y - iso.viewportHeight / 2 - 1, + iso.viewportWidth + 2, + iso.viewportHeight + 2 + ); + } shapes.end(); float width; batch.begin();