Skip to content
Snippets Groups Projects
Select Git revision
  • d6f0f60e3127f95eaceb32d425fe72e032dd2b4d
  • master default protected
2 results

DrawerContext.java

Blame
  • Forked from COUETOUX Basile / graphic-2020
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    Cisor.java 3.65 KiB
    package model.rockpapercisor;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Objects;
    
    import javafx.scene.paint.Color;
    import model.Board;
    import model.Entity;
    import model.Square;
    import model.firefighterscenario.Cloud;
    import util.Position;
    import util.PositionUtil;
    import view.ViewElement;
    
    public class Cisor implements Entity {
        private final int priority = 0;
        Position position;
        private int age;
        private final Color viewColor = Color.RED;
        private static javafx.scene.image.Image cloudImage;
    
        static {
            try {
                cloudImage = new javafx.scene.image.Image(Cloud.class.getResource("/view/icons/pfc/cis.png").toExternalForm());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public Cisor(Position p) {
            this.position = p;
        }
    
        public Cisor(Position p, int age) {
            this.position = p;
            this.age = age;
        }
    
        @Override
        public List<Position> nextTurn(Board<Square> board) {
            Position target = null;
            target = board.getNearestEntity(position, Paper.class, null);
    
            Position ennemy = null;
    
            ennemy = board.getNearestEntity(position, Rock.class, null);
            if(ennemy == null && target == null){
                return List.of();
            }
            Position nextPos = null;
            // Vérifier la proximité d'un ennemi avant de choisir la direction.
            if (ennemy != null && PositionUtil.getManhattanDistance(position, ennemy) < 5) {
                nextPos = PositionUtil.getNextPositionAwayFrom(position, ennemy, board);
            } else if(target != null){
                nextPos = PositionUtil.getNextPositionTowards(position, target, board);
            }
    
            if (nextPos != null && board.doesPositionExist(nextPos)) {
                board.addEntityAtSquare(this, nextPos);
                board.clearCaseFrom(this, position);
                Position oldPosition = new Position(position.x(), position.y());
                this.position = nextPos;
                if (board.doesSquareContainEntity(nextPos, Paper.class)) {
                    List<Entity> entities = board.getStates(nextPos).getEntities();
                    entities.removeIf(p -> p instanceof Paper);
                }
    
                List<Position> result = new ArrayList<>();
                if (target != null)
                    result.add(target);
                if (oldPosition != null)
                    result.add(oldPosition);
                if (position != null)
                    result.add(position);
                if (ennemy != null)
                    result.add(ennemy);
                return result;
    
            }
            return List.of();
        }
    
        @Override
        public Position getPosition() {
            return this.position;
        }
    
        @Override
        public void setPosition(Position p) {
            this.position = p;
    
        }
    
        @Override
        public int getAge() {
            return this.age;
        }
    
        @Override
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public void incrementAge() {
            this.age += 1;
        }
    
        @Override
        public Color getViewColor() {
            return this.viewColor;
        }
    
        @Override
        public int getPriority() {
            return this.priority;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null || getClass() != obj.getClass())
                return false;
            Cisor cisor = (Cisor) obj;
            return age == cisor.age &&
                    Objects.equals(position, cisor.position);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(position, age);
        }
    
        @Override
        public ViewElement getViewElement() {
            return new ViewElement(cloudImage);
        }
    
    }