Moving cards possible (transfer possession and the like).

This commit is contained in:
marcins78@gmail.com
2011-09-12 14:04:44 +00:00
parent 5b02be0860
commit d39e7c81dd
5 changed files with 46 additions and 2 deletions

View File

@@ -9,6 +9,8 @@ import java.util.List;
public interface GameStateListener {
public void cardCreated(PhysicalCard card);
public void cardMoved(PhysicalCard card);
public void cardRemoved(PhysicalCard card);
public void setPlayerOrder(List<String> playerIds);

View File

@@ -180,6 +180,8 @@ public class GameState {
addCardToZone(card, Zone.ATTACHED);
}
((PhysicalCardImpl) card).attachTo((PhysicalCardImpl) transferTo);
for (GameStateListener listener : getAllGameStateListeners())
listener.cardMoved(card);
}
public void attachCard(PhysicalCard card, PhysicalCard attachTo) {

View File

@@ -11,7 +11,7 @@ import java.util.List;
public class GameEvent {
public enum Type {
PARTICIPANT, GAME_PHASE_CHANGE, TURN_CHANGE, PLAYER_POSITION, TWILIGHT_POOL,
PUT_CARD_IN_PLAY, REMOVE_CARD_FROM_PLAY, ATTACH_CARD,
PUT_CARD_IN_PLAY, MOVE_CARD_IN_PLAY, REMOVE_CARD_FROM_PLAY, ATTACH_CARD,
ADD_ASSIGNMENT, REMOVE_ASSIGNMENT,
START_SKIRMISH, END_SKIRMISH,
ADD_TOKENS, REMOVE_TOKENS

View File

@@ -1,6 +1,5 @@
package com.gempukku.lotro;
import static com.gempukku.lotro.GameEvent.Type.*;
import com.gempukku.lotro.common.Phase;
import com.gempukku.lotro.common.Token;
import com.gempukku.lotro.communication.GameStateListener;
@@ -9,6 +8,8 @@ import com.gempukku.lotro.game.PhysicalCard;
import java.util.LinkedList;
import java.util.List;
import static com.gempukku.lotro.GameEvent.Type.*;
public class GatheringParticipantCommunicationChannel implements GameStateListener {
private List<GameEvent> _events = new LinkedList<GameEvent>();
private String _self;
@@ -62,6 +63,11 @@ public class GatheringParticipantCommunicationChannel implements GameStateListen
_events.add(new GameEvent(PUT_CARD_IN_PLAY).card(card));
}
@Override
public void cardMoved(PhysicalCard card) {
_events.add(new GameEvent(MOVE_CARD_IN_PLAY).card(card));
}
@Override
public void cardRemoved(PhysicalCard card) {
_events.add(new GameEvent(REMOVE_CARD_FROM_PLAY).card(card));

View File

@@ -275,6 +275,8 @@ var GempLotrGameUI = Class.extend({
var eventType = gameEvent.getAttribute("type");
if (eventType == "PUT_CARD_IN_PLAY") {
this.putCardInPlay(gameEvent);
} else if (eventType == "MOVE_CARD_IN_PLAY") {
this.moveCardInPlay(gameEvent);
} else if (eventType == "PARTICIPANT") {
this.participant(gameEvent);
} else if (eventType == "REMOVE_CARD_FROM_PLAY") {
@@ -437,6 +439,38 @@ var GempLotrGameUI = Class.extend({
}
},
moveCardInPlay: function(element) {
var cardId = element.getAttribute("cardId");
var zone = element.getAttribute("zone");
var targetCardId = element.getAttribute("targetCardId");
// Remove from where it was already attached
$(".card").each(
function() {
var cardData = $(this).data("card");
var index = -1;
for (var i = 0; i < cardData.attachedCards.length; i++)
if (cardData.attachedCards[i].data("card").cardId == cardId) {
index = i;
break;
}
if (index != -1)
cardData.attachedCards.splice(index, 1);
}
);
var card = $(".card:cardId(" + cardId + ")");
var cardData = card.data("card");
// move to new zone
cardData.zone = zone;
if (targetCardId != null) {
// attach to new card if it's attached
var targetCardData = $(".card:cardId(" + targetCardId + ")").data("card");
targetCardData.attachedCards.push(cardDiv);
}
},
layoutZones: function() {
this.advPathGroup.layoutCards();
this.charactersPlayer.layoutCards();