From e99ff3fe400c0c25fc46d73695be321534511565 Mon Sep 17 00:00:00 2001
From: ousseyn01 <ousseyn.ndiaye9@gmail.com>
Date: Fri, 29 Nov 2024 21:23:55 +0100
Subject: [PATCH] Modification of FirefighterBoard.java

---
 src/main/java/model/BoardElement.java     |  9 ----
 src/main/java/model/FirefighterBoard.java | 58 ++++-------------------
 src/main/java/util/Position.java          |  4 ++
 3 files changed, 14 insertions(+), 57 deletions(-)
 delete mode 100644 src/main/java/model/BoardElement.java

diff --git a/src/main/java/model/BoardElement.java b/src/main/java/model/BoardElement.java
deleted file mode 100644
index eedeffa..0000000
--- a/src/main/java/model/BoardElement.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package model;
-
-import util.Position;
-
-public interface BoardElement {
-    Position getPosition();
-    void setPosition(Position position);
-}
-
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 353e064..dadc043 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -1,5 +1,6 @@
 package model;
 
+import model.update.NextGenerationUpdater;
 import util.Position;
 
 import java.util.*;
@@ -21,6 +22,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   private int step = 0;
   private final Random randomGenerator = new Random();
 
+  private NextGenerationUpdater nextGenerationUpdater;
+
+
   public FirefighterBoard(int columnCount, int rowCount, int initialFireCount, int initialFirefighterCount, int initialCloudCount, int initialMountainCount) {
     this.columnCount = columnCount;
     this.rowCount = rowCount;
@@ -41,6 +45,9 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     this.initialFirefighterCount = initialFirefighterCount;
     this.initialCloudCount = initialCloudCount;
     initializeElements();
+
+    // Initialisation des Updaters
+    nextGenerationUpdater = new NextGenerationUpdater(fire, clouds, firefighters, mountains, neighbors);
   }
 
   public void initializeElements() {
@@ -117,63 +124,18 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   public int columnCount() {
     return columnCount;
   }
-
-  public List<Position> updateToNextGeneration() {
-    List<Position> modifiedPositions = updateFirefighters();
-    if (step % 2 == 0){
-      modifiedPositions.addAll(fire.spreadFire(getMountainPositions()));
-    }
-    for (Cloud cloud : clouds) {
-      cloud.move();
-      cloud.protectFromFire(fire);
-      cloud.extinguishSurroundingFires(fire);
-    }
-    step++;
-
-    return modifiedPositions;
-  }
-  private Set<Position> getMountainPositions() {
-    Set<Position> mountainPositions = new HashSet<>();
-    for (Mountain mountain : mountains) {
-      mountainPositions.add(mountain.getPosition());
-    }
-    return mountainPositions;
-  }
-
   @Override
   public int stepNumber() {
     return step;
   }
 
-  private List<Position> updateFirefighters() {
-    List<Position> modifiedPosition = new ArrayList<>();
-    for (Firefighter firefighter : firefighters) {
-
-      modifiedPosition.add(firefighter.getPosition());
-
-      Position newPosition = firefighter.moveToBestPosition(fire.getFirePositions(), neighbors, getMountainPositions());
-      firefighter.setPosition(newPosition);
-
-      modifiedPosition.add(newPosition);
-
-      firefighter.extinguish(newPosition, fire.getFirePositions());
-
-      // Éteindre les feux dans les positions voisines
-      List<Position> adjacentFires = neighbors.get(newPosition).stream()
-              .filter(fire.getFirePositions()::contains)
-              .toList();
-      for (Position firePosition : adjacentFires) {
-        firefighter.extinguish(firePosition, fire.getFirePositions());
-        modifiedPosition.add(firePosition);
-      }
-
-    }
-    return modifiedPosition;
+  public List<Position> updateToNextGeneration() {
+    return nextGenerationUpdater.updateToNextGeneration();
   }
 
   @Override
   public void reset() {
-    step = 0;
+    nextGenerationUpdater.resetStep();
     initializeElements();
   }
 
diff --git a/src/main/java/util/Position.java b/src/main/java/util/Position.java
index 31dc4c1..aaa34af 100644
--- a/src/main/java/util/Position.java
+++ b/src/main/java/util/Position.java
@@ -1,5 +1,9 @@
 package util;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 public record Position(int row, int column) {
 
 }
-- 
GitLab