package ch.epfl.maze.physical.pacman; import ch.epfl.maze.physical.Animal; import ch.epfl.maze.physical.Daedalus; import ch.epfl.maze.physical.GhostPredator; import ch.epfl.maze.util.Vector2D; /** * Orange ghost from the Pac-Man game, alternates between direct chase if far * from its target and SCATTER if close. * * @author Pacien TRAN-GIRARD */ public class Clyde extends GhostPredator { private static double PROXIMITY_THRESHOLD = 4.0d; /** * Constructs a Clyde with a starting position. * * @param position Starting position of Clyde in the labyrinth */ public Clyde(Vector2D position) { super(position); } /** * Checks if Clyde is close to the targeted Prey. * * @param daedalus The Daedalus * @return T(the Prey is reckless) */ private boolean closeToTarget(Daedalus daedalus) { double dist = this .getPosition() .sub(this.getPreyPosition(daedalus)) .dist(); return dist < Clyde.PROXIMITY_THRESHOLD; } /** * Returns the current Mode, forcing the SCATTER Mode if far from the target. * * @param daedalus The Daedalus * @return The current Mode */ @Override protected Mode getMode(Daedalus daedalus) { return this.closeToTarget(daedalus) ? super.getMode(daedalus) : Mode.SCATTER; } /** * Targets directly the current position of the Prey. * * @param daedalus The Daedalus * @return The position of the Prey */ @Override protected Vector2D getPreyTargetPosition(Daedalus daedalus) { return getPreyPosition(daedalus); } @Override public Animal copy() { return new Clyde(this.getPosition()); } }