From 39fa4adbe1b17fb78cbc28ad7d5b4b59d3d87677 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Tue, 13 Sep 2022 13:26:40 -0400 Subject: [PATCH] v1.4.0: the controller pointer can now pan the GameScene camera --- .../main/java/com/watabou/noosa/Camera.java | 3 ++- .../scenes/GameScene.java | 1 + .../scenes/PixelScene.java | 25 +++++++++++++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/SPD-classes/src/main/java/com/watabou/noosa/Camera.java b/SPD-classes/src/main/java/com/watabou/noosa/Camera.java index 92bb1fd47..0b1c0678a 100644 --- a/SPD-classes/src/main/java/com/watabou/noosa/Camera.java +++ b/SPD-classes/src/main/java/com/watabou/noosa/Camera.java @@ -50,7 +50,8 @@ public class Camera extends Gizmo { int screenHeight; public float[] matrix; - + + public boolean scrollable = false; public PointF scroll; public PointF centerOffset; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java index 844c389fb..bd23088e1 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/GameScene.java @@ -213,6 +213,7 @@ public class GameScene extends PixelScene { super.create(); Camera.main.zoom( GameMath.gate(minZoom, defaultZoom + SPDSettings.zoom(), maxZoom)); + Camera.main.scrollable = true; scene = this; diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java index 8603c234f..54d3bae57 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/scenes/PixelScene.java @@ -184,8 +184,29 @@ public class PixelScene extends Scene { PointF virtualCursorPos = ControllerHandler.getControllerPointerPos(); virtualCursorPos.x += defaultZoom * sensitivity * Game.elapsed * xMove; virtualCursorPos.y += defaultZoom * sensitivity * Game.elapsed * yMove; - virtualCursorPos.x = GameMath.gate(0, virtualCursorPos.x, Game.width); - virtualCursorPos.y = GameMath.gate(0, virtualCursorPos.y, Game.height); + + PointF cameraShift = new PointF(); + + if (virtualCursorPos.x < 0){ + cameraShift.x = virtualCursorPos.x; + virtualCursorPos.x = 0; + } else if (virtualCursorPos.x > Camera.main.screenWidth()){ + cameraShift.x = (virtualCursorPos.x - Camera.main.screenWidth()); + virtualCursorPos.x = Camera.main.screenWidth(); + } + + if (virtualCursorPos.y < 0){ + cameraShift.y = virtualCursorPos.y; + virtualCursorPos.y = 0; + } else if (virtualCursorPos.y > Camera.main.screenHeight()){ + cameraShift.y = (virtualCursorPos.y - Camera.main.screenHeight()); + virtualCursorPos.y = Camera.main.screenHeight(); + } + + cameraShift.invScale(Camera.main.zoom); + if (cameraShift.length() > 0 && Camera.main.scrollable){ + Camera.main.shift(cameraShift); + } ControllerHandler.updateControllerPointer(virtualCursorPos, true); } }