/** * A taxi is able to carry a single passenger. * * @author David J. Barnes and Michael Kölling * @version 2011.07.31 */ public class Taxi extends Vehicle { private Passenger passenger; /** * Constructor for objects of class Taxi * @param company The taxi company. Must not be null. * @param location The vehicle's starting point. Must not be null. * @throws NullPointerException If company or location is null. */ public Taxi(TaxiCompany company, Location location) { super(company, location); } /** * Carry out a taxi's actions. */ public void act() { Location target = getTargetLocation(); if(target != null) { // Find where to move to next. Location next = getLocation().nextLocation(target); setLocation(next); if(next.equals(target)) { if(passenger != null) { notifyPassengerArrival(passenger); offloadPassenger(); } else { notifyPickupArrival(); } } } else { incrementIdleCount(); } } /** * Is the taxi free? * @return Whether or not this taxi is free. */ public boolean isFree() { return getTargetLocation() == null && passenger == null; } /** * Receive a pickup location. This becomes the * target location. * @param location The pickup location. */ public void setPickupLocation(Location location) { setTargetLocation(location); } /** * Receive a passenger. * Set their destination as the target location. * @param passenger The passenger. */ public void pickup(Passenger passenger) { this.passenger = passenger; setTargetLocation(passenger.getDestination()); } /** * Offload the passenger. */ public void offloadPassenger() { passenger = null; clearTargetLocation(); } /** * Return details of the taxi, such as where it is. * @return A string representation of the taxi. */ public String toString() { return "Taxi at " + getLocation(); } }