camera clamping
parent
4d2a630fce
commit
93b2788c58
|
|
@ -51,4 +51,10 @@ public class Vector2f implements Serializable {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "<" + x + ", " + y + ">";
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea
|
||||||
|
|
||||||
private float minY, maxY;
|
private float minY, maxY;
|
||||||
|
|
||||||
|
private Box focusBounds = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void start() {
|
public void start() {
|
||||||
IWorldBoundsAdapter worldBoundsAdapter = get(IWorldBoundsAdapter.class);
|
IWorldBoundsAdapter worldBoundsAdapter = get(IWorldBoundsAdapter.class);
|
||||||
|
|
@ -39,6 +41,10 @@ public class Camera extends GameObject implements ITransient, IMouseCaptureArea
|
||||||
maxY = bounds.w;
|
maxY = bounds.w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setFocusBounds(Box box) {
|
||||||
|
this.focusBounds = box;
|
||||||
|
}
|
||||||
|
|
||||||
public Vector2f getWorldMouse() {
|
public Vector2f getWorldMouse() {
|
||||||
return screen2world(App.mouseX, App.mouseY);
|
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);
|
Vector2f dragDifference = screen2world(App.mouseX, App.mouseY).subtract(focus);
|
||||||
focus = dragOrigin.subtract(dragDifference);
|
focus = dragOrigin.subtract(dragDifference);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(focusBounds != null) {
|
||||||
|
focus = focus.clamp(focusBounds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void focus(float x, float y) {
|
public void focus(float x, float y) {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
package xyz.valnet.hadean.gameobjects;
|
package xyz.valnet.hadean.gameobjects;
|
||||||
|
|
||||||
|
import xyz.valnet.engine.math.Box;
|
||||||
import xyz.valnet.engine.math.FastNoiseLite;
|
import xyz.valnet.engine.math.FastNoiseLite;
|
||||||
import xyz.valnet.engine.math.Vector2i;
|
import xyz.valnet.engine.math.Vector2i;
|
||||||
import xyz.valnet.engine.math.Vector4f;
|
import xyz.valnet.engine.math.Vector4f;
|
||||||
|
|
@ -42,6 +43,7 @@ public class Terrain extends GameObject implements IPathable, IWorldBoundsAdapte
|
||||||
@Override
|
@Override
|
||||||
protected void start() {
|
protected void start() {
|
||||||
camera.focus(WORLD_SIZE / 2, WORLD_SIZE / 2);
|
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) {
|
public Tile getTile(int x, int y) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue