Camera.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package pathgame.gameplay;
  2. public class Camera
  3. {
  4. private final static int CAM_SPEED = 64;
  5. private float lastScale = 1.0f;
  6. private float scale = 1.0f;
  7. private float lastCamOffsetX = 0.0f;
  8. private float lastCamOffsetY = 0.0f;
  9. private float camOffsetX = 0.0f;
  10. private float camOffsetY = 0.0f;
  11. public void tick(Level level, Gamestate gamestate)
  12. {
  13. lastCamOffsetX = camOffsetX;
  14. lastCamOffsetY = camOffsetY;
  15. lastScale = scale;
  16. if(Keys.ZOOM_IN_KEY.isDown())
  17. {
  18. scale *= 1.1f;
  19. }
  20. else if(Keys.ZOOM_OUT_KEY.isDown())
  21. {
  22. scale /= 1.1f;
  23. }
  24. if(!level.getPlayer().isMoving() && gamestate.is(Gamestates.GAMEPLAY))
  25. {
  26. if(Keys.CAM_UP_KEY.isDown())
  27. {
  28. camOffsetY += CAM_SPEED;
  29. }
  30. if(Keys.CAM_DOWN_KEY.isDown())
  31. {
  32. camOffsetY -= CAM_SPEED;
  33. }
  34. if(Keys.CAM_LEFT_KEY.isDown())
  35. {
  36. camOffsetX += CAM_SPEED;
  37. }
  38. if(Keys.CAM_RIGHT_KEY.isDown())
  39. {
  40. camOffsetX -= CAM_SPEED;
  41. }
  42. }
  43. }
  44. public void limitScale(float zoomRestriction)
  45. {
  46. if(scale <= zoomRestriction)
  47. {
  48. scale = zoomRestriction;
  49. }
  50. if(lastScale <= zoomRestriction)
  51. {
  52. lastScale = zoomRestriction;
  53. }
  54. }
  55. public void reset()
  56. {
  57. camOffsetX = 0.0f;
  58. camOffsetY = 0.0f;
  59. lastCamOffsetX = 0.0f;
  60. lastCamOffsetY = 0.0f;
  61. }
  62. public float getInterpolatedScale(float lag)
  63. {
  64. return lastScale + (scale - lastScale) * lag;
  65. }
  66. public float getCamOffsetX(float offX, float minOffX, float lag, float interScale)
  67. {
  68. float interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
  69. if(offX + interCamX > 0.0f)
  70. {
  71. camOffsetX = -offX;
  72. if(lastCamOffsetX > camOffsetX)
  73. {
  74. lastCamOffsetX = camOffsetX;
  75. }
  76. interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
  77. }
  78. if(offX + interCamX < minOffX)
  79. {
  80. camOffsetX = minOffX - offX;
  81. if(lastCamOffsetX < camOffsetX)
  82. {
  83. lastCamOffsetX = camOffsetX;
  84. }
  85. interCamX = lastCamOffsetX + (camOffsetX - lastCamOffsetX) * lag;
  86. }
  87. return offX + interCamX;
  88. }
  89. public float getCamOffsetY(float offY, float minOffY, float lag, float interScale)
  90. {
  91. float interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
  92. if(offY + interCamY > 0.0f)
  93. {
  94. camOffsetY = -offY;
  95. if(lastCamOffsetY > camOffsetY)
  96. {
  97. lastCamOffsetY = camOffsetY;
  98. }
  99. interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
  100. }
  101. if(offY + interCamY < minOffY)
  102. {
  103. camOffsetY = minOffY - offY;
  104. if(lastCamOffsetY < camOffsetY)
  105. {
  106. lastCamOffsetY = camOffsetY;
  107. }
  108. interCamY = lastCamOffsetY + (camOffsetY - lastCamOffsetY) * lag;
  109. }
  110. return offY + interCamY;
  111. }
  112. }