|
|
@@ -1,9 +1,12 @@
|
|
|
package controller;
|
|
|
|
|
|
+import controller.entity.EntityController;
|
|
|
+import controller.entity.VillagerController;
|
|
|
import controller.tiles.interactive.*;
|
|
|
import controller.tiles.interactive.upgradeable.*;
|
|
|
import model.GameModel;
|
|
|
import model.GameSaver;
|
|
|
+import model.entity.EntityModel;
|
|
|
import model.items.Item;
|
|
|
import model.items.ITEM_NAME;
|
|
|
import model.tiles.InteractiveTileModel;
|
|
|
@@ -17,27 +20,28 @@ public class GameController implements Runnable, Serializable {
|
|
|
public final String worldPath = "gamefiles/worlds/world_0.txt";
|
|
|
private GameModel gameModel;
|
|
|
private boolean running = true;
|
|
|
- private int fps = 60;
|
|
|
+ public final int fps = 60;
|
|
|
|
|
|
|
|
|
private transient KeyHandler keyHandler;
|
|
|
private transient Thread gameThread;
|
|
|
private transient GamePanel view;
|
|
|
+ public transient ArrayList<EntityController> entityControllers;
|
|
|
public transient ArrayList<InteractiveTileController> interactiveTileControllers;
|
|
|
|
|
|
public GameController() {
|
|
|
this.keyHandler = new KeyHandler(this);
|
|
|
this.gameModel = new GameModel();
|
|
|
this.view = new GamePanel(this);
|
|
|
+ entityControllers = new ArrayList<>();
|
|
|
interactiveTileControllers = new ArrayList<>();
|
|
|
setStartInventory();
|
|
|
setupInteractiveTiles();
|
|
|
+ setupEntities();
|
|
|
view.loadMap(worldPath);
|
|
|
}
|
|
|
|
|
|
private void setupInteractiveTiles() {
|
|
|
-
|
|
|
-
|
|
|
LighthouseController lighthouse = new LighthouseController(this, setupInteractiveTileModel(24, 20));
|
|
|
addInteractiveTile(lighthouse);
|
|
|
|
|
|
@@ -55,16 +59,30 @@ public class GameController implements Runnable, Serializable {
|
|
|
|
|
|
SawmillController sawmillController = new SawmillController(this, setupInteractiveTileModel(29, 20));
|
|
|
addInteractiveTile(sawmillController);
|
|
|
+ }
|
|
|
|
|
|
+ private void setupEntities(){
|
|
|
+ VillagerController villager = new VillagerController(this, setupEntityModel(22,20));
|
|
|
+ addEntity(villager);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addEntity(EntityController entityController) {
|
|
|
+ entityControllers.add(entityController);
|
|
|
}
|
|
|
|
|
|
private void addInteractiveTile(InteractiveTileController controller) {
|
|
|
- getView().tileManager.addInteractiveTile(controller);
|
|
|
+ interactiveTileControllers.add(controller);
|
|
|
+ }
|
|
|
+
|
|
|
+ private EntityModel setupEntityModel(int worldX, int worldY) {
|
|
|
+ EntityModel model = new EntityModel(worldX, worldY, getView().tileSize, getView().tileSize);
|
|
|
+ gameModel.addEntityModel(model);
|
|
|
+ return model;
|
|
|
}
|
|
|
|
|
|
public InteractiveTileModel setupInteractiveTileModel(int worldGridX, int worldGridY){
|
|
|
InteractiveTileModel model = new InteractiveTileModel(worldGridX, worldGridY, getView().tileSize, getView().tileSize);
|
|
|
- gameModel.addModel(model);
|
|
|
+ gameModel.addInteractiveTileModel(model);
|
|
|
return model;
|
|
|
}
|
|
|
private void setStartInventory() {
|
|
|
@@ -76,6 +94,7 @@ public class GameController implements Runnable, Serializable {
|
|
|
public void setView(GamePanel gp){
|
|
|
view = gp;
|
|
|
}
|
|
|
+
|
|
|
public void handleInventoryClick(int x, int y) {
|
|
|
int slot = view.getInventoryView().getClickedInventorySlot(x, y);
|
|
|
gameModel.getInventory().select(slot);
|
|
|
@@ -119,6 +138,7 @@ public class GameController implements Runnable, Serializable {
|
|
|
if (delta >= 1) {
|
|
|
update(); // Logic update
|
|
|
view.repaint(); // Triggers paintComponent in view
|
|
|
+ moveEntities();
|
|
|
delta--;
|
|
|
drawCount++;
|
|
|
}
|
|
|
@@ -129,6 +149,13 @@ public class GameController implements Runnable, Serializable {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private void moveEntities() {
|
|
|
+ for(EntityController entityController : entityControllers){
|
|
|
+ entityController.convertRepaintSpeedToMovementLogic();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
public void zoomInOut(int i) {
|
|
|
view.zoomInOut(i);
|
|
|
view.closeMenus();
|
|
|
@@ -174,6 +201,7 @@ public class GameController implements Runnable, Serializable {
|
|
|
interactiveTileControllers = new ArrayList<>();
|
|
|
setupInteractiveTiles();
|
|
|
}
|
|
|
+
|
|
|
public void loadWorld(){
|
|
|
if(view == null) this.view = new GamePanel(this);
|
|
|
view.loadMap(worldPath);
|