Package net.sf.freecol.server.ai.mission
Class UnitSeekAndDestroyMission
- java.lang.Object
-
- net.sf.freecol.common.model.FreeColObject
-
- net.sf.freecol.server.ai.AIObject
-
- net.sf.freecol.server.ai.mission.Mission
-
- net.sf.freecol.server.ai.mission.UnitSeekAndDestroyMission
-
- All Implemented Interfaces:
java.lang.Comparable<FreeColObject>
,ObjectWithId
public final class UnitSeekAndDestroyMission extends Mission
Mission for attacking a specific target, be it a Unit or a Settlement.
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.logging.Logger
logger
private static java.lang.String
tag
The tag for this mission.static java.lang.String
TAG
private Location
target
The object we are trying to destroy.private static java.lang.String
TARGET_TAG
private Location
transportTarget
The object we are trying to destroy.-
Fields inherited from class net.sf.freecol.server.ai.mission.Mission
AIUNITDIED, AIUNITNULL, MINIMUM_TRANSPORT_PRIORITY, NO_MORE_MOVES_LEFT, NO_PATH_TO_TARGET, NORMAL_TRANSPORT_PRIORITY, TARGETINVALID, TARGETNOTFOUND, TARGETNULL, TARGETOWNERSHIP, UNITNOTAPERSON, UNITNOTOFFENSIVE, UNITNOTONMAP
-
Fields inherited from class net.sf.freecol.server.ai.AIObject
initialized
-
Fields inherited from class net.sf.freecol.common.model.FreeColObject
ARRAY_SIZE_TAG, DEFAULT_CLASS_INDEX, fcoComparator, ID_ATTRIBUTE_TAG, PARTIAL_ATTRIBUTE_TAG, VALUE_TAG
-
-
Constructor Summary
Constructors Constructor Description UnitSeekAndDestroyMission(AIMain aiMain, AIUnit aiUnit, FreeColXMLReader xr)
Creates a newUnitSeekAndDestroyMission
from a reader.UnitSeekAndDestroyMission(AIMain aiMain, AIUnit aiUnit, Location target)
Creates a mission for the givenAIUnit
.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Mission
doMission(LogBuilder lb)
Performs the mission.static Location
extractTarget(AIUnit aiUnit, PathNode path)
Extract a valid target for this mission from a path.static Location
findMissionTarget(AIUnit aiUnit, int range, boolean deferOK)
Finds a suitable seek-and-destroy target for an AI unit.Location
findTarget()
Finds a new target for this mission.private static PathNode
findTargetPath(AIUnit aiUnit, int range, boolean deferOK)
Finds a suitable seek-and-destroy target path for an AI unit.int
getBaseTransportPriority()
Get the base transport priority for the unit performing this mission.private static GoalDecider
getGoalDecider(AIUnit aiUnit, boolean deferOK)
Gets aGoalDecider
for finding the best colonyTile
, optionally falling back to the nearest colony.Location
getTarget()
Gets the target of this mission, if any.Location
getTransportDestination()
Gets the destination of a required transport.java.lang.String
getXMLTagName()
Get the serialization tag for this object.static java.lang.String
invalidMissionReason(AIUnit aiUnit)
Why would this mission be invalid with the given AI unit?static java.lang.String
invalidMissionReason(AIUnit aiUnit, Location loc)
Why would this mission be invalid with the given AI unit and location?java.lang.String
invalidReason()
Why is this mission invalid? Mission subclasses must implement this routine, which probably should start by checking invalidAIUnitReason.private static java.lang.String
invalidSettlementReason(AIUnit aiUnit, Settlement settlement)
Why would a UnitSeekAndDestroyMission be invalid with the given unit and settlement.private static java.lang.String
invalidTargetReason(AIUnit aiUnit, Unit unit)
Why would a UnitSeekAndDestroyMission be invalid with the given unit and target unit.private static java.lang.String
invalidUnitReason(AIUnit aiUnit)
Why would a UnitSeekAndDestroyMission be invalid with the given unit.protected void
readAttributes(FreeColXMLReader xr)
Reads the attributes of this object from an XML stream.static int
scorePath(AIUnit aiUnit, PathNode path)
Evaluate a potential seek and destroy mission for a given unit to a given tile.private static int
scoreSettlementPath(AIUnit aiUnit, PathNode path, Settlement settlement)
Scores a potential attack on a settlement.private static int
scoreUnitPath(AIUnit aiUnit, PathNode path, Unit defender)
Scores a potential attack on a unit.void
setTarget(Location target)
Sets the target of this mission, if any.protected void
writeAttributes(FreeColXMLWriter xw)
Write the attributes of this object to a stream.-
Methods inherited from class net.sf.freecol.server.ai.mission.Mission
dispose, findCircleTarget, getAIPlayer, getAIRandom, getAIUnit, getBestSettlement, getEuropeanAIPlayer, getPlayer, getUnit, invalidAIUnitReason, invalidAttackReason, invalidNewMissionReason, invalidTargetReason, invalidTargetReason, invalidTransportableReason, isOneTime, isTargetReason, isValid, lbAt, lbAttack, lbDodge, lbDone, lbDrop, lbFail, lbMove, lbRetarget, lbWait, moveRandomly, moveRandomlyTurn, resolveBlockage, retargetMission, setInitialized, toString, toXML, travelToTarget
-
Methods inherited from class net.sf.freecol.server.ai.AIObject
addAIObjectWithId, checkIntegrity, checkIntegrity, copyIn, getAIMain, getGame, getSpecification, isDisposed, setGame, setSpecification
-
Methods inherited from class net.sf.freecol.common.model.FreeColObject
addAbility, addFeatures, addModifier, addPropertyChangeListener, addPropertyChangeListener, apply, apply, applyModifiers, applyModifiers, arrayKey, compareIds, compareTo, containsAbilityKey, containsModifierKey, copy, copy, copy, copy, copyInCast, dumpObject, equals, fireIndexedPropertyChange, fireIndexedPropertyChange, fireIndexedPropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAbilities, getAbilities, getAbilities, getAbilities, getClassIndex, getDefenceModifiers, getDisplayObject, getFeatureContainer, getFreeColObjectClass, getFreeColObjectClassByName, getId, getIdNumber, getIdType, getIdTypeByName, getModifiers, getModifiers, getModifiers, getModifiers, getObjectClassIndex, getPropertyChangeListeners, getPropertyChangeListeners, getPropertyChangeSupport, getSortedAbilities, getSortedModifiers, getSuffix, getSuffix, hasAbility, hasAbility, hasAbility, hashCode, hasListeners, hasModifier, hasModifier, hasModifier, idEquals, invokeMethod, logFreeColObjects, readChild, readChildren, readFromXML, readFromXMLPartial, removeAbilities, removeAbility, removeFeatures, removeModifier, removeModifiers, removePropertyChangeListener, removePropertyChangeListener, save, save, save, save, serialize, serialize, serialize, serialize, setId, toXML, toXMLPartial, toXMLPartial, writeChildren
-
-
-
-
Field Detail
-
logger
private static final java.util.logging.Logger logger
-
TAG
public static final java.lang.String TAG
- See Also:
- Constant Field Values
-
tag
private static final java.lang.String tag
The tag for this mission.- See Also:
- Constant Field Values
-
target
private Location target
The object we are trying to destroy. This can be a eitherSettlement
or aUnit
.
-
transportTarget
private Location transportTarget
The object we are trying to destroy. This can be a eitherSettlement
or aUnit
.
-
TARGET_TAG
private static final java.lang.String TARGET_TAG
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
UnitSeekAndDestroyMission
public UnitSeekAndDestroyMission(AIMain aiMain, AIUnit aiUnit, Location target)
Creates a mission for the givenAIUnit
.- Parameters:
aiMain
- The main AI-object.aiUnit
- TheAIUnit
this mission is created for.target
- The object we are trying to destroy. This can be either aSettlement
or aUnit
.
-
UnitSeekAndDestroyMission
public UnitSeekAndDestroyMission(AIMain aiMain, AIUnit aiUnit, FreeColXMLReader xr) throws javax.xml.stream.XMLStreamException
Creates a newUnitSeekAndDestroyMission
from a reader.- Parameters:
aiMain
- The main AI-object.aiUnit
- TheAIUnit
this mission is created for.xr
- The input stream containing the XML.- Throws:
javax.xml.stream.XMLStreamException
- if a problem was encountered during parsing.- See Also:
FreeColObject.readFromXML(net.sf.freecol.common.io.FreeColXMLReader)
-
-
Method Detail
-
extractTarget
public static Location extractTarget(AIUnit aiUnit, PathNode path)
Extract a valid target for this mission from a path.- Parameters:
aiUnit
- TheAIUnit
to perform the mission.path
- APathNode
to extract a target from.- Returns:
- A target for this mission, or null if none found.
-
scoreSettlementPath
private static int scoreSettlementPath(AIUnit aiUnit, PathNode path, Settlement settlement)
Scores a potential attack on a settlement. Do not cheat and look inside the settlement. Just use visible facts about it. FIXME: if we are the REF and there is a significant Tory population inside, assume traitors have briefed us.- Parameters:
aiUnit
- TheAIUnit
to do the mission.path
- ThePathNode
to take to the settlement.settlement
- TheSettlement
to attack.- Returns:
- A score of the desirability of the mission.
-
scoreUnitPath
private static int scoreUnitPath(AIUnit aiUnit, PathNode path, Unit defender)
Scores a potential attack on a unit.- Parameters:
aiUnit
- TheAIUnit
to do the mission.path
- ThePathNode
to take to the settlement.defender
- TheUnit
to attack.- Returns:
- A score of the desirability of the mission.
-
scorePath
public static int scorePath(AIUnit aiUnit, PathNode path)
Evaluate a potential seek and destroy mission for a given unit to a given tile.- Parameters:
aiUnit
- TheAIUnit
to do the mission.path
- APathNode
to take to the target.- Returns:
- A score for the proposed mission.
-
getGoalDecider
private static GoalDecider getGoalDecider(AIUnit aiUnit, boolean deferOK)
Gets aGoalDecider
for finding the best colonyTile
, optionally falling back to the nearest colony.- Parameters:
aiUnit
- TheAIUnit
that is searching.deferOK
- Not used in this mission.- Returns:
- A suitable
GoalDecider
.
-
findTargetPath
private static PathNode findTargetPath(AIUnit aiUnit, int range, boolean deferOK)
Finds a suitable seek-and-destroy target path for an AI unit.- Parameters:
aiUnit
- TheAIUnit
to find a target for.range
- An upper bound on the number of moves.deferOK
- Not implemented in this mission.- Returns:
- A path to the target, or null if none found.
-
findMissionTarget
public static Location findMissionTarget(AIUnit aiUnit, int range, boolean deferOK)
Finds a suitable seek-and-destroy target for an AI unit.- Parameters:
aiUnit
- TheAIUnit
to find a target for.range
- An upper bound on the number of moves.deferOK
- Not implemented in this mission.- Returns:
- A suitable target, or null if none found.
-
invalidUnitReason
private static java.lang.String invalidUnitReason(AIUnit aiUnit)
Why would a UnitSeekAndDestroyMission be invalid with the given unit.- Parameters:
aiUnit
- TheAIUnit
to test.- Returns:
- A reason why the mission would be invalid, or null if none found.
-
invalidSettlementReason
private static java.lang.String invalidSettlementReason(AIUnit aiUnit, Settlement settlement)
Why would a UnitSeekAndDestroyMission be invalid with the given unit and settlement.- Parameters:
aiUnit
- TheAIUnit
to seek-and-destroy with.settlement
- TheSettlement
to test.- Returns:
- A reason why the mission would be invalid, or null if none found.
-
invalidTargetReason
private static java.lang.String invalidTargetReason(AIUnit aiUnit, Unit unit)
Why would a UnitSeekAndDestroyMission be invalid with the given unit and target unit.- Parameters:
aiUnit
- TheAIUnit
to seek-and-destroy with.unit
- The targetUnit
to test.- Returns:
- A reason why the mission would be invalid, or null if none found.
-
invalidMissionReason
public static java.lang.String invalidMissionReason(AIUnit aiUnit)
Why would this mission be invalid with the given AI unit?- Parameters:
aiUnit
- TheAIUnit
to check.- Returns:
- A reason for mission invalidity, or null if none found.
-
invalidMissionReason
public static java.lang.String invalidMissionReason(AIUnit aiUnit, Location loc)
Why would this mission be invalid with the given AI unit and location?- Parameters:
aiUnit
- TheAIUnit
to check.loc
- TheLocation
to check.- Returns:
- A reason for invalidity, or null if none found.
-
getBaseTransportPriority
public int getBaseTransportPriority()
Get the base transport priority for the unit performing this mission.- Overrides:
getBaseTransportPriority
in classMission
- Returns:
- A base transport priority.
-
getTransportDestination
public Location getTransportDestination()
Gets the destination of a required transport. Override this in the child mission classes if there is a useful intermediate point to deliver the unit distinct from the target.- Overrides:
getTransportDestination
in classMission
- Returns:
- The mission target, or null if the mission is invalid, otherwise lacks a target (e.g. UnitWanderHostile), or the unit does not need transport.
-
getTarget
public Location getTarget()
Gets the target of this mission, if any.
-
setTarget
public void setTarget(Location target)
Sets the target of this mission, if any. The actual target is handled in the missions that really have them, this is a helper to make sure the unit is updated.
-
findTarget
public Location findTarget()
Finds a new target for this mission.- Specified by:
findTarget
in classMission
- Returns:
- A new target for this mission.
-
invalidReason
public java.lang.String invalidReason()
Why is this mission invalid? Mission subclasses must implement this routine, which probably should start by checking invalidAIUnitReason. A mission can be invalid for a number of subclass-specific reasons. For example: a seek-and-destroy mission could be invalid because of a improved stance towards the targeted player.- Specified by:
invalidReason
in classMission
- Returns:
- A reason for mission invalidity, or null if none found.
-
doMission
public Mission doMission(LogBuilder lb)
Performs the mission.
-
writeAttributes
protected void writeAttributes(FreeColXMLWriter xw) throws javax.xml.stream.XMLStreamException
Write the attributes of this object to a stream. To be overridden if required by any object that has attributes and uses the toXML(FreeColXMLWriter, String) call.- Overrides:
writeAttributes
in classMission
- Parameters:
xw
- TheFreeColXMLWriter
to write to.- Throws:
javax.xml.stream.XMLStreamException
- if there are any problems writing to the stream.
-
readAttributes
protected void readAttributes(FreeColXMLReader xr) throws javax.xml.stream.XMLStreamException
Reads the attributes of this object from an XML stream.- Overrides:
readAttributes
in classMission
- Parameters:
xr
- TheFreeColXMLReader
to read from.- Throws:
javax.xml.stream.XMLStreamException
- if there is a problem reading the stream.
-
getXMLTagName
public java.lang.String getXMLTagName()
Get the serialization tag for this object.- Specified by:
getXMLTagName
in classFreeColObject
- Returns:
- The tag.
-
-