浏览代码

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

Jan 6 月之前
父节点
当前提交
fcabbdae90
共有 31 个文件被更改,包括 524 次插入287 次删除
  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");
+    }
+
+}