Selaa lähdekoodia

Refactoring von InteractiveTiles und besseres Rendering für PopupMenus. Damit auch Refactoring für alle Unterklassen von InteractiveTiles.

Jan 10 kuukautta sitten
vanhempi
säilyke
fcabbdae90
31 muutettua tiedostoa jossa 524 lisäystä ja 287 poistoa
  1. 32 18
      src/main/java/controller/GameController.java
  2. 4 0
      src/main/java/controller/VillagerController.java
  3. 23 0
      src/main/java/controller/tiles/interactive/AnimalEnclosureController.java
  4. 23 0
      src/main/java/controller/tiles/interactive/BarracksController.java
  5. 97 0
      src/main/java/controller/tiles/interactive/InteractiveTileController.java
  6. 18 0
      src/main/java/controller/tiles/interactive/IronMineController.java
  7. 19 0
      src/main/java/controller/tiles/interactive/LighthouseController.java
  8. 25 0
      src/main/java/controller/tiles/interactive/MineController.java
  9. 24 0
      src/main/java/controller/tiles/interactive/SawmillController.java
  10. 8 0
      src/main/java/model/GameModel.java
  11. 4 0
      src/main/java/model/entity/Villager.java
  12. 0 4
      src/main/java/model/tiles/InteractiveTile.java
  13. 39 0
      src/main/java/model/tiles/InteractiveTileModel.java
  14. 4 3
      src/main/java/view/UI.java
  15. 4 0
      src/main/java/view/entity/VillagerView.java
  16. 0 1
      src/main/java/view/popUpMenu/PopupMenu.java
  17. 0 85
      src/main/java/view/tile/InteractiveTile.java
  18. 14 8
      src/main/java/view/tile/TileManager.java
  19. 0 27
      src/main/java/view/tile/interactive/AnimalEnclosure.java
  20. 20 0
      src/main/java/view/tile/interactive/AnimalEnclosureView.java
  21. 0 27
      src/main/java/view/tile/interactive/Barracks.java
  22. 19 0
      src/main/java/view/tile/interactive/BarracksView.java
  23. 65 0
      src/main/java/view/tile/interactive/InteractiveTileView.java
  24. 0 27
      src/main/java/view/tile/interactive/IronMine.java
  25. 18 0
      src/main/java/view/tile/interactive/IronMineView.java
  26. 0 29
      src/main/java/view/tile/interactive/Lighthouse.java
  27. 21 0
      src/main/java/view/tile/interactive/LighthouseView.java
  28. 0 30
      src/main/java/view/tile/interactive/Mine.java
  29. 22 0
      src/main/java/view/tile/interactive/MineView.java
  30. 0 28
      src/main/java/view/tile/interactive/Sawmill.java
  31. 21 0
      src/main/java/view/tile/interactive/SawmillView.java

+ 32 - 18
src/main/java/controller/GameController.java

@@ -1,15 +1,15 @@
 package controller;
 
+import controller.tiles.interactive.*;
+import controller.tiles.interactive.AnimalEnclosureController;
 import model.GameModel;
 import model.GameSaver;
 import model.Item;
 import model.items.ITEM_NAME;
-import model.tiles.InteractiveTile;
+import model.tiles.InteractiveTileModel;
 import util.GAMESTATE;
 import view.GamePanel;
-import view.tile.interactive.*;
 
-import java.awt.*;
 import java.io.Serializable;
 import java.util.ArrayList;
 
