/** * 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.common.model.pathfinding; import net.sf.freecol.common.model.PathNode; import net.sf.freecol.common.model.Unit; /** * Used by {@link net.sf.freecol.common.model.Map#search} in order to * determine a goal. * * <br /><br /> * * The method {@link #check(Unit, PathNode)} will be called by {@link * net.sf.freecol.common.model.Map#search} until: * * <ol> * <li>The method returns <code>true</code> and there is * {@link #hasSubGoals() no sub goals}.</li> * <li>The maximum distance of the search has been reached.</li> * </ol> * * The method {@link #getGoal()} will get called after this. */ public interface GoalDecider { /** * Gets the <code>PathNode</code> containing the goal. * @return The <code>PathNode</code> where the <code>Tile</code> * returned by <code>pathNode.getTile()</code> is the goal. */ public PathNode getGoal(); /** * Determines wether this <code>GoalDecider</code> has any * sub goals. * * @return <code>true</code> if there are any sub goals * and <code>false</code> otherwise. */ public boolean hasSubGoals(); /** * Checks wether the given <code>PathNode</code> is a * goal/sub-goal. * * @param u The <code>Unit</code> which we are trying * to find a path for. * @param pathNode The <code>PathNode</code> where the * <code>Tile</code> returned by * <code>pathNode.getTile()</code> is the tile to be * checked. * @return <code>true</code> if the <code>PathNode</code> was * either a goal or a sub goal and <code>false</code> * otherwise. The goal should be returned by * {@link #getGoal()} right after a call to this method, * if this method returns <code>true</code> and * {@link #hasSubGoals()} returns * <code>false</code>. * */ public boolean check(Unit u, PathNode pathNode); }