Class ColonyTile

  • All Implemented Interfaces:
    java.lang.Comparable<FreeColObject>, Location, Ownable, ObjectWithId
    Direct Known Subclasses:
    ServerColonyTile

    public class ColonyTile
    extends WorkLocation
    Represents a work location on a tile. Each ColonyTile except the colony center tile provides a work place for a single unit and produces a single type of goods. The colony center tile generally produces two different of goods, one food type and one new world raw material.
    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • UNIT_CAPACITY

        public static final int UNIT_CAPACITY
        The maximum number of units a ColonyTile can hold.
        See Also:
        Constant Field Values
      • workTile

        protected Tile workTile
        The tile to work. This is accessed through getWorkTile(). Beware! Do not confuse this with getTile(), which returns the colony center tile (because every work location belongs to the enclosing colony).
    • Constructor Detail

      • ColonyTile

        protected ColonyTile​(Game game,
                             Colony colony,
                             Tile workTile)
        Constructor for ServerColonyTile.
        Parameters:
        game - The enclosing Game.
        colony - The Colony this object belongs to.
        workTile - The tile in which this ColonyTile represents a WorkLocation for.
      • ColonyTile

        public ColonyTile​(Game game,
                          java.lang.String id)
        Create a new ColonyTile with the given identifier. The object should later be initialized by calling either FreeColGameObject.readFromXML(FreeColXMLReader).
        Parameters:
        game - The enclosing Game.
        id - The object identifier.
    • Method Detail

      • isColonyCenterTile

        public boolean isColonyCenterTile()
        Is this the tile where the Colony is located?
        Returns:
        True if this is the colony center tile.
      • getWorkTile

        public Tile getWorkTile()
        Gets the work tile, that is the actual tile being worked.
        Specified by:
        getWorkTile in class WorkLocation
        Returns:
        The Tile in which this ColonyTile represents a WorkLocation for.
      • setWorkTile

        public void setWorkTile​(Tile workTile)
        Sets the work tile. Needed to fix copied colonies. Do not use otherwise!
        Parameters:
        workTile - The new work Tile.
      • getOccupyingUnit

        public Unit getOccupyingUnit()
        Gets a unit who is occupying the tile.
        Returns:
        A Unit who is occupying the work tile, if any.
        See Also:
        isOccupied()
      • isOccupied

        public boolean isOccupied()
        Is there a fortified enemy unit on the work tile? Production can not occur on occupied tiles.
        Returns:
        True if an fortified enemy unit is in the tile.
      • getBasicProductionInfo

        public ProductionInfo getBasicProductionInfo()
        Gets the basic production information for the colony tile, ignoring any colony limits (which for now, should be irrelevant). In the original game, the following special rules apply to colony center tiles: - All tile improvements contribute to the production of food - Only natural tile improvements, such as rivers, contribute to the production of other types of goods. - Artificial tile improvements, such as plowing, are ignored.
        Returns:
        The raw production of this colony tile.
        See Also:
        ProductionCache.update()
      • improvedBy

        public int improvedBy​(TileImprovementType ti)
        Would a given tile improvement be beneficial to this colony tile?
        Parameters:
        ti - The TileImprovementType to assess.
        Returns:
        A measure of improvement (negative is a bad idea).
      • evaluateFor

        public int evaluateFor​(Player player)
        Evaluate this work location for a given player.
        Overrides:
        evaluateFor in class WorkLocation
        Parameters:
        player - The Player to evaluate for.
        Returns:
        A value for the player.
      • up

        public Location up()
        Promote this location to a more meaningful one if possible. For example: a settlement is more meaningful than the tile it occupies.
        Returns:
        A more meaningful Location, or this one.
      • toShortString

        public java.lang.String toShortString()
        Get a short description of this location.
        Returns:
        A short description.
      • getNoAddReason

        public UnitLocation.NoAddReason getNoAddReason​(Locatable locatable)
        Gets the reason why a given Locatable can not be added to this Location. Be careful to test for unit presence last before success (NoAddReason.NONE) except perhaps for the capacity test, so that we can treat ALREADY_PRESENT as success in some cases (e.g. if the unit changes type --- does it still have a required skill?) FIXME: consider moving this up to Location?
        Overrides:
        getNoAddReason in class WorkLocation
        Parameters:
        locatable - The Locatable to test.
        Returns:
        The reason why adding would fail.
      • getUnitCapacity

        public int getUnitCapacity()
        Gets the maximum number of Units this Location can hold. To be overridden by subclasses.
        Overrides:
        getUnitCapacity in class UnitLocation
        Returns:
        Integer.MAX_VALUE, denoting no effective limit.
      • goodSuggestionCheck

        protected boolean goodSuggestionCheck​(UnitType unitType,
                                              Unit unit,
                                              GoodsType goodsType)
        Description copied from class: WorkLocation
        Determines whether a WorkLocation is a good suggestion
        Overrides:
        goodSuggestionCheck in class WorkLocation
        Parameters:
        unitType - The type of Unit to check.
        unit - The Unit itself.
        goodsType - The GoodsType to check.
        Returns:
        True or false, depending on whether the suggestion is valid.
      • getLabel

        public StringTemplate getLabel()
        Get a description of the work location, with any expected extra detail.
        Specified by:
        getLabel in class WorkLocation
        Returns:
        A label StringTemplate for this work location.
      • isAvailable

        public boolean isAvailable()
        Is this work location available?
        Specified by:
        isAvailable in class WorkLocation
        Returns:
        True if the work location is either current or can be claimed.
      • isCurrent

        public boolean isCurrent()
        Is this a current work location of this colony?
        Specified by:
        isCurrent in class WorkLocation
        Returns:
        True if the work location is current.
      • getLevel

        public int getLevel()
        Get the "level" of this work location. Note: only meaningful for buildings at present.
        Specified by:
        getLevel in class WorkLocation
        Returns:
        The work location level.
      • canAutoProduce

        public boolean canAutoProduce()
        Can this work location can produce goods without workers?
        Specified by:
        canAutoProduce in class WorkLocation
        Returns:
        True if this work location can produce goods without workers.
      • canProduce

        public boolean canProduce​(GoodsType goodsType,
                                  UnitType unitType)
        Can this work location produce a given goods type with an optional unit.
        Specified by:
        canProduce in class WorkLocation
        Parameters:
        goodsType - The GoodsType to produce.
        unitType - An optional UnitType, if null the unattended production is considered.
        Returns:
        True if this location can produce the goods.
      • getBaseProduction

        public int getBaseProduction​(ProductionType productionType,
                                     GoodsType goodsType,
                                     UnitType unitType)
        Gets the base production of a given goods type optionally using a unit of a given type in this work location. That is, the production exclusive of any modifiers. If no unit type is specified, the unattended production is calculated.
        Specified by:
        getBaseProduction in class WorkLocation
        Parameters:
        productionType - An optional ProductionType to use, if null the best available one is used.
        goodsType - The GoodsType to produce.
        unitType - An optional UnitType to produce the goods.
        Returns:
        The amount of goods potentially produced.
      • getProductionModifiers

        public java.util.stream.Stream<Modifier> getProductionModifiers​(GoodsType goodsType,
                                                                        UnitType unitType)
        Gets the production modifiers for the given type of goods and unit type. If no unit is specified the unattended production is calculated.
        Specified by:
        getProductionModifiers in class WorkLocation
        Parameters:
        goodsType - The GoodsType to produce.
        unitType - The optional UnitType to produce them.
        Returns:
        A stream of the applicable modifiers.
      • getAvailableProductionTypes

        public java.util.List<ProductionType> getAvailableProductionTypes​(boolean unattended)
        Get the production types available for this work location.
        Specified by:
        getAvailableProductionTypes in class WorkLocation
        Parameters:
        unattended - If true, get unattended production types.
        Returns:
        A list of suitable ProductionTypes.
      • getCompetenceFactor

        public float getCompetenceFactor()
        Get a work location specific factor to multiply any goods-specific unit production bonuses by.
        Specified by:
        getCompetenceFactor in class WorkLocation
        Returns:
        The competence factor.
      • getRebelFactor

        public float getRebelFactor()
        Get a work location specific factor to multiply the colony rebel bonus by.
        Specified by:
        getRebelFactor in class WorkLocation
        Returns:
        The rebel factor.
      • getClaimTemplate

        public StringTemplate getClaimTemplate()
        Gets a template describing whether this work location can/needs-to be claimed. To be overridden by classes where this is meaningful. This is a default null implementation.
        Overrides:
        getClaimTemplate in class WorkLocation
        Returns:
        A suitable template.
      • copyIn

        public <T extends FreeColObject> boolean copyIn​(T other)
        Copy another FreeColObject into this one if it is compatible.
        Overrides:
        copyIn in class WorkLocation
        Type Parameters:
        T - The FreeColObject subclass of the object to copy in.
        Parameters:
        other - The other object.
        Returns:
        True if the copy in is succesful.
      • getDisplayObject

        public FreeColObject getDisplayObject()
        Get an object to display when showing the user messages for this object. Example: If this object is a Building, the object to display will be the BuildingType.
        Overrides:
        getDisplayObject in class FreeColObject
        Returns:
        A suitable FreeColObject to display, defaults to this.
      • 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 class WorkLocation
        Parameters:
        xw - The FreeColXMLWriter 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 class WorkLocation
        Parameters:
        xr - The FreeColXMLReader 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 class FreeColObject
        Returns:
        The tag.