Added method to handle multiple simultaneous transfers to ensure that cards are always subtracted from the hand before more cards are added.
git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@3501 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
@@ -172,8 +172,8 @@ public class CardGameManager extends GameManager
|
|||||||
* @param toPlayerIdx the index of the player receiving the cards
|
* @param toPlayerIdx the index of the player receiving the cards
|
||||||
* @param cards the cards to be exchanged
|
* @param cards the cards to be exchanged
|
||||||
*/
|
*/
|
||||||
public void transferCardsBetweenPlayers (final int fromPlayerIdx,
|
public void transferCardsBetweenPlayers (int fromPlayerIdx,
|
||||||
final int toPlayerIdx, final Card[] cards)
|
int toPlayerIdx, Card[] cards)
|
||||||
{
|
{
|
||||||
// Notify the sender that the cards have been taken
|
// Notify the sender that the cards have been taken
|
||||||
CardGameSender.sentCardsToPlayer(getClientObject(fromPlayerIdx),
|
CardGameSender.sentCardsToPlayer(getClientObject(fromPlayerIdx),
|
||||||
@@ -185,6 +185,47 @@ public class CardGameManager extends GameManager
|
|||||||
|
|
||||||
// and everybody else in the room other than the sender and the
|
// and everybody else in the room other than the sender and the
|
||||||
// receiver with the number of cards sent
|
// receiver with the number of cards sent
|
||||||
|
notifyCardsTransferred(fromPlayerIdx, toPlayerIdx, cards.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends sets of cards between players simultaneously. Each player is
|
||||||
|
* guaranteed to receive the notification of cards received after the
|
||||||
|
* notification of cards sent. The length of the arrays passed must
|
||||||
|
* be equal to the player count.
|
||||||
|
*
|
||||||
|
* @param toPlayerIndices for each player, the index of the player to
|
||||||
|
* transfer cards to
|
||||||
|
* @param cards for each player, the cards to transfer
|
||||||
|
*/
|
||||||
|
public void transferCardsBetweenPlayers (int[] toPlayerIndices,
|
||||||
|
Card[][] cards)
|
||||||
|
{
|
||||||
|
// Send all removal notices
|
||||||
|
for (int i = 0; i < _playerCount; i++) {
|
||||||
|
CardGameSender.sentCardsToPlayer(getClientObject(i),
|
||||||
|
toPlayerIndices[i], cards[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send all addition notices and notify everyone else
|
||||||
|
for (int i = 0; i < _playerCount; i++) {
|
||||||
|
CardGameSender.sendCardsFromPlayer(
|
||||||
|
getClientObject(toPlayerIndices[i]), i, cards[i]);
|
||||||
|
notifyCardsTransferred(i, toPlayerIndices[i], cards[i].length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notifies everyone in the room (other than the sender and the receiver)
|
||||||
|
* that a set of cards have been transferred.
|
||||||
|
*
|
||||||
|
* @param playerIdx the index of the player sending the cards
|
||||||
|
* @param toPlayerIdx the index of the player receiving the cards
|
||||||
|
* @param cards the number of cards sent
|
||||||
|
*/
|
||||||
|
protected void notifyCardsTransferred (final int fromPlayerIdx,
|
||||||
|
final int toPlayerIdx, final int cards)
|
||||||
|
{
|
||||||
final int senderOid = _playerOids[fromPlayerIdx],
|
final int senderOid = _playerOids[fromPlayerIdx],
|
||||||
receiverOid = _playerOids[toPlayerIdx];
|
receiverOid = _playerOids[toPlayerIdx];
|
||||||
OccupantOp op = new OccupantOp() {
|
OccupantOp op = new OccupantOp() {
|
||||||
@@ -193,13 +234,13 @@ public class CardGameManager extends GameManager
|
|||||||
if (oid != senderOid && oid != receiverOid) {
|
if (oid != senderOid && oid != receiverOid) {
|
||||||
CardGameSender.cardsTransferredBetweenPlayers(
|
CardGameSender.cardsTransferredBetweenPlayers(
|
||||||
(ClientObject)PresentsServer.omgr.getObject(
|
(ClientObject)PresentsServer.omgr.getObject(
|
||||||
oid), fromPlayerIdx, toPlayerIdx, cards.length);
|
oid), fromPlayerIdx, toPlayerIdx, cards);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
applyToOccupants(op);
|
applyToOccupants(op);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The card game object. */
|
/** The card game object. */
|
||||||
protected CardGameObject _cardgameobj;
|
protected CardGameObject _cardgameobj;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user