123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package pathgame.gameplay;
- public class Camera
- {
- private final static int CAM_SPEED = 64;
- private float lastScale = 1.0f;
- private float scale = 1.0f;
- private float lastCamOffsetX = 0.0f;
- private float lastCamOffsetY = 0.0f;
- private float camOffsetX = 0.0f;
- private float camOffsetY = 0.0f;
- public void tick(Level level, Gamestate gamestate)
- {
- lastCamOffsetX = camOffsetX;
- lastCamOffsetY = camOffsetY;
- lastScale = scale;
- if(Keys.ZOOM_IN_KEY.isDown())
- {
- scale *= 1.1f;
- }
- else if(Keys.ZOOM_OUT_KEY.isDown())
- {
- scale /= 1.1f;
- }
- if(!level.getPlayer().isMoving() && gamestate.is(Gamestates.GAMEPLAY))
- {
- if(Keys.CAM_UP_KEY.isDown())
- {
- camOffsetY += CAM_SPEED;
- }
- if(Keys.CAM_DOWN_KEY.isDown())
- {
- camOffsetY -= CAM_SPEED;
- }
- if(Keys.CAM_LEFT_KEY.isDown())
- {
- camOffsetX += CAM_SPEED;
- }
- if(Keys.CAM_RIGHT_KEY.isDown())
- {
- camOffsetX -= CAM_SPEED;
- }
- }
- }
- public void limitScale(float zoomRestriction)
- {
- if(scale <= zoomRestriction)
- {
- scale = zoomRestriction;
- }
- if(lastScale <= zoomRestriction)
- {
- lastScale = zoomRestriction;
- }
- }
-
- public void reset()
- {
- camOffsetX = 0.0f;
- camOffsetY = 0.0f;
- lastCamOffsetX = 0.0f;
- lastCamOffsetY = 0.0f;
- }
- public float getInterpolatedScale(float lag)
- {
- return lastScale + (scale - lastScale) * lag;
- }
-
- public float getCamOffsetX(float offX, float minOffX, float lag, float interScale)
- {
- float interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
- if(offX + interCamX > 0.0f)
- {
- camOffsetX = -offX;
- if(lastCamOffsetX > camOffsetX)
- {
- lastCamOffsetX = camOffsetX;
- }
- interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
- }
- if(offX + interCamX < minOffX)
- {
- camOffsetX = minOffX - offX;
- if(lastCamOffsetX < camOffsetX)
- {
- lastCamOffsetX = camOffsetX;
- }
- interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
- }
- return offX + interCamX;
- }
-
- public float getCamOffsetY(float offY, float minOffY, float lag, float interScale)
- {
- float interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
- if(offY + interCamY > 0.0f)
- {
- camOffsetY = -offY;
- if(lastCamOffsetY > camOffsetY)
- {
- lastCamOffsetY = camOffsetY;
- }
- interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
- }
- if(offY + interCamY < minOffY)
- {
- camOffsetY = minOffY - offY;
- if(lastCamOffsetY < camOffsetY)
- {
- lastCamOffsetY = camOffsetY;
- }
- interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
- }
- return offY + interCamY;
- }
- }
|