From 16c08852e4d5a5d55b3c057ec1205b4c774404b3 Mon Sep 17 00:00:00 2001
From: ousseyn01 <ousseyn.ndiaye9@gmail.com>
Date: Fri, 29 Nov 2024 21:23:29 +0100
Subject: [PATCH] NextGenerationUpdater is CREATED and DONE in update package

---
 .../model/update/NextGenerationUpdater.java   | 50 +++++++++++++++++++
 1 file changed, 50 insertions(+)
 create mode 100644 src/main/java/model/update/NextGenerationUpdater.java

diff --git a/src/main/java/model/update/NextGenerationUpdater.java b/src/main/java/model/update/NextGenerationUpdater.java
new file mode 100644
index 0000000..72de8c2
--- /dev/null
+++ b/src/main/java/model/update/NextGenerationUpdater.java
@@ -0,0 +1,50 @@
+package model.update;
+
+import model.Cloud;
+import model.Fire;
+import model.Firefighter;
+import model.Mountain;
+import util.Position;
+
+import java.util.List;
+import java.util.Map;
+
+public class NextGenerationUpdater {
+    private final Fire fire;
+    private final List<Cloud> clouds;
+    private final List<Firefighter> firefighters;
+    private final List<Mountain> mountains;
+    private final Map<Position, List<Position>> neighbors;
+    private int step;
+
+    public NextGenerationUpdater(Fire fire, List<Cloud> clouds, List<Firefighter> firefighters, List<Mountain> mountains, Map<Position, List<Position>> neighbors) {
+        this.fire = fire;
+        this.clouds = clouds;
+        this.firefighters = firefighters;
+        this.mountains = mountains;
+        this.neighbors = neighbors;
+        this.step = 0;
+    }
+
+    public List<Position> updateToNextGeneration() {
+        FirefighterUpdater firefighterUpdater = new FirefighterUpdater(firefighters, neighbors, fire);
+        List<Position> modifiedPositions = firefighterUpdater.updateFirefighters(Mountain.getMountainPositions(mountains));
+
+        if (step % 2 == 0) {
+            modifiedPositions.addAll(fire.spreadFire(Mountain.getMountainPositions(mountains)));
+        }
+
+        for (Cloud cloud : clouds) {
+            cloud.move();
+            cloud.protectFromFire(fire);
+            cloud.extinguishSurroundingFires(fire);
+        }
+
+        step++;
+        return modifiedPositions;
+    }
+
+    public void resetStep() {
+        this.step = 0;
+    }
+}
-- 
GitLab