diff --git a/src/main/java/model/update/NextGenerationUpdater.java b/src/main/java/model/update/NextGenerationUpdater.java new file mode 100644 index 0000000000000000000000000000000000000000..72de8c2de2c00ca8730dbd305498b55bf0371644 --- /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; + } +}