package controller.tiles.interactive; import controller.GameController; import controller.InteractiveController; import model.tiles.InteractiveTileModel; import view.Camera; import view.popUpMenu.PopupMenu; import view.tile.ONCLICKTYPE; import view.tile.interactive.InteractiveTileView; import java.awt.*; public abstract class InteractiveTileController implements InteractiveController { 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.getWidth(); double mouseWorldGridY = (camera.worldY + mouseScreenY - camera.screenY) / view.getHeight(); boolean clicked = mouseWorldGridX == model.getWorldGridX() && mouseWorldGridY == model.getWorldGridY(); return clicked; } public void updateCoordinates(int screenX, int screenY){ view.updateCoordinates(screenX, screenY); } 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){ view.drawTile(g2); } public void drawPopup(Graphics2D g2){ if(onclicktype == ONCLICKTYPE.POPUP && clicked == true){ view.drawPopUp(screenXClick, screenYClick, g2); } } public boolean getClicked(){ return clicked; } public void unClick() { clicked = false; } public abstract void upgrade(); public abstract void collect(); public int getLevel() { return model.getLevel(); } }