@@ -22,35 +22,48 @@ public class GameController implements Runnable, Serializable {
     private transient GamePanel view;
     private boolean running = true;
     private int fps = 60;
-    public transient ArrayList<InteractiveTile> interactiveTiles;
+    public transient ArrayList<InteractiveTileController> interactiveTileControllers;
 
     public GameController() {
         this.keyHandler = new KeyHandler(this);
         this.gameModel = new GameModel();
         this.view = new GamePanel(this);
-        interactiveTiles = new ArrayList<>();
+        interactiveTileControllers = new ArrayList<>();
         setStartInventory();
         setupInteractiveTiles();
     }
 
     private void setupInteractiveTiles() {
-        Lighthouse lighthouse = new Lighthouse(24, 20, this);
-        view.tileManager.addInteractiveTile(lighthouse);
 
-        Mine mine = new Mine(25, 20, this);
-        view.tileManager.addInteractiveTile(mine);
 
-        Barracks barracks = new Barracks(26, 20, this);
-        view.tileManager.addInteractiveTile(barracks);
+        LighthouseController lighthouse = new LighthouseController(this, setupInteractiveTileModel(24, 20));
+        addInteractiveTile(lighthouse);
 
-        IronMine ironMine = new IronMine(27, 20, this);
-        view.tileManager.addInteractiveTile(ironMine);
+        MineController mineController = new MineController(this, setupInteractiveTileModel(25,20));
+        addInteractiveTile(mineController);
 
-        AnimalEnclosure animalEnclosure = new AnimalEnclosure(28, 20, this);
-        view.tileManager.addInteractiveTile(animalEnclosure);
+        BarracksController barracksController = new BarracksController(this, setupInteractiveTileModel(26, 20));
+        addInteractiveTile(barracksController);
 
-        Sawmill sawmill = new Sawmill(29, 20, this);
-        view.tileManager.addInteractiveTile(sawmill);
+        IronMineController ironMineController = new IronMineController(this, setupInteractiveTileModel(27, 20));
+        addInteractiveTile(ironMineController);
+
+        AnimalEnclosureController animal = new AnimalEnclosureController(this, setupInteractiveTileModel(28, 20));
+        addInteractiveTile(animal);
+
+        SawmillController sawmillController = new SawmillController(this, setupInteractiveTileModel(29, 20));
+        addInteractiveTile(sawmillController);
+
+    }
+
+    private void addInteractiveTile(InteractiveTileController controller) {
+        getView().tileManager.addInteractiveTile(controller);
+    }
+
+    public InteractiveTileModel setupInteractiveTileModel(int worldGridX, int worldGridY){
+        InteractiveTileModel model = new InteractiveTileModel(worldGridX, worldGridY, getView().tileSize, getView().tileSize);
+        gameModel.addModel(model);
+        return model;
     }
 
     private void setStartInventory() {
@@ -84,6 +97,7 @@ public class GameController implements Runnable, Serializable {
             GameSaver.saveGame(this);
             view.gameState = GAMESTATE.PLAY;
         }
+
     }
 
     @Override
@@ -156,7 +170,7 @@ public class GameController implements Runnable, Serializable {
 
 
     public void loadInteractiveTiles() {
-        interactiveTiles = new ArrayList<>();
+        interactiveTileControllers = new ArrayList<>();
         setupInteractiveTiles();
     }
 }

+ 4 - 0
src/main/java/controller/VillagerController.java

@@ -0,0 +1,4 @@
+package controller;
+
+public class VillagerController {
+}

+ 23 - 0
src/main/java/controller/tiles/interactive/AnimalEnclosureController.java

@@ -0,0 +1,23 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.AnimalEnclosureView;
+import view.tile.interactive.InteractiveTileView;
+
+import java.awt.*;
+
+public class AnimalEnclosureController extends InteractiveTileController {
+
+    public AnimalEnclosureController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new AnimalEnclosureView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+
+}

+ 23 - 0
src/main/java/controller/tiles/interactive/BarracksController.java

@@ -0,0 +1,23 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.BarracksView;
+import view.tile.interactive.InteractiveTileView;
+import view.tile.interactive.LighthouseView;
+
+import java.awt.*;
+
+public class BarracksController extends InteractiveTileController {
+
+    public BarracksController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new BarracksView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+}

+ 97 - 0
src/main/java/controller/tiles/interactive/InteractiveTileController.java

@@ -0,0 +1,97 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.tile.ONCLICKTYPE;
+import view.tile.interactive.InteractiveTileView;
+
+import java.awt.*;
+
+public class InteractiveTileController {
+    private GameController gameController;
+    private InteractiveTileView view;
+    private InteractiveTileModel model;
+    protected ONCLICKTYPE onclicktype;
+
+    private boolean clicked = false;
+    private int screenXClick, screenYClick;
+
+    public InteractiveTileController(InteractiveTileModel model, InteractiveTileView view, GameController gameController){
+        this.view = view;
+        this.model = model;
+        this.gameController =  gameController;
+    }
+
+    public void setModel(InteractiveTileModel model){
+        this.model = model;
+    }
+
+    public void setView(InteractiveTileView view){
+        this.view = view;
+    }
+
+    public boolean isClicked(int mouseScreenX, int mouseScreenY, Camera camera) {
+        double mouseWorldGridX = (camera.worldX + mouseScreenX - camera.screenX) / view.tileManager.getTileSize();
+        double mouseWorldGridY = (camera.worldY + mouseScreenY - camera.screenY) / view.tileManager.getTileSize();
+
+        return mouseWorldGridX == model.getWorldGridX() &&  mouseWorldGridY == model.getWorldGridY();
+    }
+
+    public int getTileSize(){
+        return gameController.getView().tileSize;
+    }
+
+    public void updateCoordinates(int screenX, int screnY){
+        view.updateCoordinates(screenX, screnY);
+    }
+
+    public void setOnClick(Runnable onClick){
+        onclicktype = ONCLICKTYPE.RUNNABLE;
+        view.setOnClick(onClick);
+    }
+
+    public PopupMenu getPopupMenu(){
+        return view.getPopupMenu();
+    }
+
+    public void setPopupOnClick(PopupMenu popup){
+        onclicktype = ONCLICKTYPE.POPUP;
+        view.setPopupOnClick(popup);
+    }
+
+    public void click(int screenX, int screenY) {
+        if(onclicktype == ONCLICKTYPE.RUNNABLE){
+            view.runOnClick();
+        }else{
+            screenXClick = screenX;
+            screenYClick = screenY;
+            clicked = true;
+        }
+    }
+
+    public InteractiveTileModel getModel(){
+        return model;
+    }
+
+    public ONCLICKTYPE getOnClickType(){
+        return onclicktype;
+    }
+    public void drawTile(Graphics2D g2, Camera camera){
+        view.drawTile(g2, camera);
+    }
+    public void drawPopup(Graphics2D g2, Camera camera){
+        if(onclicktype == ONCLICKTYPE.POPUP &&  clicked == true){
+            view.drawPopUp(screenXClick, screenYClick, g2);
+        }
+    }
+
+    public boolean getClicked(){
+        return clicked;
+    }
+
+    public void unClick() {
+        clicked = false;
+    }
+}

+ 18 - 0
src/main/java/controller/tiles/interactive/IronMineController.java

@@ -0,0 +1,18 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.IronMineView;
+
+public class IronMineController extends InteractiveTileController {
+
+    public IronMineController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new IronMineView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+}

+ 19 - 0
src/main/java/controller/tiles/interactive/LighthouseController.java

@@ -0,0 +1,19 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.LighthouseView;
+
+public class LighthouseController extends InteractiveTileController {
+
+    public LighthouseController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new LighthouseView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+
+}

+ 25 - 0
src/main/java/controller/tiles/interactive/MineController.java

@@ -0,0 +1,25 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.InteractiveTileView;
+import view.tile.interactive.LighthouseView;
+import view.tile.interactive.MineView;
+
+import java.awt.*;
+import java.io.Serializable;
+
+public class MineController extends InteractiveTileController{
+
+    public MineController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new MineView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+
+}

+ 24 - 0
src/main/java/controller/tiles/interactive/SawmillController.java

@@ -0,0 +1,24 @@
+package controller.tiles.interactive;
+
+import controller.GameController;
+import model.tiles.InteractiveTileModel;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+import view.tile.interactive.InteractiveTileView;
+import view.tile.interactive.LighthouseView;
+import view.tile.interactive.SawmillView;
+
+import java.awt.*;
+
+public class SawmillController extends InteractiveTileController {
+
+    public SawmillController(GameController gc, InteractiveTileModel model) {
+        super(model, null, gc);
+        setView(new SawmillView(gc, this));
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+    }
+
+}

+ 8 - 0
src/main/java/model/GameModel.java

@@ -1,9 +1,13 @@
 package model;
 
+import model.tiles.InteractiveTileModel;
+
 import java.io.Serializable;
+import java.util.ArrayList;
 
 public class GameModel implements Serializable {
     private Inventory inventory;
+    private ArrayList<InteractiveTileModel> models = new ArrayList<>();
 
     public GameModel() {
         inventory = new Inventory();
@@ -12,4 +16,8 @@ public class GameModel implements Serializable {
     public Inventory getInventory() {
         return inventory;
     }
+
+    public void addModel(InteractiveTileModel model) {
+        models.add(model);
+    }
 }

+ 4 - 0
src/main/java/model/entity/Villager.java

@@ -0,0 +1,4 @@
+package model.entity;
+
+public class Villager {
+}

+ 0 - 4
src/main/java/model/tiles/InteractiveTile.java

@@ -1,4 +0,0 @@
-package model.tiles;
-
-public class InteractiveTile {
-}

+ 39 - 0
src/main/java/model/tiles/InteractiveTileModel.java

@@ -0,0 +1,39 @@
+package model.tiles;
+
+public class InteractiveTileModel {
+    protected int worldGridX, worldGridY;
+    protected int width, height;
+    private boolean clicked;
+
+    public InteractiveTileModel(int worldGridX, int worldGridY, int width, int height) {
+        this.worldGridX = worldGridX;
+        this.worldGridY = worldGridY;
+        this.width = width;
+        this.height = height;
+        this.clicked = false;
+    }
+
+    public int getWorldGridX() {
+        return worldGridX;
+    }
+
+    public int getWorldGridY() {
+        return worldGridY;
+    }
+
+    public int getWidth() {
+        return width;
+    }
+
+    public int getHeight() {
+        return height;
+    }
+
+    public boolean isClicked() {
+        return clicked;
+    }
+
+    public void setClicked(boolean clicked) {
+        this.clicked = clicked;
+    }
+}

+ 4 - 3
src/main/java/view/UI.java

@@ -1,10 +1,11 @@
 package view;
 
+import controller.tiles.interactive.InteractiveTileController;
 import util.GAMESTATE;
 import util.Translator;
 import view.components.Button;
 import view.popUpMenu.PopupMenu;
-import view.tile.InteractiveTile;
+import view.tile.interactive.InteractiveTileView;
 import view.tile.ONCLICKTYPE;
 
 import java.awt.*;
@@ -39,7 +40,7 @@ public class UI {
         }
     }
     public void handleClick(int screenX, int screenY){
-        for (InteractiveTile tile : gp.gameController.interactiveTiles) {
+        for (InteractiveTileController tile : gp.gameController.interactiveTileControllers) {
 
             if(tile.getClicked() && tile.getOnClickType() == ONCLICKTYPE.POPUP){
                 PopupMenu popupMenu = tile.getPopupMenu();
@@ -115,7 +116,7 @@ public class UI {
     }
 
     public void closeMenus() {
-        for (InteractiveTile tile : gp.gameController.interactiveTiles) {
+        for (InteractiveTileController tile : gp.gameController.interactiveTileControllers) {
             tile.unClick();
         }
     }

+ 4 - 0
src/main/java/view/entity/VillagerView.java

@@ -0,0 +1,4 @@
+package view.entity;
+
+public class VillagerView {
+}

+ 0 - 1
src/main/java/view/popUpMenu/PopupMenu.java

@@ -27,7 +27,6 @@ public abstract class PopupMenu implements Serializable {
         g2.fillRoundRect(x,y, overlayWidth, overlayHeight, 15, 15);
         g2.setColor(Color.WHITE);
         g2.drawRoundRect(x,y,overlayWidth,overlayHeight, 15, 15);
-
         for (Button button : buttonArrayList){
             button.setRelativeScreenCoordinates(x,y);
             button.draw(g2);

+ 0 - 85
src/main/java/view/tile/InteractiveTile.java

@@ -1,85 +0,0 @@
-package view.tile;
-
-import model.Tile;
-import java.awt.*;
-import java.io.Serializable;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-
-public abstract class InteractiveTile extends Tile implements Serializable {
-    public int worldGridX, worldGridY;
-    public int screenX, screenY;
-    protected int width, height;
-    protected Runnable onClick;
-    protected GameController gameController;
-    protected ONCLICKTYPE onclicktype;
-    private PopupMenu popup;
-    private boolean clicked = false;
-    private int screenXClick, screenYClick;
-
-    public InteractiveTile(int worldGridX, int worldGridY, int width, int height, GameController gc) {
-        this.worldGridX = worldGridX;
-        this.worldGridY = worldGridY;
-
-        this.screenX = gc.getView().tileManager.worldColToScreenX(worldGridX);
-        this.screenY = gc.getView().tileManager.worldRowToScreenY(worldGridY);
-
-        this.width = width;
-        this.height = height;
-        this.gameController = gc;
-    }
-
-    public void setPopupOnClick(PopupMenu popup){
-        onclicktype = ONCLICKTYPE.POPUP;
-        this.popup = popup;
-    }
-
-    public void setOnClick(Runnable onClick){
-        onclicktype = ONCLICKTYPE.RUNNABLE;
-        this.onClick = onClick;
-    }
-    public void click(int screenX, int screenY) {
-        if(onclicktype == ONCLICKTYPE.RUNNABLE){
-            onClick.run();
-        }else{
-            screenXClick = screenX;
-            screenYClick = screenY;
-            clicked = true;
-        }
-    }
-
-    public void updateCoordinates(){
-        this.screenX = gameController.getView().tileManager.worldColToScreenX(worldGridX);
-        this.screenY = gameController.getView().tileManager.worldRowToScreenY(worldGridY);
-    }
-    public boolean isClicked(int mouseScreenX, int mouseScreenY, Camera camera) {
-        double mouseWorldGridX = (camera.worldX + mouseScreenX - camera.screenX) / gameController.getView().tileSize;
-        double mouseWorldGridY = (camera.worldY + mouseScreenY - camera.screenY) / gameController.getView().tileSize;
-
-        return mouseWorldGridX == worldGridX &&  mouseWorldGridY == worldGridY;
-    }
-
-    public abstract void drawTile(Graphics2D g2, Camera camera);
-
-    public void draw(Graphics2D g2, Camera camera){
-        drawTile(g2, camera);
-        if(onclicktype == ONCLICKTYPE.POPUP && clicked == true){
-            popup.draw(screenXClick, screenYClick, g2);
-        }
-    }
-    public ONCLICKTYPE getOnClickType(){
-        return onclicktype;
-    }
-    public PopupMenu getPopupMenu(){
-        return popup;
-    }
-
-    public boolean getClicked(){
-        return clicked;
-    }
-    public void unClick() {
-        clicked = false;
-    }
-}

+ 14 - 8
src/main/java/view/tile/TileManager.java

@@ -1,7 +1,9 @@
 package view.tile;
 
+import controller.tiles.interactive.InteractiveTileController;
 import model.Tile;
 import model.tiles.BackgroundTile;
+import model.tiles.InteractiveTileModel;
 import view.GamePanel;
 
 import java.awt.*;
@@ -9,15 +11,12 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
 
 public class TileManager {
 
     GamePanel gamePanel;
     public Tile[] tile;
-    private int MaxTileNumber;
     public int[][] mapTileNum;
-    public Tile[][] mapTiles;
     public int mapTileOverflow = 1;
 
     public TileManager(GamePanel gp){
@@ -27,9 +26,12 @@ public class TileManager {
         getTileImage();
         loadMap("/maps/world01.txt");
     }
+    public int getTileSize(){
+        return gamePanel.tileSize;
+    }
 
-    public void addInteractiveTile(InteractiveTile tile) {
-        gamePanel.gameController.interactiveTiles.add(tile);
+    public void addInteractiveTile(InteractiveTileController tile) {
+        gamePanel.gameController.interactiveTileControllers.add(tile);
     }
 
     public void loadMap(String filePath){
@@ -93,9 +95,13 @@ public class TileManager {
                 worldRow++;
             }
         }
-        for (InteractiveTile tile : gamePanel.gameController.interactiveTiles) {
-            tile.updateCoordinates();
-            tile.draw(g2, gamePanel.camera);
+        for (InteractiveTileController tile : gamePanel.gameController.interactiveTileControllers) {
+            InteractiveTileModel model = tile.getModel();
+            tile.updateCoordinates(worldColToScreenX(model.getWorldGridX()), worldRowToScreenY(model.getWorldGridY()));
+            tile.drawTile(g2, gamePanel.camera);
+        }
+        for (InteractiveTileController tile : gamePanel.gameController.interactiveTileControllers) {
+            tile.drawPopup(g2, gamePanel.camera);
         }
 
     }

+ 0 - 27
src/main/java/view/tile/interactive/AnimalEnclosure.java

@@ -1,27 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-
-public class AnimalEnclosure extends InteractiveTile {
-
-    public AnimalEnclosure(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/animalEnclosureTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-    }
-}

+ 20 - 0
src/main/java/view/tile/interactive/AnimalEnclosureView.java

@@ -0,0 +1,20 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+import java.awt.*;
+
+public class AnimalEnclosureView extends InteractiveTileView {
+
+    public AnimalEnclosureView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+        setImage("/tiles/animalEnclosureTest.png");
+    }
+}

+ 0 - 27
src/main/java/view/tile/interactive/Barracks.java

@@ -1,27 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-
-public class Barracks extends InteractiveTile {
-
-    public Barracks(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/barracksTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-    }
-}

+ 19 - 0
src/main/java/view/tile/interactive/BarracksView.java

@@ -0,0 +1,19 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+import java.awt.*;
+
+public class BarracksView extends InteractiveTileView {
+
+    public BarracksView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+        setImage("/tiles/barracksTest.png");
+        setPopupOnClick(popup);
+    }
+}

+ 65 - 0
src/main/java/view/tile/interactive/InteractiveTileView.java

@@ -0,0 +1,65 @@
+package view.tile.interactive;
+
+import controller.tiles.interactive.InteractiveTileController;
+import model.Tile;
+import java.awt.*;
+import java.io.Serializable;
+
+import controller.GameController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.tile.ONCLICKTYPE;
+import view.tile.TileManager;
+
+public abstract class InteractiveTileView extends Tile implements Serializable {
+
+    // ------ new --------
+    protected int screenX, screenY;
+    protected int width, height;
+    protected InteractiveTileController controller;
+    private PopupMenu popup;
+    protected Runnable onClick;
+    public TileManager tileManager;
+    // -------------------
+
+    public InteractiveTileView(int width, int height, InteractiveTileController controller, TileManager tileManager) {
+        // so it doesn't show up on screen
+        this.screenX = -100;
+        this.screenY = -100;
+        this.tileManager = tileManager;
+        this.width = width;
+        this.height = height;
+        this.controller = controller;
+    }
+
+    public InteractiveTileController getController(){
+        return controller;
+    }
+
+    public void updateCoordinates(int screenX, int screenY){
+        this.screenX = screenX;
+        this.screenY = screenY;
+    }
+    public void runOnClick(){
+        onClick.run();
+    }
+    public void setPopupOnClick(PopupMenu popup){
+        this.popup = popup;
+    }
+
+    public void setOnClick(Runnable onClick){
+        this.onClick = onClick;
+    }
+
+    public void drawTile(Graphics2D g2, Camera camera){
+        g2.drawImage(image, screenX, screenY, controller.getTileSize(), controller.getTileSize(), null);
+    }
+
+    public PopupMenu getPopupMenu(){
+        return popup;
+    }
+
+    public void drawPopUp(int screenXClick, int screenYClick, Graphics2D g2) {
+        popup.draw(screenXClick, screenYClick, g2);
+    }
+}

+ 0 - 27
src/main/java/view/tile/interactive/IronMine.java

@@ -1,27 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-
-public class IronMine extends InteractiveTile {
-
-    public IronMine(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/mineIronTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-    }
-}

+ 18 - 0
src/main/java/view/tile/interactive/IronMineView.java

@@ -0,0 +1,18 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import model.tiles.InteractiveTileModel;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+public class IronMineView extends InteractiveTileView {
+
+    public IronMineView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+        setImage("/tiles/mineIronTest.png");
+    }
+}

+ 0 - 29
src/main/java/view/tile/interactive/Lighthouse.java

@@ -1,29 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-
-public class Lighthouse extends InteractiveTile {
-
-    public Lighthouse(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/lighthouseTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-
-    }
-
-}

+ 21 - 0
src/main/java/view/tile/interactive/LighthouseView.java

@@ -0,0 +1,21 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+import java.awt.*;
+
+public class LighthouseView extends InteractiveTileView {
+
+    public LighthouseView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+        setImage("/tiles/lighthouseTest.png");
+    }
+
+}

+ 0 - 30
src/main/java/view/tile/interactive/Mine.java

@@ -1,30 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-import java.io.Serializable;
-
-public class Mine extends InteractiveTile implements Serializable {
-
-    public Mine(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/mineTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-
-    }
-
-}

+ 22 - 0
src/main/java/view/tile/interactive/MineView.java

@@ -0,0 +1,22 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+import java.awt.*;
+import java.io.Serializable;
+
+public class MineView extends InteractiveTileView {
+
+    public MineView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+        setImage("/tiles/mineTest.png");
+    }
+
+}

+ 0 - 28
src/main/java/view/tile/interactive/Sawmill.java

@@ -1,28 +0,0 @@
-package view.tile.interactive;
-
-import controller.GameController;
-import view.Camera;
-import view.popUpMenu.PopupMenu;
-import view.popUpMenu.UpgradeMenu;
-import view.tile.InteractiveTile;
-
-import java.awt.*;
-
-public class Sawmill extends InteractiveTile {
-
-    public Sawmill(int worldGridX, int worldGridY, GameController gc) {
-        super(worldGridX, worldGridY, gc.getView().tileSize, gc.getView().tileSize, gc);
-        PopupMenu popup = new UpgradeMenu(100, 100);
-
-        setPopupOnClick(popup);
-    }
-
-    @Override
-    public void drawTile(Graphics2D g2, Camera camera) {
-        int size = gameController.getView().tileSize;
-        g2.setColor(new Color(0, 0, 0, 160));
-        setImage("/tiles/sawmillTest.png");
-        g2.drawImage(image, screenX, screenY, gameController.getView().tileSize, gameController.getView().tileSize, null);
-    }
-
-}

+ 21 - 0
src/main/java/view/tile/interactive/SawmillView.java

@@ -0,0 +1,21 @@
+package view.tile.interactive;
+
+import controller.GameController;
+import controller.tiles.interactive.InteractiveTileController;
+import view.Camera;
+import view.popUpMenu.PopupMenu;
+import view.popUpMenu.UpgradeMenu;
+
+import java.awt.*;
+
+public class SawmillView extends InteractiveTileView {
+
+    public SawmillView(GameController gc, InteractiveTileController controller) {
+        super( gc.getView().tileSize, gc.getView().tileSize, controller, gc.getView().tileManager);
+        PopupMenu popup = new UpgradeMenu(100, 100);
+
+        setPopupOnClick(popup);
+        setImage("/tiles/sawmillTest.png");
+    }
+
+}