[vassalengine-svn] SF.net SVN: vassalengine:[3966] VASSAL-src/trunk
Brought to you by:
rodneykinney,
uckelman
From: <uck...@us...> - 2008-08-03 14:46:11
|
Revision: 3966 http://vassalengine.svn.sourceforge.net/vassalengine/?rev=3966&view=rev Author: uckelman Date: 2008-08-03 14:46:20 +0000 (Sun, 03 Aug 2008) Log Message: ----------- Merged mkiefte@3950. Replace now has option to match states only on traits that are above this one o n the current trait list in the game piece editor. Modified Paths: -------------- VASSAL-src/trunk/doc/ReferenceManual/Replace.htm VASSAL-src/trunk/doc/ReferenceManual/images/Replace.png VASSAL-src/trunk/src/VASSAL/counters/Replace.java Modified: VASSAL-src/trunk/doc/ReferenceManual/Replace.htm =================================================================== --- VASSAL-src/trunk/doc/ReferenceManual/Replace.htm 2008-08-03 14:39:42 UTC (rev 3965) +++ VASSAL-src/trunk/doc/ReferenceManual/Replace.htm 2008-08-03 14:46:20 UTC (rev 3966) @@ -41,7 +41,10 @@ <span style="font-weight: bold;">Match Current State:</span> If selected, VASSAL will attempt to put the replacement piece in the same state as the original piece. Layers will be set to the same level, labels will be given the same value, rotation angles will match, etc. The state of a particular trait will carry over only if it has an exact match in the replacement, i.e. the properties settings of that trait are the same in both the original and replacement piece.<br> <br> + <span style="font-weight: bold;">Only match states above this trait:</span> +If selected, VASSAL will only replace states in traits that occur above this one in the list traits in the <a href="GamePiece.htm">game piece editor</a>. For example, the state of a <a href="PropertyMarker.htm">Marker</a> that's above this one <em>will</em> change if the state in the new game piece. If it's below, then it <em>will not</em> change if the new game piece has the same marker property.<br> <br> + <br> <b><br> EXAMPLE:</b> A unit that can be destroyed but still leaves a wreck behind can be given this trait to turn it into a wreck. This is Modified: VASSAL-src/trunk/src/VASSAL/counters/Replace.java =================================================================== --- VASSAL-src/trunk/src/VASSAL/counters/Replace.java 2008-08-03 14:39:42 UTC (rev 3965) +++ VASSAL-src/trunk/src/VASSAL/counters/Replace.java 2008-08-03 14:46:20 UTC (rev 3966) @@ -18,18 +18,25 @@ */ package VASSAL.counters; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.JCheckBox; +import javax.swing.JPanel; import javax.swing.KeyStroke; import VASSAL.build.module.documentation.HelpFile; import VASSAL.command.Command; import VASSAL.command.RemovePiece; import VASSAL.configure.BooleanConfigurer; import VASSAL.i18n.PieceI18nData; +import VASSAL.tools.SequenceEncoder; /** * GamePiece trait that replaces a GamePiece with another one */ public class Replace extends PlaceMarker { public static final String ID = "replace;"; + protected boolean above; public Replace() { this(ID + "Replace;R;null", null); @@ -72,8 +79,38 @@ return HelpFile.getReferenceManualPage("Replace.htm"); } + public void mySetType(String type) { + SequenceEncoder.Decoder st = new SequenceEncoder.Decoder(type, ';'); + st.nextToken(); + String name = st.nextToken(); + key = st.nextKeyStroke(null); + command = new KeyCommand(name, key, this, this); + if (name.length() > 0 && key != null) { + commands = new KeyCommand[]{command}; + } + else { + commands = new KeyCommand[0]; + } + markerSpec = st.nextToken(); + if ("null".equals(markerSpec)) { + markerSpec = null; + } + markerText = st.nextToken("null"); + if ("null".equals(markerText)) { + markerText = null; + } + xOffset = st.nextInt(0); + yOffset = st.nextInt(0); + matchRotation = st.nextBoolean(false); + afterBurnerKey = st.nextKeyStroke(null); + description = st.nextToken(""); + setGpId(st.nextToken("")); + above = st.nextBoolean(false); + } + + public String myGetType() { - return ID + super.myGetType().substring(PlaceMarker.ID.length()); + return ID + super.myGetType().substring(PlaceMarker.ID.length()) + ";" + String.valueOf(above); } public PieceEditor getEditor() { @@ -82,9 +119,13 @@ public GamePiece createMarker() { GamePiece marker = super.createMarker(); - if (marker != null - && matchRotation) { - matchTraits(Decorator.getOutermost(this), marker); + if (marker != null && matchRotation) { + if (above) { + matchTraits(this, marker); + } + else { + matchTraits(Decorator.getOutermost(this), marker); + } } return marker; } @@ -131,9 +172,19 @@ } protected static class Ed extends PlaceMarker.Ed { + protected BooleanConfigurer aboveConfig = new BooleanConfigurer(null, "Only match states above this trait?"); + public Ed(Replace piece) { super(piece); defineButton.setText("Define Replacement"); + JPanel p = (JPanel) getControls(); + p.add(aboveConfig.getControls(), 7); + aboveConfig.setValue(Boolean.valueOf(piece.above)); + ((JCheckBox) matchRotationConfig.getControls()).addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + aboveConfig.getControls().setVisible(((JCheckBox) matchRotationConfig.getControls()).isSelected()); + } + }); } protected BooleanConfigurer createMatchRotationConfig() { @@ -142,7 +193,7 @@ public String getType() { String s = super.getType(); - s = ID + s.substring(PlaceMarker.ID.length()); + s = ID + s.substring(PlaceMarker.ID.length()) + ";" + aboveConfig.getValueString(); return s; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |