Skip to content
Snippets Groups Projects
Fire.java 2.42 KiB
Newer Older
  • Learn to ignore specific revisions
  • MEHDI's avatar
    MEHDI committed
    package model.Elements;
    
    MEHDI's avatar
    MEHDI committed
    
    import model.Board.Board;
    import model.Elements.Obstacle.Mountain;
    import model.Elements.Obstacle.Obstacle;
    import model.Elements.Obstacle.Road;
    
    import util.Neighbour;
    
    import java.util.*;
    
    BELHACHEMI Mehdi's avatar
    BELHACHEMI Mehdi committed
    
    
    public class Fire implements Element {
    
    BELHACHEMI Mehdi's avatar
    BELHACHEMI Mehdi committed
        private Position position;
    
    
        private Neighbour neighbour;
        private final ModelElement modelElement;
    
        public Fire(Position position){
    
    BELHACHEMI Mehdi's avatar
    BELHACHEMI Mehdi committed
            this.position = position;
    
    BELHACHEMI Mehdi's avatar
    BELHACHEMI Mehdi committed
    
        public Position getPosition() {
            return position;
    
        @Override
        public ModelElement getElement() {
            return modelElement;
        }
    
    
    BELHACHEMI Mehdi's avatar
    BELHACHEMI Mehdi committed
        public void setPosition(Position position) {
            this.position = position;
    
        public List<Position> update(Board<List<ModelElement>> firefighterBoard) {
    
            this.neighbour = new Neighbour(firefighterBoard);
    
    
            List<Position> modifiedPositions = new ArrayList<>();
            if (firefighterBoard.stepNumber() % 2 == 0) {
    
                Set<Position> newFirePositions = new HashSet<>();
    
    
                for (Position fire : new HashSet<>(firefighterBoard.getFires().keySet())) {
                    newFirePositions.addAll(removeMountainAndRoads(firefighterBoard,fire));
    
                for (Position position : newFirePositions) {
                    if (!firefighterBoard.getFires().containsKey(position)) {
                        firefighterBoard.getFires().put(position, new Fire(position));
                        modifiedPositions.add(position);
    
                    }
                }
            }
            return modifiedPositions;
    
        private List<Position>removeMountainAndRoads(Board<List<ModelElement>> firefighterBoard,Position position){
    
            List<Position>neighboursAvailable;
    
            neighboursAvailable = this.neighbour.getNeighbors().get(position);
            if(firefighterBoard.stepNumber()%4==0){
                List<Position>MountainAndRoadsPositions = new ArrayList<>();
                for(Obstacle obstacle : firefighterBoard.getObstacles().values()){
    
    MEHDI's avatar
    MEHDI committed
                    if(obstacle instanceof Road || obstacle instanceof Mountain){
    
                        MountainAndRoadsPositions.add(obstacle.getPosition());
                        neighboursAvailable.removeAll(MountainAndRoadsPositions);
                    }
                }
            }
            else{
    
                neighboursAvailable.removeAll(firefighterBoard.getObstacles().keySet());
            }
    
    
            return neighboursAvailable;
        }