camera clamping

stable
Ivory 2023-02-01 18:16:58 -05:00
parent 4d2a630fce
commit 93b2788c58
3 changed files with 18 additions and 0 deletions

View File

@ -51,4 +51,10 @@ public class Vector2f implements Serializable {
public String toString() {
return "<" + x + ", " + y + ">";
}
public Vector2f clamp(Box box) {
float x = Math.min(Math.max(this.x, box.x), box.x2);
float y = Math.min(Math.max(this.y, box.y), box.y2);
return new Vector2f(x, y);
}
}

View File

@ -31,6 +31,8 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea
private float minY, maxY;
private Box focusBounds = null;
@Override
public void start() {
IWorldBoundsAdapter worldBoundsAdapter = get(IWorldBoundsAdapter.class);
@ -39,6 +41,10 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea
maxY = bounds.w;
}
public void setFocusBounds(Box box) {
this.focusBounds = box;
}
public Vector2f getWorldMouse() {
return screen2world(App.mouseX, App.mouseY);
}
@ -67,6 +73,10 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea
Vector2f dragDifference = screen2world(App.mouseX, App.mouseY).subtract(focus);
focus = dragOrigin.subtract(dragDifference);
}
if(focusBounds != null) {
focus = focus.clamp(focusBounds);
}
}
public void focus(float x, float y) {

View File

@ -1,5 +1,6 @@
package xyz.valnet.hadean.gameobjects;
import xyz.valnet.engine.math.Box;
import xyz.valnet.engine.math.FastNoiseLite;
import xyz.valnet.engine.math.Vector2i;
import xyz.valnet.engine.math.Vector4f;
@ -42,6 +43,7 @@ public class Terrain extends GameObject implements IPathable, IWorldBoundsAdapte
@Override
protected void start() {
camera.focus(WORLD_SIZE / 2, WORLD_SIZE / 2);
camera.setFocusBounds(new Box(0, 0, WORLD_SIZE, WORLD_SIZE));
}
public Tile getTile(int x, int y) {