v1.2.0: added camera offset functionality

This commit is contained in:
Evan Debenham 2022-02-07 19:07:53 -05:00
parent 2b99fe67fa
commit 44e145c9d4
2 changed files with 27 additions and 5 deletions

View File

@ -52,6 +52,7 @@ public class Camera extends Gizmo {
public float[] matrix;
public PointF scroll;
public PointF centerOffset;
private float shakeMagX = 10f;
private float shakeMagY = 10f;
@ -122,6 +123,7 @@ public class Camera extends Gizmo {
screenHeight = (int)(height * zoom);
scroll = new PointF();
centerOffset = new PointF();
matrix = new float[16];
Matrix.setIdentity( matrix );
@ -139,12 +141,15 @@ public class Camera extends Gizmo {
}
public void zoom( float value, float fx, float fy ) {
PointF offsetAdjust = centerOffset.clone();
centerOffset.scale(zoom).invScale(value);
zoom = value;
width = (int)(screenWidth / zoom);
height = (int)(screenHeight / zoom);
snapTo( fx, fy );
snapTo( fx - offsetAdjust.x, fy - offsetAdjust.y );
}
public void resize( int width, int height ) {
@ -165,7 +170,7 @@ public class Camera extends Gizmo {
super.update();
if (followTarget != null){
panTarget = followTarget.center();
panTarget = followTarget.center().offset(centerOffset);
}
if (panIntensity > 0f){
@ -202,9 +207,17 @@ public class Camera extends Gizmo {
scroll.offset(point);
panIntensity = 0f;
}
public void setCenterOffset( float x, float y ){
scroll.x += x - centerOffset.x;
scroll.y += y - centerOffset.y;
centerOffset.set(x, y);
panIntensity = 0f;
followTarget = null;
}
public void snapTo(float x, float y ) {
scroll.set( x - width / 2, y - height / 2 );
scroll.set( x - width / 2, y - height / 2 ).offset(centerOffset);
panIntensity = 0f;
followTarget = null;
}
@ -214,7 +227,7 @@ public class Camera extends Gizmo {
}
public void panTo( PointF dst, float intensity ){
panTarget = dst;
panTarget = dst.offset(centerOffset);
panIntensity = intensity;
followTarget = null;
}

View File

@ -764,6 +764,15 @@ public class GameScene extends PixelScene {
if (scene == null) return;
//move the camera center up a bit if we're on full UI and it is taking up lots of space
if (scene.inventory != null && scene.inventory.visible
&& (uiCamera.width < 460 && uiCamera.height < 300)){
Camera.main.setCenterOffset(0, Math.min(300-uiCamera.height, 460-uiCamera.width) / Camera.main.zoom);
} else {
Camera.main.setCenterOffset(0, 0);
}
//Camera.main.panTo(Dungeon.hero.sprite.center(), 5f);
//primarily for phones displays with notches
//TODO Android never draws into notch atm, perhaps allow it for center notches?
RectF insets = DeviceCompat.getSafeInsets();