/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.server.ai; import net.sf.freecol.common.model.Locatable; import net.sf.freecol.common.model.Location; /** * A single item in a carrier's transport list. Any {@link Locatable} * which should be able to be transported by a carrier using the {@link * net.sf.freecol.server.ai.mission.TransportMission}, needs an AI * object implementing this interface. * * @see net.sf.freecol.server.ai.mission.TransportMission */ public interface Transportable { /** * Returns the source for this <code>Transportable</code>. * This is normally the location of the * {@link #getTransportLocatable locatable}. * * @return The source for this <code>Transportable</code>. */ public Location getTransportSource(); /** * Returns the destination for this <code>Transportable</code>. * This can either be the target {@link * net.sf.freecol.common.model.Tile} of the transport or the target * for the entire <code>Transportable</code>'s mission. The target * for the tansport is determined by {@link * net.sf.freecol.server.ai.mission.TransportMission} in the latter * case. * * @return The destination for this <code>Transportable</code>. */ public Location getTransportDestination(); /** * Gets the priority of transporting this <code>Transportable</code> * to it's destination. * * @return The priority of the transport. */ public int getTransportPriority(); /** * Increases the transport priority of this <code>Transportable</code>. * This method gets called every turn the <code>Transportable</code> * have not been put on a carrier's transport list. */ public void increaseTransportPriority(); /** * Gets the <code>Locatable</code> which should be transported. * @return The <code>Locatable</code>. */ public Locatable getTransportLocatable(); /** * Gets the carrier responsible for transporting this <code>Transportable</code>. * * @return The <code>AIUnit</code> which has this <code>Transportable</code> * in it's transport list. This <code>Transportable</code> has not been * scheduled for transport if this value is <code>null</code>. * */ public AIUnit getTransport(); /** * Sets the carrier responsible for transporting this <code>Transportable</code>. * This method should also add this <code>Transportable</code> to the given * carrier's transport list. * * @param transport The <code>AIUnit</code> which has this <code>Transportable</code> * in it's transport list. This <code>Transportable</code> has not been * scheduled for transport if this value is <code>null</code>. * */ public void setTransport(AIUnit transport); /** * Aborts the given <code>Wish</code>. * @param w The <code>Wish</code> to be aborted. */ public void abortWish(Wish w); /** * Returns the ID of the <code>AIObject</code> implementing * this interface. * * @return The ID of the <code>AIObject</code>. This is normally * the ID of the {@link * net.sf.freecol.common.model.FreeColGameObject} that * object represents. */ public String getId(); }