Added updateBounds method to LabelSprite to allow changing the label, added methods to TrickCardGameUtil to get players left/right/opposite, changed the way CardPanel handles selections.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3481 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -30,8 +30,8 @@ import com.samskivert.swing.Label;
|
|||||||
/**
|
/**
|
||||||
* A sprite that uses a label to render itself. If the label has not been
|
* 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
|
* 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
|
* sprite is added to a media panel. If the label is altered after the
|
||||||
* after the sprite is created.
|
* sprite is created, {@link #updateBounds} should be called.
|
||||||
*/
|
*/
|
||||||
public class LabelSprite extends Sprite
|
public class LabelSprite extends Sprite
|
||||||
{
|
{
|
||||||
@@ -60,6 +60,16 @@ public class LabelSprite extends Sprite
|
|||||||
_antiAliased = antiAliased;
|
_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
|
// documentation inherited
|
||||||
protected void init ()
|
protected void init ()
|
||||||
{
|
{
|
||||||
@@ -79,9 +89,7 @@ public class LabelSprite extends Sprite
|
|||||||
}
|
}
|
||||||
|
|
||||||
// size the bounds to fit our label
|
// size the bounds to fit our label
|
||||||
Dimension size = _label.getSize();
|
updateBounds();
|
||||||
_bounds.width = size.width;
|
|
||||||
_bounds.height = size.height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// documentation inherited
|
// documentation inherited
|
||||||
|
|||||||
@@ -171,27 +171,13 @@ public abstract class CardPanel extends VirtualMediaPanel
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the selection mode for the hand (NONE, PLAY_SINGLE, SELECT_SINGLE,
|
* Sets the selection mode for the hand (NONE, PLAY_SINGLE, SELECT_SINGLE,
|
||||||
* or SELECT_MULTIPLE). Changing the selection mode can change the
|
* or SELECT_MULTIPLE). Changing the selection mode does not change the
|
||||||
* current selection (clearing the selection, for example, if disabling
|
* current selection.
|
||||||
* selection mode).
|
|
||||||
*/
|
*/
|
||||||
public void setHandSelectionMode (int mode)
|
public void setHandSelectionMode (int mode)
|
||||||
{
|
{
|
||||||
if (_handSelectionMode == mode) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_handSelectionMode = mode;
|
_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
|
// update the offsets of all cards in the hand
|
||||||
updateHandOffsets();
|
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 cards the card sprites to remove from the hand
|
||||||
* @param dest the point to fly the cards to
|
* @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
|
// fly each sprite over, removing it from the hand immediately and
|
||||||
// from the board when it finishes its path
|
// from the board when it finishes its path
|
||||||
for (int i = 0; i < cards.length; i++) {
|
for (int i = 0; i < cards.length; i++) {
|
||||||
|
removeFromHand(cards[i]);
|
||||||
LinePath flight = new LinePath(dest, flightDuration);
|
LinePath flight = new LinePath(dest, flightDuration);
|
||||||
cards[i].addSpriteObserver(_pathEndRemover);
|
cards[i].addSpriteObserver(_pathEndRemover);
|
||||||
cards[i].moveAndFadeOut(flight, flightDuration, fadePortion);
|
cards[i].moveAndFadeOut(flight, flightDuration, fadePortion);
|
||||||
removeFromHand(cards[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// adjust the hand to cover the hole
|
// 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 cards the cards to add to the hand
|
||||||
* @param src the point to fly the cards from
|
* @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 card the sprite to remove from the hand
|
||||||
* @param dest the point to fly the card to
|
* @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
|
* Expands or collapses the hand to accommodate new cards or cover the
|
||||||
* space left by removed cards. Skips unmanaged sprites. Assumes that
|
* space left by removed cards. Skips unmanaged sprites. Clears out
|
||||||
* selection is disabled.
|
* any selected cards.
|
||||||
*
|
*
|
||||||
* @param adjustDuration the amount of time to spend settling the cards
|
* @param adjustDuration the amount of time to spend settling the cards
|
||||||
* into their new locations
|
* into their new locations
|
||||||
@@ -680,6 +668,9 @@ public abstract class CardPanel extends VirtualMediaPanel
|
|||||||
*/
|
*/
|
||||||
protected void adjustHand (long adjustDuration, boolean updateLayers)
|
protected void adjustHand (long adjustDuration, boolean updateLayers)
|
||||||
{
|
{
|
||||||
|
// clear out selected cards
|
||||||
|
clearHandSelection();
|
||||||
|
|
||||||
// Sort the hand
|
// Sort the hand
|
||||||
QuickSort.sort(_handSprites);
|
QuickSort.sort(_handSprites);
|
||||||
|
|
||||||
@@ -887,7 +878,8 @@ public abstract class CardPanel extends VirtualMediaPanel
|
|||||||
new CardSpriteObserver() {
|
new CardSpriteObserver() {
|
||||||
public void cardSpriteClicked (CardSprite sprite, MouseEvent me) {
|
public void cardSpriteClicked (CardSprite sprite, MouseEvent me) {
|
||||||
// select, deselect, or play card in hand
|
// select, deselect, or play card in hand
|
||||||
if (_selectedHandSprites.contains(sprite)) {
|
if (_selectedHandSprites.contains(sprite) &&
|
||||||
|
_handSelectionMode != NONE) {
|
||||||
deselectHandSprite(sprite);
|
deselectHandSprite(sprite);
|
||||||
|
|
||||||
} else if (_handSprites.contains(sprite) && isSelectable(sprite)) {
|
} else if (_handSprites.contains(sprite) && isSelectable(sprite)) {
|
||||||
|
|||||||
@@ -36,11 +36,11 @@ public class TrickCardGameUtil
|
|||||||
* For four-player games with fixed partnerships, this returns the index
|
* For four-player games with fixed partnerships, this returns the index
|
||||||
* of the player's team.
|
* 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
|
* For four-player games with fixed partnerships, this returns the index
|
||||||
* of the player's partner.
|
* 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
|
* For four-player games, this returns the index of the player after the
|
||||||
* of the player after the specified player going clockwise around the
|
* specified player going clockwise around the table.
|
||||||
* table.
|
|
||||||
*/
|
*/
|
||||||
public static int getNextInClockwiseSequence (int plidx)
|
public static int getNextInClockwiseSequence (int pidx)
|
||||||
{
|
{
|
||||||
// 0
|
// 0
|
||||||
// 2 3
|
// 2 3
|
||||||
// 1
|
// 1
|
||||||
switch (plidx) {
|
switch (pidx) {
|
||||||
case 0: return 3;
|
case 0: return 3;
|
||||||
case 1: return 2;
|
case 1: return 2;
|
||||||
case 2: return 0;
|
case 2: return 0;
|
||||||
@@ -107,6 +106,33 @@ public class TrickCardGameUtil
|
|||||||
return RELATIVE_LOCATIONS[pidx1][pidx2];
|
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.
|
* Checks whether the player can follow the suit lead with the hand given.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user