Class Legion

java.lang.Object
net.sf.colossus.game.Legion
Direct Known Subclasses:
LegionClientSide, LegionServerSide

public abstract class Legion extends Object
  • Field Details

    • ORDER_TITAN_THEN_POINTS

      public static final Comparator<Legion> ORDER_TITAN_THEN_POINTS
      A comparator to order legions by points, with Titan armies first. This only works properly if all legions are owned by the same player. The case of two legions with titans is not handled. WARNING: This is not consistent with equals() since two legions with the same point value are considered equal.
    • ORDER_TITAN_THEN_POINTS_THEN_MARKER

      public static final Comparator<Legion> ORDER_TITAN_THEN_POINTS_THEN_MARKER
      A comparator to order legions by points, with Titan armies first. If same points, by MarkerId. This only works properly if all legions are owned by the same player. The case of two legions with titans is not handled.
    • player

      private final Player player
      The player/game combination owning this Legion. Never null.
    • currentHex

      private MasterHex currentHex
      The current position of the legion on the masterboard. Never null.
    • creatures

      private final List<Creature> creatures
      The creatures in this legion.
    • markerId

      private final String markerId
      The ID of the marker of this legion. Used as identifier for serialization purposes. Never null.
    • moved

      private boolean moved
      Flag if the legion has moved in the current masterboard round.
    • teleported

      private boolean teleported
      Flag if the legion has teleported in the current masterboard round.
    • entrySide

      private EntrySide entrySide
      The side this legion entered a battle in.
    • decisions

      protected List<Legion.AcquirableDecision> decisions
    • angelsToAcquire

      protected int angelsToAcquire
    • recruit

      private CreatureType recruit
      The creature recruited in last recruit phase
    • skipThisTime

      private boolean skipThisTime
      Flag to remember a "skip (split|move|recruit) this time"
    • visitedThisPhase

      private boolean visitedThisPhase
      Flag to remember that legion has been visited this phase
  • Constructor Details

  • Method Details

    • getPlayer

      public Player getPlayer()
      Retrieves the player this legion belongs to.
      Returns:
      The matching player. Never null.
    • setCurrentHex

      public void setCurrentHex(MasterHex newPosition)
      Places the legion into the new position.
      Parameters:
      newPosition - the hex that will be the new position. Not null.
      See Also:
    • getCurrentHex

      public MasterHex getCurrentHex()
      Returns the current position of the legion.
      Returns:
      the hex the legion currently is on.
      See Also:
    • getCreatures

      public List<? extends Creature> getCreatures()
      TODO should be an unmodifiable List, but can't at the moment since both derived classes and users might still expect to change it TODO should be List, but subtypes are still covariant
    • getMarkerId

      public String getMarkerId()
    • getLongMarkerId

      public String getLongMarkerId()
    • hasTitan

      public boolean hasTitan()
    • getTitan

      public Creature getTitan()
      Returns:
      returns the Titan Creature, if this legions has the titan, or null if it hasn't.
    • getHeight

      public int getHeight()
      Returns the number of creatures in this legion.
      Returns:
      the number of creatures in the legion
    • setMoved

      public void setMoved(boolean moved)
    • hasMoved

      public boolean hasMoved()
    • setTeleported

      public void setTeleported(boolean teleported)
    • hasTeleported

      public boolean hasTeleported()
    • setSkipThisTime

      public void setSkipThisTime(boolean skipIt)
    • getSkipThisTime

      public boolean getSkipThisTime()
    • setVisitedThisPhase

      public void setVisitedThisPhase(boolean visited)
    • getVisitedThisPhase

      public boolean getVisitedThisPhase()
    • contains

      public boolean contains(CreatureType type)
    • addCreature

      public abstract void addCreature(CreatureType type)
    • removeCreature

      public abstract void removeCreature(CreatureType type)
    • setEntrySide

      public void setEntrySide(EntrySide entrySide)
    • getEntrySide

      public EntrySide getEntrySide()
    • getPointValue

      public abstract int getPointValue()
      TODO unify between the two derived classes if possible -- the handling of Titans is quite different, although it should have the same result
    • getRecruit

      public CreatureType getRecruit()
    • setRecruit

      public void setRecruit(CreatureType recruit)
    • hasRecruited

      public boolean hasRecruited()
    • hasSummonable

      public boolean hasSummonable()
    • canFlee

      public boolean canFlee()
    • numCreature

      public int numCreature(CreatureType creatureType)
    • numLords

      public int numLords()
    • numRangestrikers

      public int numRangestrikers()
    • setupAcquirableDecisions

      public void setupAcquirableDecisions(int score, int points)
      Calculate the acquirableDecisions and store them in the legion.
      Parameters:
      score -
      points -
    • calculateAcquirableDecisions

      List<Legion.AcquirableDecision> calculateAcquirableDecisions(int score, int points)
      From the given score, awarding given points, calculate the choices for each threshold that will be crossed. E.g. 375+150 => 525 will cross 400 and 500, so one has to make two decisions: 400: take angel (or not); 500: take angel, archangel (or nothing). This only calculates them, does not set them in the legion yet; so a client or AI could use this for theoretical calculations "how much / which angels would I get if..." without modifying the legions state itself. The limits for "which one can get" due to legion height, creatures left count and terrain are considered (implicitly, because findEligibleAngels(tmpScore) checks them).
      Parameters:
      score - Current score of player
      points - Points to be added which entitle to acquiring
      Returns:
      List of decisions
    • getCreatureTypes

      public List<CreatureType> getCreatureTypes()
      Retrieves a list of all creature types in this legion. This matches getCreatures() but lists the types instead of the individual creatures.
      Returns:
      A list of all creature types in this legion.
    • findEligibleAngels

      public List<CreatureType> findEligibleAngels(int points)
      Calculate which angels this legion can get in its current land when crossing the given points threshold
      Parameters:
      points - Score threshold (100, ..., 400, 500) for which to get angel
      Returns:
      list of creatures that can be get at that threshold
    • toString

      public final String toString()
      Returns the markerId for debug and serialisation purposes. Since this is relevant for the network protocol, the method is declared final.
      Overrides:
      toString in class Object
    • hashCode

      public final int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public final boolean equals(Object obj)
      Two legions are considered equal if they have the same marker. Even though contents may change over time, we consider two legions to be the same as long as they have the same marker. This notion of equality is used throughout the code, so we enforce it by having both {equals(Object) and hashCode() declared final.
      Overrides:
      equals in class Object