Class Embellishment0

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

public class Embellishment0 extends Decorator implements TranslatablePiece
Embellishment has been extensively re-written for Vassal 3.2 changing both the behavior and the visual look of the configurer. A version number has been added to distinguish between the two versions. Note, there is also a much older Embellishment trait with a type of emb When editing a module, the old versions will be automatically converted to the new version. One feature (multiple keystrokes for a command) cannot be converted. This class contains the complete code of the original version 0 emb2 Embellishment to support editing of unconverted version 0 Embellishments and run-time support for modules containing unconverted traits. This is essentially the latest 3.1 version of Embellishment
  • Field Details

    • OLD_ID

      public static final String OLD_ID
      See Also:
      Constant Field Values
    • ID

      public static final String ID
      See Also:
      Constant Field Values
    • IMAGE

      public static final String IMAGE
      See Also:
      Constant Field Values
    • NAME

      public static final String NAME
      See Also:
      Constant Field Values
    • LEVEL

      public static final String LEVEL
      See Also:
      Constant Field Values
    • ACTIVE

      public static final String ACTIVE
      See Also:
      Constant Field Values
    • activateKey

      protected String activateKey
    • upKey

      protected String upKey
    • downKey

      protected String downKey
    • activateModifiers

      protected int activateModifiers
    • upModifiers

      protected int upModifiers
    • downModifiers

      protected int downModifiers
    • upCommand

      protected String upCommand
    • downCommand

      protected String downCommand
    • activateCommand

      protected String activateCommand
    • resetCommand

      protected String resetCommand
    • resetLevel

      protected FormattedString resetLevel
    • loopLevels

      protected boolean loopLevels
    • resetKey

      protected KeyStroke resetKey
    • followProperty

      protected boolean followProperty
    • propertyName

      protected String propertyName
    • firstLevelValue

      protected int firstLevelValue
    • rndKey

      protected KeyStroke rndKey
    • value

      protected int value
    • activationStatus

      protected String activationStatus
    • nValues

      protected int nValues
    • xOff

      protected int xOff
    • yOff

      protected int yOff
    • imageName

      protected String[] imageName
    • commonName

      protected String[] commonName
    • size

      protected Rectangle[] size
    • imagePainter

      protected ScaledImagePainter[] imagePainter
    • drawUnderneathWhenSelected

      protected boolean drawUnderneathWhenSelected
    • name

      protected String name
    • commands

      protected KeyCommand[] commands
    • up

      protected KeyCommand up
    • down

      protected KeyCommand down
    • lastBounds

      protected Rectangle lastBounds
    • lastShape

      protected Area lastShape
  • Constructor Details

    • Embellishment0

      public Embellishment0()
    • Embellishment0

      public Embellishment0(String type, GamePiece d)
  • Method Details

    • isActive

      public boolean isActive()
    • setActive

      public void setActive(boolean val)
    • getValue

      public int getValue()
    • setValue

      public void setValue(int val)
      Set the current level - First level = 0 Does not change the active status
      Parameters:
      val - Value to set
    • mySetType

      public void mySetType(String s)
      Description copied from interface: EditablePiece
      Sets the information for this piece. See Decorator.myGetType()
      Specified by:
      mySetType in interface EditablePiece
      Parameters:
      s - 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()
    • getLocalizedName

      public String getLocalizedName()
      Description copied from interface: GamePiece
      And the translated name for this piece
      Specified by:
      getLocalizedName in interface GamePiece
      Overrides:
      getLocalizedName in class Decorator
      Returns:
      the translated name for this piece. Most pieces do not have translatable elements, so just return the standard name
    • getName

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

      public String getName(boolean localized)
    • mySetState

      public void mySetState(String s)
      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.
      Specified by:
      mySetState in class Decorator
      Parameters:
      s - New state information serialized in string form, ready to be passed to a 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.
      Specified by:
      myGetType in class Decorator
      Returns:
      the type information of this trait alone
      See Also:
      BasicCommandEncoder, which returns type information for all inward piece members as well
    • oldGetType

      @Deprecated(since="2020-08-06", forRemoval=true) public String oldGetType()
      Deprecated, for removal: This API element is subject to removal in a future version.
      No Replacement
    • 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.
      Specified by:
      myGetState in class Decorator
      Returns:
      the game state information of this trait alone
      See Also:
      which returns state information for all inward piece members as well
    • 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
      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.
    • checkPropertyLevel

      protected void checkPropertyLevel()
    • myGetKeyCommands

      public KeyCommand[] myGetKeyCommands()
      Specified by:
      myGetKeyCommands in class Decorator
      Returns:
      the key commands for this trait alone
      See Also:
      which returns the key commands for this trait AND all inner piece members
    • 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()).
      Specified by:
      myKeyEvent in class Decorator
      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:
      Decorator.keyEvent(javax.swing.KeyStroke)
    • getCurrentImage

      @Deprecated(since="2020-08-06", forRemoval=true) protected Image getCurrentImage() throws IOException
      Deprecated, for removal: This API element is subject to removal in a future version.
      Use ImageOp.getImage() instead.
      Throws:
      IOException
    • boundingBox

      public Rectangle boundingBox()
      Specified by:
      boundingBox in interface GamePiece
      Returns:
      The area which this GamePiece occupies when drawn at the point (0,0)
    • getCurrentImageBounds

      public Rectangle getCurrentImageBounds()
    • getShape

      public Shape getShape()
      Return the Shape of the counter by adding the shape of this layer to the shape of all inner traits. Minimize generation of new Area objects.
      Specified by:
      getShape in interface GamePiece
      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.
    • getDescription

      public String getDescription()
      Description copied from interface: EditablePiece
      A plain-English description of this type of piece
      Specified by:
      getDescription in interface EditablePiece
    • 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 Decorator
      Parameters:
      key - String key of property to be returned
      Returns:
      Object containing new value of the specified 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 Decorator
      Parameters:
      key - String key of property to be returned
      Returns:
      Object containing localized text of the specified property, if available, otherwise non-localized value
    • strip

      protected String strip(String s)
    • getCommonName

      protected String getCommonName(boolean localized, int i)
      Get the name of this level (alone)
    • getLocalizedCommonName

      protected String getLocalizedCommonName(int i)
      Get the localized name of this level (alone)
    • getHelpFile

      public HelpFile getHelpFile()
      Specified by:
      getHelpFile in interface EditablePiece
      Returns:
      the help file for this trait
    • getEditor

      public PieceEditor getEditor()
      Specified by:
      getEditor in interface EditablePiece
      Overrides:
      getEditor in class Decorator
      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.
    • getLayerWithMatchingActivateCommand

      public static Embellishment getLayerWithMatchingActivateCommand(GamePiece piece, KeyStroke stroke, boolean active)
      If the argument GamePiece contains a Layer whose "activate" command matches the given keystroke, and whose active status matches the boolean argument, return that Layer
    • 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 Decorator
      Returns:
      I18n data, used to hold translations of strings
    • addLocalImageNames

      public void addLocalImageNames(Collection<String> s)
      Description copied from class: AbstractImageFinder
      Classes extending AbstractImageFinder should override this method in order to add the names of any image files they use to the collection.
      Specified by:
      addLocalImageNames in interface ImageSearchTarget
      Overrides:
      addLocalImageNames in class AbstractImageFinder
      Parameters:
      s - Collection to add image names to