| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package view;
- import controller.GameController;
- import controller.MouseListener;
- import controller.MouseWheelZoom;
- import model.GameSaver;
- import model.Inventory;
- import view.tile.TileManager;
- import util.GAMESTATE;
- import controller.KeyHandler;
- import view.util.screenCoordinatesToWorld;
- import javax.swing.*;
- import java.awt.*;
- public class GamePanel extends JPanel implements screenCoordinatesToWorld {
- //Screen Settings
- final static int originalTileSize = 16;
- final static int scale = 4;
- int fps = 60;
- public GameController gameController;
- public static int static_TileSize = originalTileSize * scale;
- public int tileSize = originalTileSize * scale;
- public int maxScreenCol = 16;
- public int maxScreenRow = 12;
- public int screenWidth = tileSize * maxScreenCol;
- public int screenHeight = tileSize * maxScreenRow;
- // World Settings
- public final int maxWorldCol = 50;
- public final int maxWorldRow = 50;
- public final int worldWidth = tileSize * maxWorldCol;
- public final int worldHeight = tileSize * maxWorldRow;
- //System
- public UI ui = new UI(this);
- // Game State
- public GAMESTATE gameState;
- public TileManager tileManager;
- private InventoryView inventoryView;
- public Camera camera;
- public GamePanel(GameController controller) {
- this.gameController = controller; // get from controller
- this.camera = new Camera(this, controller.getKeyHandler());
- this.tileManager = new TileManager(this);
- Inventory inventory = gameController.getModel().getInventory();
- this.inventoryView = new InventoryView(inventory);
- MouseListener mdl = new MouseListener(controller, this, camera, tileManager);
- this.addMouseListener(mdl);
- this.addMouseMotionListener(mdl);
- this.addMouseWheelListener(new MouseWheelZoom(this));
- this.setPreferredSize(new Dimension(screenWidth, screenHeight));
- this.setBackground(Color.BLACK);
- this.setDoubleBuffered(true);
- this.addKeyListener(controller.getKeyHandler()); // now safe
- this.setFocusable(true);
- gameState = GAMESTATE.PLAY;
- }
- public void zoomInOut(int i){
- if(gameState != GAMESTATE.PLAY){
- return;
- }
- int oldWorldWidth = tileSize * maxWorldCol;
- if((tileSize >= originalTileSize*scale/4 && i < 0) || (tileSize < (originalTileSize * scale) && i > 0)){
- tileSize += i;
- }
- int newWorldWidth = tileSize * maxWorldCol;
- double multiplier = (double)newWorldWidth/oldWorldWidth;
- double newCameraWorldX = camera.worldX * multiplier;
- double newCameraWorldY = camera.worldY * multiplier;
- camera.worldX = (int) newCameraWorldX;
- camera.worldY = (int) newCameraWorldY;
- }
- public InventoryView getInventoryView(){
- return inventoryView;
- }
- @Override
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- Graphics2D g2 = (Graphics2D) g;
- tileManager.draw(g2);
- camera.draw(g2);
- if (gameState == GAMESTATE.INVENTORY) {
- inventoryView.drawInventoryOverlay(g2);
- }
- if (gameState == GAMESTATE.QUIT) {
- GameSaver.saveGame(gameController);
- System.exit(0);
- }
- if(gameState == GAMESTATE.PLAY){
- ui.drawHut(g2);
- }
- ui.draw(g2);
- g2.dispose();
- }
- public void update(){
- if(gameState == GAMESTATE.PLAY || gameState == GAMESTATE.INVENTORY){
- camera.update();
- }
- }
- public int getWorldX(int screenX){
- return (int) (camera.worldX + screenX / (double) tileSize);
- }
- public int getWorldY(int screenY){
- return (int) (camera.worldY + screenY / (double) tileSize);
- }
- public GameController getGameController() {
- if(gameController == null){
- gameController = new GameController();
- }
- return gameController;
- }
- }
|