Package VASSAL.counters
Class Embellishment
java.lang.Object
VASSAL.search.AbstractImageFinder
VASSAL.counters.Decorator
VASSAL.counters.Embellishment
- All Implemented Interfaces:
PropertyNameSource,PropertySource,EditablePiece,GamePiece,PropertyExporter,StateMergeable,TranslatablePiece,PersistentPropertyContainer,Auditable,ImageSearchTarget,SearchTarget,RecursionLimiter.Loopable
public class Embellishment
extends Decorator
implements TranslatablePiece, RecursionLimiter.Loopable
d/b/a "Layer"
The "Layer" trait. Contains a list of images that the user may cycle through.
The current image is superimposed over the inner piece. The entire layer may
be activated or deactivated.
Changes to support NamedKeyStrokes:
- Random and reset command changed directly to Name Key Strokes.
- Disentangle alwaysActive flag from length of activateKey field. Make a
separate field and save in type
- Add a Version field to type to enable conversion of Activate/Increase/Decrease
commands. Note commands with more than 1 target keycode cannot be converted
- Simplify code. Removed Version 0 (3.1) code to a separate class Embellishment0. The BasicCommandEncoder
replaces this class with an Embellishment0 if Embellishment(type, inner) returns
a version 0 Embellishment trait.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classReturn Property names exposed by this trait -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected Stringprotected Stringprotected NamedKeyStrokeprotected intstatic final Stringprotected booleanstatic final intprotected KeyCommand[]protected String[]static final intprotected NamedKeyStrokeprotected Stringprotected KeyCommandprotected Stringprotected Stringprotected intprotected booleanprotected intprotected booleanprotected Expressionstatic final Stringstatic final Stringprotected String[]protected ScaledImagePainter[]protected NamedKeyStrokeprotected RectangleDeprecated, for removal: This API element is subject to removal in a future version.protected AreaDeprecated, for removal: This API element is subject to removal in a future version.static final Stringprotected booleanprotected Stringstatic final Stringprotected intstatic final Stringprotected Stringprotected Stringprotected Stringprotected Stringprotected NamedKeyStrokeprotected FormattedStringprotected NamedKeyStrokeprotected doubleprotected Rectangle[]protected KeyCommandprotected Stringprotected Stringprotected intprotected intprotected intprotected intprotected intFields inherited from interface VASSAL.counters.PropertyExporter
LOCALIZED_NAMEFields inherited from interface VASSAL.i18n.TranslatablePiece
PREFIX -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidClasses extending AbstractImageFinder should override this method in order to add the names of any image files they use to the collection.booleanCan this Layer be Activated? Old-style depended on checking if any activation keys where specified.protected booleancheckProperty(String name) protected voidprotected voidprotected voidvoidDraw this GamePieceSupport for a basic-name-only description introduced later, so this default retrofits it from the full description if an explicit one is not defined.protected StringgetCommonName(boolean localized, int i) Get the name of this level (alone)A plain-English description of this type of trait/piece - includes data from fields where appropriateIf Decorator contains a description *field*, returns the current contents of it.Return Internationalization (I18n) data for this pieceReturn raw Embellishment namestatic EmbellishmentgetLayerWithMatchingActivateCommand(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 Layerstatic EmbellishmentgetLayerWithMatchingActivateCommand(GamePiece piece, NamedKeyStroke stroke, boolean active) protected StringgetLocalizedCommonName(int i) Get the localized name of this level (alone)And the translated name for this pieceReturns a localized translation of the specified property value, if available.getName()The plain English name for this piecegetName(boolean localized) getProperty(Object key) 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.getShape()Return the Shape of the counter by adding the shape of this layer to the shape of all inner traits.intgetValue()intbooleanisActive()The "state information" is "game state" information that can change during the course of a game.The "type information" of a piece or trait is information that does not change during the course of a game.myKeyEvent(KeyStroke stroke) The response of this trait alone to the given KeyStroke or the virtual keystroke of aNamedKeyStroke.voidmySetState(String s) Sets the state of this-trait-only (inverse ofDecorator.myGetState()).voidSets the information for this piece.voidsetActive(boolean act) voidsetValue(int level) Set the current level; Does not change the active statusprotected StringbooleantestEquals(Object o) Test if this Decorator's Class, Type and State are equal to another trait.Methods inherited from class VASSAL.counters.Decorator
addImageNamesRecursively, addMenuCommand, buildDescription, buildDescription, buildDescription, getCommandDesc, getCommandDescription, getComponentName, getComponentTypeName, getDecorator, getDecorators, getI18nData, getI18nData, getId, getInner, getInnermost, getKeyCommands, getMap, getOuter, getOutermost, getParent, getPersistentProperty, getPosition, getProperties, getState, getTranslation, getType, isMenuCommand, isSelected, keyEvent, mergeState, putOldProperties, repack, repack, reportDataError, reportDataError, reportDataError, setDynamicProperties, setDynamicProperties, setDynamicProperty, setId, setInner, setMap, setParent, setPersistentProperty, setPosition, setProperty, setSelected, setState, toStringMethods inherited from class VASSAL.search.AbstractImageFinder
getAllImageNames, getLocalImageNamesMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface VASSAL.script.expression.Auditable
getComponentName, getComponentTypeNameMethods inherited from interface VASSAL.counters.EditablePiece
checkTrueMoved, finishMove, finishMove, prepareMoveMethods inherited from interface VASSAL.counters.GamePiece
getId, getMap, getParent, getPosition, getState, getType, keyEvent, setId, setMap, setParent, setPosition, setProperty, setStateMethods inherited from interface VASSAL.search.ImageSearchTarget
getAllImageNames, getLocalImageNamesMethods inherited from interface VASSAL.counters.PropertyExporter
getProperties
-
Field Details
-
OLD_ID
- See Also:
-
ID
- See Also:
-
IMAGE
- See Also:
-
NAME
- See Also:
-
LEVEL
- See Also:
-
ACTIVE
- See Also:
-
activateKey
-
upKey
-
downKey
-
activateModifiers
protected int activateModifiers -
upModifiers
protected int upModifiers -
downModifiers
protected int downModifiers -
upCommand
-
downCommand
-
activateCommand
-
resetCommand
-
resetLevel
-
loopLevels
protected boolean loopLevels -
resetKey
-
followProperty
protected boolean followProperty -
propertyName
-
followPropertyExpression
-
firstLevelValue
protected int firstLevelValue -
onlyPropertyName
-
onlyPropertyState
-
rndKey
-
value
protected int value -
nValues
protected int nValues -
xOff
protected int xOff -
yOff
protected int yOff -
imageName
-
commonName
-
size
-
imagePainter
-
drawUnderneathWhenSelected
protected boolean drawUnderneathWhenSelected -
name
-
commands
-
up
-
down
-
lastBounds
Deprecated, for removal: This API element is subject to removal in a future version. -
lastShape
Deprecated, for removal: This API element is subject to removal in a future version. -
BASE_VERSION
public static final int BASE_VERSION- See Also:
-
CURRENT_VERSION
public static final int CURRENT_VERSION- See Also:
-
version
protected int version -
alwaysActive
protected boolean alwaysActive -
activateKeyStroke
-
increaseKeyStroke
-
decreaseKeyStroke
-
description
-
scale
protected double scale
-
-
Constructor Details
-
Embellishment
public Embellishment() -
Embellishment
-
-
Method Details
-
isActive
public boolean isActive() -
setActive
public void setActive(boolean act) -
getValue
public int getValue() -
setValue
public void setValue(int level) Set the current level; Does not change the active status- Parameters:
level- 0-based level to set
-
mySetType
Description copied from interface:EditablePieceSets the information for this piece. SeeDecorator.myGetType()- Specified by:
mySetTypein interfaceEditablePiece- 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()
-
canBeActivated
public boolean canBeActivated()Can this Layer be Activated? Old-style depended on checking if any activation keys where specified. New-stule maintains a separate alwaysActive variable- Returns:
- true if this layer trait has an activate command
-
getLocalizedName
Description copied from interface:GamePieceAnd the translated name for this piece- Specified by:
getLocalizedNamein interfaceGamePiece- Overrides:
getLocalizedNamein classDecorator- Returns:
- the translated name for this piece. Most pieces do not have translatable elements, so just return the standard name
-
getName
Description copied from interface:GamePieceThe plain English name for this piece -
getName
-
getLayerName
Return raw Embellishment name- Returns:
- Embellishment name
-
mySetState
Description copied from class:DecoratorSets the state of this-trait-only (inverse ofDecorator.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:
mySetStatein classDecorator- Parameters:
s- New state information serialized in string form, ready to be passed to a SequenceEncoder#decode.
-
myGetType
Description copied from class:DecoratorThe "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. -
myGetState
Description copied from class:DecoratorThe "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:
myGetStatein classDecorator- Returns:
- the game state information of this trait alone
- See Also:
-
checkProperty
- Parameters:
name- Property name- Returns:
- false only if property name is non-blank/non-null, and property itself is false/0/null (return true otherwise)
-
draw
Description copied from interface:GamePieceDraw this GamePiece -
checkPropertyLevel
protected void checkPropertyLevel() -
myGetKeyCommands
- Specified by:
myGetKeyCommandsin classDecorator- Returns:
- the key commands for this trait alone
- See Also:
-
myKeyEvent
Description copied from class:DecoratorThe response of this trait alone to the given KeyStroke or the virtual keystroke of aNamedKeyStroke. 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 (seeNamedKeyStroke.getKeyStroke()).- Specified by:
myKeyEventin classDecorator- Parameters:
stroke- KeyStroke to apply (to apply a Named Keystroke sendNamedKeyStroke.getKeyStroke()- Returns:
- Generated Command to reproduce any changes just made to to the game state, or null if no effect
- See Also:
-
doIncrease
protected void doIncrease() -
doDecrease
protected void doDecrease() -
boundingBox
- Specified by:
boundingBoxin interfaceGamePiece- Returns:
- The area which this GamePiece occupies when drawn at the point (0,0)
-
getCurrentImageBounds
-
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:
getShapein interfaceGamePiece- 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 seeNonRectangular.
-
getDescription
Description copied from interface:EditablePieceA plain-English description of this type of trait/piece - includes data from fields where appropriate- Specified by:
getDescriptionin interfaceEditablePiece
-
getBaseDescription
Description copied from interface:EditablePieceSupport 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:
getBaseDescriptionin interfaceEditablePiece- Returns:
- name of trait/piece type, w/o additional data
-
getDescriptionField
Description copied from class:DecoratorIf Decorator contains a description *field*, returns the current contents of it.- Overrides:
getDescriptionFieldin classDecorator- Returns:
- contents of "description" field, if it exists.
-
getProperty
Description copied from class:DecoratorProperties 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'sDecorator.getState()method. Properties include the value of e.g.MarkerTraits,DynamicPropertyTraits, 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 theDecorator.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 thePropertySourceinterface, which allows Global Properties to be read by other types of object than GamePieces.- Specified by:
getPropertyin interfaceGamePiece- Specified by:
getPropertyin interfacePropertySource- Overrides:
getPropertyin classDecorator- Parameters:
key- String key of property to be returned- Returns:
- Object containing new value of the specified property
-
getLocalizedProperty
Description copied from class:DecoratorReturns a localized translation of the specified property value, if available. Otherwise returns the non-localized version. SeeDecorator.getProperty(java.lang.Object).- Specified by:
getLocalizedPropertyin interfacePropertySource- Overrides:
getLocalizedPropertyin classDecorator- 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
-
getCommonName
Get the name of this level (alone) -
getLocalizedCommonName
Get the localized name of this level (alone) -
getExpressionList
Description copied from class:Decorator- Specified by:
getExpressionListin interfaceSearchTarget- Overrides:
getExpressionListin classDecorator- Returns:
- a list of the Decorator's string/expression fields if any (for search)
-
getNamedKeyStrokeList
Description copied from class:Decorator- Specified by:
getNamedKeyStrokeListin interfaceSearchTarget- Overrides:
getNamedKeyStrokeListin classDecorator- Returns:
- a list of any Named KeyStrokes referenced in the Decorator, if any (for search)
-
getMenuTextList
Description copied from class:Decorator- Specified by:
getMenuTextListin interfaceSearchTarget- Overrides:
getMenuTextListin classDecorator- Returns:
- a list of any Menu Text strings referenced in the Decorator, if any (for search)
-
getFormattedStringList
Description copied from class:Decorator- Specified by:
getFormattedStringListin interfaceSearchTarget- Overrides:
getFormattedStringListin classDecorator- Returns:
- a list of any Message Format strings referenced in the Decorator, if any (for search)
-
getHelpFile
- Specified by:
getHelpFilein interfaceEditablePiece- Returns:
- the help file for this trait
-
getEditor
- Specified by:
getEditorin interfaceEditablePiece- Overrides:
getEditorin classDecorator- 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.
-
getVersion
public int getVersion() -
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 -
getLayerWithMatchingActivateCommand
public static Embellishment getLayerWithMatchingActivateCommand(GamePiece piece, NamedKeyStroke stroke, boolean active) -
getPropertyNames
- Specified by:
getPropertyNamesin interfacePropertyNameSource- Overrides:
getPropertyNamesin classDecorator- Returns:
- List of property names "exposed" by this piece -- that are available to other Traits and components to read.
Default behavior for a Trait is not to expose any properties, but Traits which should expose some (e.g.
DynamicPropertyorMarker) would provide an array of the property names here.
-
getPropertyList
Description copied from class:Decorator- Specified by:
getPropertyListin interfaceSearchTarget- Overrides:
getPropertyListin classDecorator- Returns:
- a list of any Property Names referenced in the Decorator, if any (for search)
-
testEquals
Description copied from class:DecoratorTest 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:
testEqualsin classDecorator- Parameters:
o- Object to compare this Decorator to- Returns:
- true if the Class, type and state all match
-
getI18nData
Description copied from class:DecoratorReturn Internationalization (I18n) data for this piece- Specified by:
getI18nDatain interfaceTranslatablePiece- Overrides:
getI18nDatain classDecorator- Returns:
- I18n data, used to hold translations of strings
-
addLocalImageNames
Description copied from class:AbstractImageFinderClasses extending AbstractImageFinder should override this method in order to add the names of any image files they use to the collection.- Specified by:
addLocalImageNamesin interfaceImageSearchTarget- Overrides:
addLocalImageNamesin classAbstractImageFinder- Parameters:
s- Collection to add image names to
-