Camera.java 3.2 KB

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