Class Footprint

All Implemented Interfaces:
PropertyNameSource, PropertySource, EditablePiece, GamePiece, PropertyExporter, StateMergeable, TranslatablePiece, PersistentPropertyContainer, Auditable, ImageSearchTarget, SearchTarget

public class Footprint extends MovementMarkable
Displays a movement trail indicating where a piece has been moved
  • Field Details

    • ID

      public static final String ID
      See Also:
    • globalVisibility

      protected boolean globalVisibility
    • startMapId

      protected String startMapId
    • pointList

      protected List<Point> pointList
    • trailKey

      protected NamedKeyStroke trailKey
    • trailKeyOn

      protected NamedKeyStroke trailKeyOn
    • trailKeyOff

      protected NamedKeyStroke trailKeyOff
    • trailKeyClear

      protected NamedKeyStroke trailKeyClear
    • initiallyVisible

      protected boolean initiallyVisible
    • globallyVisible

      protected boolean globallyVisible
    • circleRadius

      protected int circleRadius
    • selectedTransparency

      protected int selectedTransparency
    • unSelectedTransparency

      protected int unSelectedTransparency
    • lineColor

      protected Color lineColor
    • fillColor

      protected Color fillColor
    • edgePointBuffer

      protected int edgePointBuffer
    • edgeDisplayBuffer

      protected int edgeDisplayBuffer
    • description

      protected String description
    • DEFAULT_TRAIL_KEY

      protected static final char DEFAULT_TRAIL_KEY
      See Also:
    • DEFAULT_MENU_COMMAND

      protected static final String DEFAULT_MENU_COMMAND
    • DEFAULT_INITIALLY_VISIBLE

      protected static final Boolean DEFAULT_INITIALLY_VISIBLE
    • DEFAULT_GLOBALLY_VISIBLE

      protected static final Boolean DEFAULT_GLOBALLY_VISIBLE
    • DEFAULT_CIRCLE_RADIUS

      protected static final int DEFAULT_CIRCLE_RADIUS
      See Also:
    • DEFAULT_FILL_COLOR

      protected static final Color DEFAULT_FILL_COLOR
    • DEFAULT_LINE_COLOR

      protected static final Color DEFAULT_LINE_COLOR
    • DEFAULT_SELECTED_TRANSPARENCY

      protected static final int DEFAULT_SELECTED_TRANSPARENCY
      See Also:
    • DEFULT_UNSELECTED_TRANSPARENCY

      protected static final int DEFULT_UNSELECTED_TRANSPARENCY
      See Also:
    • DEFAULT_EDGE_POINT_BUFFER

      protected static final int DEFAULT_EDGE_POINT_BUFFER
      See Also:
    • DEFAULT_EDGE_DISPLAY_BUFFER

      protected static final int DEFAULT_EDGE_DISPLAY_BUFFER
      See Also:
    • LINE_WIDTH

      protected static final float LINE_WIDTH
      See Also:
    • myBoundingBox

      protected Rectangle myBoundingBox
    • font

      protected Font font
    • lastZoom

      protected double lastZoom
    • localVisibility

      protected boolean localVisibility
    • initialized

      protected boolean initialized
    • everInitialized

      protected boolean everInitialized
    • lineWidth

      protected double lineWidth
  • Constructor Details

    • Footprint

      public Footprint()
    • Footprint

      public Footprint(String type, GamePiece p)
  • Method Details

    • mySetState

      public void mySetState(String newState)
      Description copied from class: Decorator
      Sets the state of this-trait-only (inverse of Decorator.myGetState()). The "state information" is information that can change during the course of a game. State information is saved when the game is saved and is transferred between players on the server. For example, the relative order of pieces in a stack is state information, but whether the stack is expanded is not.
      Overrides:
      mySetState in class MovementMarkable
      Parameters:
      newState - New state information serialized in string form, ready to be passed to a SequenceEncoder#decode.
    • myGetState

      public String myGetState()
      Description copied from class: Decorator
      The "state information" is "game state" information that can change during the course of a game. State information is saved when the game is saved and is transferred between players on the server. For example, the relative order of pieces in a stack is state information, but whether the stack is expanded is not.
      Overrides:
      myGetState in class MovementMarkable
      Returns:
      the game state information of this trait alone
      See Also:
    • mySetType

      public void mySetType(String type)
      Type is the character command that toggles footprint visibility
      Specified by:
      mySetType in interface EditablePiece
      Overrides:
      mySetType in class MovementMarkable
      Parameters:
      type - a serialized configuration string to set the "type information" of this piece, which is information that doesn't change during the course of a single game (e.g. Image Files, Context Menu strings, etc). Typically ready to be processed e.g. by SequenceEncoder.decode()
    • myGetType

      public String myGetType()
      Description copied from class: Decorator
      The "type information" of a piece or trait is information that does not change during the course of a game. Image file names, context menu strings, etc., all should be reflected in the type. The type information is returned serialized string form, ready to be decoded by a SequenceEncoder#decode.
      Overrides:
      myGetType in class MovementMarkable
      Returns:
      the type information of this trait alone
      See Also:
    • getNamedKeyStrokeList

      public List<NamedKeyStroke> getNamedKeyStrokeList()
      Description copied from class: Decorator
      Specified by:
      getNamedKeyStrokeList in interface SearchTarget
      Overrides:
      getNamedKeyStrokeList in class MovementMarkable
      Returns:
      a list of any Named KeyStrokes referenced in the Decorator, if any (for search)
    • getMenuTextList

      public List<String> getMenuTextList()
      Description copied from class: Decorator
      Specified by:
      getMenuTextList in interface SearchTarget
      Overrides:
      getMenuTextList in class MovementMarkable
      Returns:
      a list of any Menu Text strings referenced in the Decorator, if any (for search)
    • setProperty

      public void setProperty(Object key, Object val)
      Description copied from class: Decorator
      Within a Trait/Decorator, the default behavior when setting a property is to handle changing our own inner/outer links directly, to cache the selection state (while also passing it inward), and to simply pass every other property change request inward. A Trait with its own properties to maintain would intercept and process those requests, while sending the rest inward to the next member of the piece.

      Properties can be associated with a piece -- many may be game-specific, but others are standard, such as the LocationName property exposed by BasicPiece -- and can be set through this interface. The properties may or may not need to be encoded in the piece's Decorator.getState() method. Properties include the value of e.g. Marker Traits, DynamicProperty Traits, and so forth.

      NOTE: Not all properties maintained by traits can be "set" by setProperty, even though they can be read by getProperty -- they may be "read only" for instance. You will need to check the code for individual traits to see what they support in this regard.

      NOTE: Properties outside the piece CANNOT be set by this method (e.g. Global Properties), even though they can be read by Decorator.getProperty(java.lang.Object) -- in this the two methods are not perfect mirrors.
      Specified by:
      setProperty in interface GamePiece
      Overrides:
      setProperty in class MovementMarkable
      Parameters:
      key - String key of property to be changed
      val - Object containing new value of the property
    • getLocalizedProperty

      public Object getLocalizedProperty(Object key)
      Description copied from class: Decorator
      Returns a localized translation of the specified property value, if available. Otherwise returns the non-localized version. See Decorator.getProperty(java.lang.Object).
      Specified by:
      getLocalizedProperty in interface PropertySource
      Overrides:
      getLocalizedProperty in class MovementMarkable
      Parameters:
      key - String key of property to be returned
      Returns:
      Object containing localized text of the specified property, if available, otherwise non-localized value
    • getProperty

      public Object getProperty(Object key)
      Description copied from class: Decorator
      Properties can be associated with a piece -- many may be game-specific, but others are standard, such as the LocationName property exposed by BasicPiece -- and can be read through this interface. The properties may or may not need to be encoded in the piece's Decorator.getState() method. Properties include the value of e.g. Marker Traits, DynamicProperty Traits, and so forth. Furthermore they include the values of any visible "Global Property" in a Vassal module, whether at the module level, map level, or zone level -- but these "higher level" properties, coming from "outside the piece", CANNOT be written to by the Decorator.setProperty(java.lang.Object, java.lang.Object) method even though they can be read by this method -- in this sense the two methods are NOT perfect mirrors.

      Within a Trait/Decorator, default behavior is to process some requests directly (e.g. requests for our "inner" or "outer" link), process our *part* of certain other requests (e.g. request for our game state information we supply state information for this trait and then append any information obtained from passing the same request inward), and then for any other requests that we cannot process we simply pass the request to the next trait/member inward.

      When using this interface a piece's own properties are preferred to those of "Global Properties", and those in turn are searched Zone-first then Map, then Module.

      This method implements the PropertySource interface, which allows Global Properties to be read by other types of object than GamePieces.
      Specified by:
      getProperty in interface GamePiece
      Specified by:
      getProperty in interface PropertySource
      Overrides:
      getProperty in class MovementMarkable
      Parameters:
      key - String key of property to be returned
      Returns:
      Object containing new value of the specified property
    • setMoved

      public void setMoved(boolean justMoved)
      setMoved is called with an argument of true each time the piece is moved. The argument is false when the unit is marked as not moved.
      Overrides:
      setMoved in class MovementMarkable
    • recordCurrentPosition

      protected void recordCurrentPosition()
    • clearTrail

      protected void clearTrail()
    • getHelpFile

      public HelpFile getHelpFile()
      Specified by:
      getHelpFile in interface EditablePiece
      Overrides:
      getHelpFile in class MovementMarkable
      Returns:
      the help file for this trait
    • addPoint

      protected void addPoint(Point p)
      Add Point to list and adjust the overall boundingBox to encompass the trail.
    • redraw

      public void redraw()
    • getDescription

      public String getDescription()
      Description copied from interface: EditablePiece
      A plain-English description of this type of trait/piece - includes data from fields where appropriate
      Specified by:
      getDescription in interface EditablePiece
      Overrides:
      getDescription in class MovementMarkable
    • getBaseDescription

      public String getBaseDescription()
      Description copied from interface: EditablePiece
      Support for a basic-name-only description introduced later, so this default retrofits it from the full description if an explicit one is not defined.
      Specified by:
      getBaseDescription in interface EditablePiece
      Overrides:
      getBaseDescription in class MovementMarkable
      Returns:
      name of trait/piece type, w/o additional data
    • getDescriptionField

      public String getDescriptionField()
      Description copied from class: Decorator
      If Decorator contains a description *field*, returns the current contents of it.
      Overrides:
      getDescriptionField in class MovementMarkable
      Returns:
      contents of "description" field, if it exists.
    • draw

      public void draw(Graphics g, int x, int y, Component obs, double zoom)
      Description copied from interface: GamePiece
      Draw this GamePiece
      Specified by:
      draw in interface GamePiece
      Overrides:
      draw in class MovementMarkable
      Parameters:
      g - target Graphics object
      x - x-location of the center of the piece
      y - y-location of the center of the piece
      obs - the Component on which this piece is being drawn
      zoom - the scaling factor.
    • drawPoint

      protected void drawPoint(Graphics g, Point p, double zoom, int elementCount)
      Draw a Circle at the given point. Override this method to do something different (eg. display an Icon)
    • drawTrack

      protected void drawTrack(Graphics g, int x1, int y1, int x2, int y2, double zoom)
      Draw a track from one Point to another. Don't draw under the circle as it shows through with transparency turned on.
    • getTrailImage

      protected Image getTrailImage(int elementCount)
      Override this method to return an Image to display within each trail circle
    • getTrailText

      protected String getTrailText(int elementCount)
      Override this method to return text to display within each trail circle. Note, there will normally be only room for 1 character.
    • isTrailVisible

      protected boolean isTrailVisible()
      Global Visibility means all players see the same trail Local Visibility means each player controls their own trail visibility
    • boundingBox

      public Rectangle boundingBox()
      Return a bounding box covering the whole trail if it is visible, otherwise just return the standard piece bounding box
      Specified by:
      boundingBox in interface GamePiece
      Overrides:
      boundingBox in class MovementMarkable
      Returns:
      The area which this GamePiece occupies when drawn at the point (0,0)
    • getMyBoundingBox

      public Rectangle getMyBoundingBox()
      Return the boundingBox including the trail
    • getShape

      public Shape getShape()
      Specified by:
      getShape in interface GamePiece
      Overrides:
      getShape in class MovementMarkable
      Returns:
      The shape of the piece from the user's viewpoint. This defines the area in which the user must click to select or move the piece, for example. Like GamePiece.boundingBox(), it assumes the position is (0,0) -- which to be clear is normally aligned with the CENTER of the piece image -- and must be translated to the actual location where the piece is being drawn. For most ordinary pieces, the shape returned here will simply be equivalent to the bounding box, but see NonRectangular.
    • getName

      public String getName()
      Description copied from interface: GamePiece
      The plain English name for this piece
      Specified by:
      getName in interface GamePiece
      Overrides:
      getName in class MovementMarkable
    • myGetKeyCommands

      public KeyCommand[] myGetKeyCommands()
      Overrides:
      myGetKeyCommands in class MovementMarkable
      Returns:
      the key commands for this trait alone
      See Also:
    • myKeyEvent

      public Command myKeyEvent(KeyStroke stroke)
      Description copied from class: Decorator
      The response of this trait alone to the given KeyStroke or the virtual keystroke of a NamedKeyStroke. NamedKeyStrokes are allocated a unique internal KeyStroke when they are first used in a module, and that KeyStroke is passed up and down the decorator stack to represent them (see NamedKeyStroke.getKeyStroke()).
      Overrides:
      myKeyEvent in class MovementMarkable
      Parameters:
      stroke - KeyStroke to apply (to apply a Named Keystroke send NamedKeyStroke.getKeyStroke()
      Returns:
      Generated Command to reproduce any changes just made to to the game state, or null if no effect
      See Also:
    • requireNoOuterRotate

      public void requireNoOuterRotate()
      Displays a Bad Module Data warning if a movement trails trait is found inside of a rotation trait
    • getEditor

      public PieceEditor getEditor()
      Specified by:
      getEditor in interface EditablePiece
      Overrides:
      getEditor in class MovementMarkable
      Returns:
      the configurer for this trait - the dialog which allows the editing the piece's type information. Default configurer is a SimplePieceEditor, but many traits will want to provide custom versions.
    • getI18nData

      public PieceI18nData getI18nData()
      Description copied from class: Decorator
      Return Internationalization (I18n) data for this piece
      Specified by:
      getI18nData in interface TranslatablePiece
      Overrides:
      getI18nData in class MovementMarkable
      Returns:
      I18n data, used to hold translations of strings
    • testEquals

      public boolean testEquals(Object o)
      Description copied from class: Decorator
      Test if this Decorator's Class, Type and State are equal to another trait. Implementations of this method should compare the individual values of the fields that make up the Decorators Type and State. Implementations should NOT compare the values returned by myGetType() or myGetState(). This method is intended to be used by Unit Tests to verify that a trait is unchanged after going through a process such as serialization/deserialization.
      Overrides:
      testEquals in class MovementMarkable
      Parameters:
      o - Object to compare this Decorator to
      Returns:
      true if the Class, type and state all match