From fc3acaba558139ea9340f478afc7c2077f366fdf Mon Sep 17 00:00:00 2001
From: Yanis O <oualanyanis01@gmail.com>
Date: Sat, 23 Nov 2024 21:19:33 +0100
Subject: [PATCH] [Ajout] Rocaille (Rockery)

---
 src/main/java/app/SimulatorApplication.java  |  8 +-
 src/main/java/controller/Controller.java     |  4 +-
 src/main/java/model/Fire.java                | 12 +++
 src/main/java/model/FireFighter.java         |  6 ++
 src/main/java/model/FireFighterScenario.java |  2 +-
 src/main/java/model/Rockery.java             | 78 ++++++++++++++++++++
 6 files changed, 104 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/model/Rockery.java

diff --git a/src/main/java/app/SimulatorApplication.java b/src/main/java/app/SimulatorApplication.java
index e599a54..14f8fbb 100644
--- a/src/main/java/app/SimulatorApplication.java
+++ b/src/main/java/app/SimulatorApplication.java
@@ -13,10 +13,10 @@ import javafx.stage.Stage;
 public class SimulatorApplication extends javafx.application.Application {
   private static final String VIEW_RESOURCE_PATH = "/view/view.fxml";
   private static final String APP_NAME = "Firefighter simulator";
-  private static final int ROW_COUNT = 80;
-  private static final int COLUMN_COUNT = 80;
-  private static final int BOX_WIDTH = 8;
-  private static final int BOX_HEIGHT = 8;
+  private static final int ROW_COUNT = 50;
+  private static final int COLUMN_COUNT = 50;
+  private static final int BOX_WIDTH = 15;
+  private static final int BOX_HEIGHT = 15;
   public static final int INITIAL_FIRE_COUNT = 6;
   public static final int INITIAL_FIREFIGHTER_COUNT = 32;
   public static final int INITIAL_MOTORIZED_FIREFIGHTER_COUNT = 10;
diff --git a/src/main/java/controller/Controller.java b/src/main/java/controller/Controller.java
index f77e348..0e99dcf 100644
--- a/src/main/java/controller/Controller.java
+++ b/src/main/java/controller/Controller.java
@@ -27,6 +27,7 @@ import model.FireFighter;
 import model.FireFighterScenario;
 import model.MotorizedFireFighter;
 import model.Mountain;
+import model.Rockery;
 import model.Square;
 import util.Position;
 import view.Grid;
@@ -131,10 +132,11 @@ public class Controller {
     Map<EntityFactory, Integer> entityCounts = new HashMap<EntityFactory, Integer>();
 
     entityCounts.put((pos, b) -> new Fire(pos), initialFireCount);
-    entityCounts.put((pos, b) -> new FireFighter(pos, b), initialFirefighterCount);
+    entityCounts.put((pos, b) -> new FireFighter(pos,b), initialFirefighterCount);
     entityCounts.put((pos, b) -> new MotorizedFireFighter(pos, b), initialMotorizedFirefightersCount);
     entityCounts.put((pos, b) -> new Cloud(pos, b), initialcloudCount);
     entityCounts.put((pos, b) -> new Mountain(pos), initialmountaincount);
+    entityCounts.put((pos, b) -> new Rockery(pos), 30);
 
     model.placeInitialEntities(entityCounts);
     this.setModel(model);
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
index 0ff0b18..3324819 100644
--- a/src/main/java/model/Fire.java
+++ b/src/main/java/model/Fire.java
@@ -3,6 +3,7 @@ package model;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 import javafx.scene.paint.Color;
 import util.Position;
@@ -59,6 +60,17 @@ public class Fire implements Entity {
             if (board.doesSquareContainEntity(p, Road.class)) {
                 continue;
             }
+            if (board.doesSquareContainEntity(p, Rockery.class)) {
+                Optional<Entity> e = board.getStates(p).getEntities().stream().findFirst();
+                if(e != null && e.isPresent() && e.get() instanceof Rockery){
+                    Rockery rockery = (Rockery) e.get();
+                    if(rockery.getBurn() < 4){
+                        rockery.incrementBurn();
+                        continue;
+                    }
+                    
+                }
+            }
 
             // Add new Fire to the board
             board.addEntityAtSquare(new Fire(p), p);
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
index bc070cb..cf4307b 100644
--- a/src/main/java/model/FireFighter.java
+++ b/src/main/java/model/FireFighter.java
@@ -79,6 +79,12 @@ public class FireFighter implements Entity {
         List<Position> extinguishedPositions = new ArrayList<>();
         for (Position p : adjacentPositions) {
             if (b.doesSquareContainEntity(p, Fire.class)) {
+                if(b.doesSquareContainEntity(p, Rockery.class)){
+                    Rockery rockery = (Rockery) b.getStates(p).getEntities().stream()
+                    .filter(Rockery.class::isInstance)
+                    .findFirst().get();
+                    rockery.resetBurn();
+                }
                 b.getStates(p).getEntities().removeIf(element -> element instanceof Fire);
                 // Update age for EmptyEntity if needed
                 b.getStates(p).getEntities().forEach(e -> {
diff --git a/src/main/java/model/FireFighterScenario.java b/src/main/java/model/FireFighterScenario.java
index 8be7643..66e0be1 100644
--- a/src/main/java/model/FireFighterScenario.java
+++ b/src/main/java/model/FireFighterScenario.java
@@ -247,7 +247,7 @@ public class FireFighterScenario extends EntityScenario implements Board<Square>
     for(Position p : snake){
       List<Entity> entitiesAtSquare = List.copyOf(getStates(p).getEntities());
       for(Entity e: entitiesAtSquare){
-        if(e instanceof Mountain){
+        if(e instanceof Mountain || e instanceof Rockery || e instanceof Fire){
           clearCaseFrom(e, e.getPosition());
         }
       }
diff --git a/src/main/java/model/Rockery.java b/src/main/java/model/Rockery.java
new file mode 100644
index 0000000..6aebd27
--- /dev/null
+++ b/src/main/java/model/Rockery.java
@@ -0,0 +1,78 @@
+package model;
+
+import java.util.List;
+
+import javafx.scene.paint.Color;
+import util.Position;
+
+public class Rockery implements Entity{
+    private final int priority = 0;
+    Position position;
+    private int age;
+    private int burn;
+    private final Color viewColor = Color.LIMEGREEN;
+
+    public Rockery(Position p ){
+        this.position = p;
+        this.burn = 0;
+    }
+
+
+    public Rockery(Position p , int age){
+        System.out.println("age : " + age);
+        this.position = p;
+        this.age = age;
+    }
+
+    @Override
+    public List<Position> nextTurn(Board<Square> board) {
+        return List.of();
+    }
+
+    @Override
+    public Position getPosition() {
+        return this.position;
+    }
+    public int getBurn(){
+        return this.burn;
+    }
+    public void incrementBurn(){
+        this.burn = burn + 1;
+    }
+
+    @Override
+    public void setPosition(Position p) {
+        this.position = p;
+
+    }
+
+    @Override
+    public int getAge() {
+        return this.age;
+    }
+
+    @Override
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    @Override
+    public void incrementAge() {
+        this.age += 1;
+    }
+
+    @Override
+    public Color getViewColor() {
+        return this.viewColor;
+    }
+
+    @Override
+    public int getPriority() {
+        return this.priority;
+    }
+
+
+    public void resetBurn() {
+        this.burn = 0;
+    }
+}
-- 
GitLab