GamePanel.java 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package view;
  2. import controller.GameController;
  3. import controller.MouseListener;
  4. import controller.MouseWheelZoom;
  5. import model.GameSaver;
  6. import model.Inventory;
  7. import view.tile.TileManager;
  8. import util.GAMESTATE;
  9. import controller.KeyHandler;
  10. import view.util.screenCoordinatesToWorld;
  11. import javax.swing.*;
  12. import java.awt.*;
  13. public class GamePanel extends JPanel implements screenCoordinatesToWorld {
  14. //Screen Settings
  15. final static int originalTileSize = 16;
  16. final static int scale = 4;
  17. int fps = 60;
  18. public GameController gameController;
  19. public static int static_TileSize = originalTileSize * scale;
  20. public int tileSize = originalTileSize * scale;
  21. public int maxScreenCol = 16;
  22. public int maxScreenRow = 12;
  23. public int screenWidth = tileSize * maxScreenCol;
  24. public int screenHeight = tileSize * maxScreenRow;
  25. // World Settings
  26. public final int maxWorldCol = 50;
  27. public final int maxWorldRow = 50;
  28. public final int worldWidth = tileSize * maxWorldCol;
  29. public final int worldHeight = tileSize * maxWorldRow;
  30. //System
  31. public UI ui = new UI(this);
  32. // Game State
  33. public GAMESTATE gameState;
  34. public TileManager tileManager;
  35. private InventoryView inventoryView;
  36. public Camera camera;
  37. public GamePanel(GameController controller) {
  38. this.gameController = controller; // get from controller
  39. this.camera = new Camera(this, controller.getKeyHandler());
  40. this.tileManager = new TileManager(this);
  41. Inventory inventory = gameController.getModel().getInventory();
  42. this.inventoryView = new InventoryView(inventory);
  43. MouseListener mdl = new MouseListener(controller, this, camera, tileManager);
  44. this.addMouseListener(mdl);
  45. this.addMouseMotionListener(mdl);
  46. this.addMouseWheelListener(new MouseWheelZoom(this));
  47. this.setPreferredSize(new Dimension(screenWidth, screenHeight));
  48. this.setBackground(Color.BLACK);
  49. this.setDoubleBuffered(true);
  50. this.addKeyListener(controller.getKeyHandler()); // now safe
  51. this.setFocusable(true);
  52. gameState = GAMESTATE.PLAY;
  53. }
  54. public void zoomInOut(int i){
  55. if(gameState != GAMESTATE.PLAY){
  56. return;
  57. }
  58. int oldWorldWidth = tileSize * maxWorldCol;
  59. if((tileSize >= originalTileSize*scale/4 && i < 0) || (tileSize < (originalTileSize * scale) && i > 0)){
  60. tileSize += i;
  61. }
  62. int newWorldWidth = tileSize * maxWorldCol;
  63. double multiplier = (double)newWorldWidth/oldWorldWidth;
  64. double newCameraWorldX = camera.worldX * multiplier;
  65. double newCameraWorldY = camera.worldY * multiplier;
  66. camera.worldX = (int) newCameraWorldX;
  67. camera.worldY = (int) newCameraWorldY;
  68. }
  69. public InventoryView getInventoryView(){
  70. return inventoryView;
  71. }
  72. @Override
  73. public void paintComponent(Graphics g) {
  74. super.paintComponent(g);
  75. Graphics2D g2 = (Graphics2D) g;
  76. tileManager.draw(g2);
  77. camera.draw(g2);
  78. if (gameState == GAMESTATE.INVENTORY) {
  79. inventoryView.drawInventoryOverlay(g2);
  80. }
  81. if (gameState == GAMESTATE.QUIT) {
  82. GameSaver.saveGame(gameController);
  83. System.exit(0);
  84. }
  85. if(gameState == GAMESTATE.PLAY){
  86. ui.drawHut(g2);
  87. }
  88. ui.draw(g2);
  89. g2.dispose();
  90. }
  91. public void update(){
  92. if(gameState == GAMESTATE.PLAY || gameState == GAMESTATE.INVENTORY){
  93. camera.update();
  94. }
  95. }
  96. public int getWorldX(int screenX){
  97. return (int) (camera.worldX + screenX / (double) tileSize);
  98. }
  99. public int getWorldY(int screenY){
  100. return (int) (camera.worldY + screenY / (double) tileSize);
  101. }
  102. public GameController getGameController() {
  103. if(gameController == null){
  104. gameController = new GameController();
  105. }
  106. return gameController;
  107. }
  108. }