Package VASSAL.counters
Class FreeRotator
java.lang.Object
VASSAL.search.AbstractImageFinder
VASSAL.counters.Decorator
VASSAL.counters.FreeRotator
- All Implemented Interfaces:
MouseListener,MouseMotionListener,EventListener,Drawable,PropertyNameSource,PropertySource,EditablePiece,GamePiece,PropertyExporter,StateMergeable,TranslatablePiece,PersistentPropertyContainer,ImageSearchTarget,SearchTarget
public class FreeRotator
extends Decorator
implements EditablePiece, MouseListener, MouseMotionListener, Drawable, TranslatablePiece
A Decorator that rotates a GamePiece to an arbitrary angle
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected intprotected KeyCommand[]static Stringprotected Stringprotected booleanstatic Stringprotected GamePieceOpstatic StringDeprecated, for removal: This API element is subject to removal in a future version.protected Stringstatic doubleprotected Pointprotected KeyCommandprotected NamedKeyStrokeprotected Stringprotected KeyCommandprotected NamedKeyStrokeprotected Stringprotected KeyCommandprotected NamedKeyStrokeprotected Stringprotected Map<Double,RotateScaleOp>protected KeyCommandprotected NamedKeyStrokeprotected Stringprotected doubleprotected Mapprotected Pointprotected doubleprotected PieceImageDeprecated, for removal: This API element is subject to removal in a future version.protected booleanprotected double[]Fields inherited from interface VASSAL.counters.PropertyExporter
LOCALIZED_NAMEFields inherited from interface VASSAL.i18n.TranslatablePiece
PREFIX -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidDraw this GamePiecevoidbooleanvoiddoublegetAngle()doubledoubledoubleA plain-English description of this type of pieceprotected GamePieceOpgetGpOp()Return Internationalization (I18n) data for this piecegetLocalizedProperty(Object key)Returns a localized translation of the specified property value, if available.getName()The plain English name for this piecegetProperty(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.Return Property names exposed by this traitDeprecated, for removal: This API element is subject to removal in a future version.getRotatedImage(double angle, Component obs)Deprecated, for removal: This API element is subject to removal in a future version.Use aGamePieceOpif you need this Image.getShape()booleanHas the piece been moved by a Global key command since interactive rotate mode was turned on?voidvoidvoidvoidvoidmouseMoved(MouseEvent e)voidvoidThe "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 state)Sets the state of this-trait-only (inverse ofDecorator.myGetState()).voidSets the information for this piece.voidsetAngle(double angle)voidvoidsetPivot(int x, int y)The point around which the piece will pivot while rotating interactivelyvoidsetProperty(Object key, Object val)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.booleantestEquals(Object o)Test if this Decorator's Class, Type and State are equal to another trait.Methods inherited from class VASSAL.counters.Decorator
addImageNamesRecursively, buildDescription, buildDescription, buildDescription, getCommandDescription, getDecorator, getExpressionList, getFormattedStringList, getI18nData, getI18nData, getId, getInner, getInnermost, getKeyCommands, getLocalizedName, getMap, getOuter, getOutermost, getParent, getPersistentProperty, getPosition, getProperties, getPropertyList, getState, getTranslation, getType, isSelected, keyEvent, mergeState, putOldProperties, repack, repack, reportDataError, reportDataError, reportDataError, setId, setMap, setOldProperties, setOldProperties, setParent, setPersistentProperty, setPosition, setSelected, setState, toStringMethods inherited from class VASSAL.search.AbstractImageFinder
addLocalImageNames, getAllImageNames, getLocalImageNamesMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface VASSAL.counters.GamePiece
getId, getLocalizedName, getMap, getParent, getPosition, getState, getType, keyEvent, setId, setMap, setParent, setPosition, setStateMethods inherited from interface VASSAL.search.ImageSearchTarget
addLocalImageNames, getAllImageNames, getLocalImageNamesMethods inherited from interface VASSAL.counters.PropertyExporter
getProperties
-
Field Details
-
ID
- See Also:
- Constant Field Values
-
FACING
- See Also:
- Constant Field Values
-
DEGREES
- See Also:
- Constant Field Values
-
PI_180
public static final double PI_180- See Also:
- Constant Field Values
-
setAngleCommand
-
rotateCWCommand
-
rotateCCWCommand
-
commands
-
setAngleKey
-
setAngleText
-
rotateCWKey
-
rotateCWText
-
rotateCCWKey
-
rotateCCWText
-
name
-
description
-
rotateRNDCommand
-
rotateRNDText
-
rotateRNDKey
-
useUnrotatedShape
protected boolean useUnrotatedShape -
validAngles
protected double[] validAngles -
angleIndex
protected int angleIndex -
images
Deprecated, for removal: This API element is subject to removal in a future version. -
bounds
-
unrotated
Deprecated, for removal: This API element is subject to removal in a future version. -
gpOp
-
rotOp
-
tempAngle
protected double tempAngle -
startAngle
protected double startAngle -
pivot
-
drawGhost
protected boolean drawGhost -
startMap
-
startPosition
-
-
Constructor Details
-
FreeRotator
public FreeRotator() -
FreeRotator
-
-
Method Details
-
getName
Description copied from interface:GamePieceThe plain English name for this piece -
setInner
-
boundingBox
- Specified by:
boundingBoxin interfaceGamePiece- Returns:
- The area which this GamePiece occupies when drawn at the point (0,0)
-
getGpOp
-
getAngle
public double getAngle() -
getCumulativeAngle
public double getCumulativeAngle() -
getCumulativeAngleInRadians
public double getCumulativeAngleInRadians() -
setAngle
public void setAngle(double angle) -
getRotatedBounds
Deprecated, for removal: This API element is subject to removal in a future version.UseboundingBox()instead. -
getShape
- 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.
-
getAngleInRadians
public double getAngleInRadians() -
mySetType
Description copied from interface:EditablePieceSets the information for this piece. SeeDecorator.myGetType()- Specified by:
mySetTypein interfaceEditablePiece- 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()
-
draw
Description copied from interface:GamePieceDraw this GamePiece -
draw
-
drawAboveCounters
public boolean drawAboveCounters()- Specified by:
drawAboveCountersin interfaceDrawable
-
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.- Specified by:
myGetTypein classDecorator- Returns:
- the type information of this trait alone
- See Also:
BasicCommandEncoder,which returns type information for all inward piece members as well
-
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:
which returns state information for all inward piece members as well
-
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:
state- New state information serialized in string form, ready to be passed to a SequenceEncoder#decode.
-
myGetKeyCommands
- Specified by:
myGetKeyCommandsin classDecorator- Returns:
- the key commands for this trait alone
- See Also:
which returns the key commands for this trait AND all inner piece members
-
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:
Decorator.keyEvent(javax.swing.KeyStroke)
-
beginInteractiveRotate
public void beginInteractiveRotate() -
endInteractiveRotate
public void endInteractiveRotate() -
hasPieceMoved
public boolean hasPieceMoved()Has the piece been moved by a Global key command since interactive rotate mode was turned on? -
setPivot
public void setPivot(int x, int y)The point around which the piece will pivot while rotating interactively -
mouseClicked
- Specified by:
mouseClickedin interfaceMouseListener
-
mouseEntered
- Specified by:
mouseEnteredin interfaceMouseListener
-
mouseExited
- Specified by:
mouseExitedin interfaceMouseListener
-
mousePressed
- Specified by:
mousePressedin interfaceMouseListener
-
mouseReleased
- Specified by:
mouseReleasedin interfaceMouseListener
-
setProperty
Description copied from class:DecoratorWithin 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'sDecorator.getState()method. Properties include the value of e.g.MarkerTraits,DynamicPropertyTraits, 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 byDecorator.getProperty(java.lang.Object)-- in this the two methods are not perfect mirrors.- Specified by:
setPropertyin interfaceGamePiece- Overrides:
setPropertyin classDecorator- Parameters:
key- String key of property to be changedval- Object containing new value of the 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
-
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
-
mouseDragged
- Specified by:
mouseDraggedin interfaceMouseMotionListener
-
mouseMoved
- Specified by:
mouseMovedin interfaceMouseMotionListener
-
getRotatedImage
@Deprecated(since="2020-08-06", forRemoval=true) public Image getRotatedImage(double angle, Component obs)Deprecated, for removal: This API element is subject to removal in a future version.Use aGamePieceOpif you need this Image.Return a full-scale cached image of this piece, rotated to the appropriate angle.- Parameters:
angle- Rotation angleobs- Component observer- Returns:
- Rotated Image
-
getDescription
Description copied from interface:EditablePieceA plain-English description of this type of piece- Specified by:
getDescriptionin interfaceEditablePiece
-
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.
-
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
-
getPropertyNames
Return Property names exposed by this trait- 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.
-
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
-
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)
-
boundingBox()instead.