Select Git revision
FireFighter.class.uniqueId2
Forked from
LABOUREL Arnaud / Firefighter template
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);
}
}