| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package view;
- import controller.GameController;
- import controller.GameMouseListener;
- import controller.InteractiveController;
- import controller.MouseWheelZoom;
- import model.GameSaver;
- import model.Inventory;
- import view.entity.EntityManager;
- import view.popUpMenu.PopupManager;
- import view.tile.TileManager;
- import util.GAMESTATE;
- import javax.swing.*;
- import java.awt.*;
- import java.util.ArrayList;
- import java.util.Arrays;
- public class GamePanel extends JPanel{
- //Screen Settings
- public final int originalTileSize = 16;
- public final static int scale = 4;
- int fps = 60;
- public GameController gameController;
- 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 static int maxWorldCol = 100;
- public final static int maxWorldRow = 100;
- //System
- public UI ui = new UI(this);
- private Graphics2D g2;
- // Game State
- public GAMESTATE gameState;
- public TileManager tileManager;
- public EntityManager entityManager;
- private PopupManager popupManager;
- 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);
- this.entityManager = new EntityManager(this);
- this.popupManager = new PopupManager(this, new ArrayList<>(Arrays.asList(tileManager, entityManager)));
- Inventory inventory = gameController.getModel().getInventory();
- this.inventoryView = new InventoryView(inventory);
- GameMouseListener mdl = new GameMouseListener(controller, this, camera);
- this.addMouseListener(mdl);
- this.addMouseMotionListener(mdl);
- this.addMouseWheelListener(new MouseWheelZoom(controller));
- 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 loadMap(String worldPath){
- tileManager.loadMap(worldPath);
- }
- public void zoomInOut(int i) {
- if (gameState != GAMESTATE.PLAY) {
- return;
- }
- int oldTileSize = tileSize;
- int oldWorldWidth = oldTileSize * maxWorldCol;
- int oldWorldHeight = oldTileSize * maxWorldRow;
- int minTileSize = originalTileSize * scale / 4;
- int maxTileSize = originalTileSize * scale;
- // Only adjust tileSize within allowed bounds
- int newTileSize = tileSize + i;
- if (newTileSize < minTileSize || newTileSize > maxTileSize) {
- return;
- }
- tileSize = newTileSize;
- int newWorldWidth = tileSize * maxWorldCol;
- int newWorldHeight = tileSize * maxWorldRow;
- tileManager.resize(tileSize);
- entityManager.resize(tileSize);
- // Adjust camera position relative to the new scale
- double widthMultiplier = (double) newWorldWidth / oldWorldWidth;
- double heightMultiplier = (double) newWorldHeight / oldWorldHeight;
- camera.worldX = (int)(camera.worldX * widthMultiplier);
- camera.worldY = (int)(camera.worldY * heightMultiplier);
- }
- public void closeMenus(){
- ui.closeMenus();
- }
- public InventoryView getInventoryView(){
- return inventoryView;
- }
- @Override
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- g2 = (Graphics2D) g;
- tileManager.draw(g2);
- entityManager.draw(g2);
- popupManager.drawPopups(g2);
- if (gameState == GAMESTATE.INVENTORY) {
- inventoryView.drawInventoryOverlay(g2);
- }
- if (gameState == GAMESTATE.QUIT) {
- GameSaver.saveGame(gameController);
- System.exit(0);
- }
- ui.draw(g2);
- g2.dispose();
- }
- public void generateNewWorld() {
- tileManager.generateNewWorld();
- }
- public double getZoom() {
- return originalTileSize/tileSize;
- }
- }
|