diff --git a/src/java/com/threerings/media/sprite/LabelSprite.java b/src/java/com/threerings/media/sprite/LabelSprite.java index 9497ad3f1..e27ad7fdc 100644 --- a/src/java/com/threerings/media/sprite/LabelSprite.java +++ b/src/java/com/threerings/media/sprite/LabelSprite.java @@ -30,8 +30,8 @@ import com.samskivert.swing.Label; /** * A sprite that uses a label to render itself. If the label has not been * previously laid out (see {@link Label#layout}) it will be done when the - * sprite is added to a media panel. The label should not be altered - * after the sprite is created. + * sprite is added to a media panel. If the label is altered after the + * sprite is created, {@link #updateBounds} should be called. */ public class LabelSprite extends Sprite { @@ -60,6 +60,16 @@ public class LabelSprite extends Sprite _antiAliased = antiAliased; } + /** + * Updates the bounds of the sprite after a change to the label. + */ + public void updateBounds () + { + Dimension size = _label.getSize(); + _bounds.width = size.width; + _bounds.height = size.height; + } + // documentation inherited protected void init () { @@ -79,9 +89,7 @@ public class LabelSprite extends Sprite } // size the bounds to fit our label - Dimension size = _label.getSize(); - _bounds.width = size.width; - _bounds.height = size.height; + updateBounds(); } // documentation inherited diff --git a/src/java/com/threerings/parlor/card/client/CardPanel.java b/src/java/com/threerings/parlor/card/client/CardPanel.java index 1432e346a..8198c03a5 100644 --- a/src/java/com/threerings/parlor/card/client/CardPanel.java +++ b/src/java/com/threerings/parlor/card/client/CardPanel.java @@ -171,27 +171,13 @@ public abstract class CardPanel extends VirtualMediaPanel /** * Sets the selection mode for the hand (NONE, PLAY_SINGLE, SELECT_SINGLE, - * or SELECT_MULTIPLE). Changing the selection mode can change the - * current selection (clearing the selection, for example, if disabling - * selection mode). + * or SELECT_MULTIPLE). Changing the selection mode does not change the + * current selection. */ public void setHandSelectionMode (int mode) { - if (_handSelectionMode == mode) { - return; - } _handSelectionMode = mode; - // if entered non-selection or single-selection mode, deselect all - // or all but one card - if (mode != SELECT_MULTIPLE) { - CardSprite[] sprites = getSelectedHandSprites(); - int begin = (mode == SELECT_SINGLE ? 1 : 0); - for (int i = begin; i < sprites.length; i++) { - deselectHandSprite(sprites[i]); - } - } - // update the offsets of all cards in the hand updateHandOffsets(); } @@ -426,7 +412,8 @@ public abstract class CardPanel extends VirtualMediaPanel } /** - * Flies a set of cards from the hand into the ether. + * Flies a set of cards from the hand into the ether. Clears any selected + * cards. * * @param cards the card sprites to remove from the hand * @param dest the point to fly the cards to @@ -440,10 +427,10 @@ public abstract class CardPanel extends VirtualMediaPanel // fly each sprite over, removing it from the hand immediately and // from the board when it finishes its path for (int i = 0; i < cards.length; i++) { + removeFromHand(cards[i]); LinePath flight = new LinePath(dest, flightDuration); cards[i].addSpriteObserver(_pathEndRemover); cards[i].moveAndFadeOut(flight, flightDuration, fadePortion); - removeFromHand(cards[i]); } // adjust the hand to cover the hole @@ -451,7 +438,8 @@ public abstract class CardPanel extends VirtualMediaPanel } /** - * Flies a set of cards from the ether into the hand. + * Flies a set of cards from the ether into the hand. Clears any selected + * cards. * * @param cards the cards to add to the hand * @param src the point to fly the cards from @@ -546,7 +534,7 @@ public abstract class CardPanel extends VirtualMediaPanel } /** - * Flies a card from the hand onto the board. + * Flies a card from the hand onto the board. Clears any cards selected. * * @param card the sprite to remove from the hand * @param dest the point to fly the card to @@ -671,8 +659,8 @@ public abstract class CardPanel extends VirtualMediaPanel /** * Expands or collapses the hand to accommodate new cards or cover the - * space left by removed cards. Skips unmanaged sprites. Assumes that - * selection is disabled. + * space left by removed cards. Skips unmanaged sprites. Clears out + * any selected cards. * * @param adjustDuration the amount of time to spend settling the cards * into their new locations @@ -680,6 +668,9 @@ public abstract class CardPanel extends VirtualMediaPanel */ protected void adjustHand (long adjustDuration, boolean updateLayers) { + // clear out selected cards + clearHandSelection(); + // Sort the hand QuickSort.sort(_handSprites); @@ -887,7 +878,8 @@ public abstract class CardPanel extends VirtualMediaPanel new CardSpriteObserver() { public void cardSpriteClicked (CardSprite sprite, MouseEvent me) { // select, deselect, or play card in hand - if (_selectedHandSprites.contains(sprite)) { + if (_selectedHandSprites.contains(sprite) && + _handSelectionMode != NONE) { deselectHandSprite(sprite); } else if (_handSprites.contains(sprite) && isSelectable(sprite)) { diff --git a/src/java/com/threerings/parlor/card/trick/util/TrickCardGameUtil.java b/src/java/com/threerings/parlor/card/trick/util/TrickCardGameUtil.java index a5230b40d..4bde7ed39 100644 --- a/src/java/com/threerings/parlor/card/trick/util/TrickCardGameUtil.java +++ b/src/java/com/threerings/parlor/card/trick/util/TrickCardGameUtil.java @@ -36,11 +36,11 @@ public class TrickCardGameUtil * For four-player games with fixed partnerships, this returns the index * of the player's team. * - * @param plidx the player index + * @param pidx the player index */ - public static int getTeamIndex (int plidx) + public static int getTeamIndex (int pidx) { - return plidx / 2; + return pidx / 2; } /** @@ -58,9 +58,9 @@ public class TrickCardGameUtil * For four-player games with fixed partnerships, this returns the index * of the player's partner. */ - public static int getPartnerIndex (int plidx) + public static int getPartnerIndex (int pidx) { - return plidx ^ 1; + return pidx ^ 1; } /** @@ -76,16 +76,15 @@ public class TrickCardGameUtil } /** - * For four-player games with fixed partnerships, this returns the index - * of the player after the specified player going clockwise around the - * table. + * For four-player games, this returns the index of the player after the + * specified player going clockwise around the table. */ - public static int getNextInClockwiseSequence (int plidx) + public static int getNextInClockwiseSequence (int pidx) { // 0 // 2 3 // 1 - switch (plidx) { + switch (pidx) { case 0: return 3; case 1: return 2; case 2: return 0; @@ -107,6 +106,33 @@ public class TrickCardGameUtil return RELATIVE_LOCATIONS[pidx1][pidx2]; } + /** + * For four-player games, returns the index of the player to the left of + * the specified player. + */ + public static int getLeftIndex (int pidx) + { + return getNextInClockwiseSequence(pidx); + } + + /** + * For four-player games, returns the index of the player to the right of + * the specified player. + */ + public static int getRightIndex (int pidx) + { + return getNextInClockwiseSequence(pidx) ^ 1; + } + + /** + * For four-player games, returns the index of the player across from the + * specified player. + */ + public static int getOppositeIndex (int pidx) + { + return pidx ^ 1; + } + /** * Checks whether the player can follow the suit lead with the hand given. */