Select Git revision
SimulatorApplication.class
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
SimpleFireSpreadStrategy.java 2.30 KiB
package model;
import util.Position;
import java.util.*;
public class SimpleFireSpreadStrategy implements Strategy {
private final Set<Position> firePositions;
private final Map<Position, List<Position>> neighbors;
private final Set<Position> mountainPositions;
private final Set<Position> roadPositions;
private final Set<Position> rocksPositions;
private final int step;
public SimpleFireSpreadStrategy(Set<Position> firePositions, Map<Position, List<Position>> neighbors,Set<Position> moutainsPositions,Set<Position> roadPositions,Set<Position> rocksPositions, int step) {
this.firePositions = firePositions;
this.neighbors = neighbors;
this.mountainPositions = moutainsPositions;
this.roadPositions = roadPositions;
this.rocksPositions = rocksPositions;
this.step = step;
}
@Override
public List<Position> update() {
if(step %2 != 0){
return Collections.emptyList();
}
List<Position> modifiedPositions = new ArrayList<>();
Set<Position> newFirePositions = new HashSet<>();
for (Position firePosition : firePositions) {
spreadFire(firePosition, newFirePositions);
}
firePositions.addAll(newFirePositions);
modifiedPositions.addAll(newFirePositions);
return modifiedPositions;
}
private void spreadFire(Position firePosition, Set<Position> newFirePositions) {
List<Position> potentialPositions = neighbors.getOrDefault(firePosition, Collections.emptyList());
for (Position potentialPosition : potentialPositions) {
if (canPropagateTo(potentialPosition)) {
newFirePositions.add(potentialPosition);
}
}
}
private boolean canPropagateTo(Position newPosition) {
if(mountainPositions.contains(newPosition) || roadPositions.contains(newPosition)){
return false;
}
if (rocksPositions.contains(newPosition)){
return step % 4 ==0;
}
return true;
}
@Override
public List<Position> getModelPositions() {
throw new UnsupportedOperationException("Fire positions can't be accessed as Model Positions.");
}
@Override
public Set<Position> getFirePositions() {
return firePositions;
}
}