From d39e7c81ddd691ce3d026246a664bd2e7610270a Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 12 Sep 2011 14:04:44 +0000 Subject: [PATCH] Moving cards possible (transfer possession and the like). --- .../communication/GameStateListener.java | 2 ++ .../gempukku/lotro/game/state/GameState.java | 2 ++ .../java/com/gempukku/lotro/GameEvent.java | 2 +- ...heringParticipantCommunicationChannel.java | 8 ++++- .../src/main/webapp/js/gameUi.js | 34 +++++++++++++++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/communication/GameStateListener.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/communication/GameStateListener.java index d4bcf6ebe..8b4320c89 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/communication/GameStateListener.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/communication/GameStateListener.java @@ -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 playerIds); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index c56fe5986..e552db1f0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -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) { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GameEvent.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GameEvent.java index 909c87984..2e8713737 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GameEvent.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GameEvent.java @@ -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 diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java index d6449899e..ec2e78c13 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/GatheringParticipantCommunicationChannel.java @@ -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 _events = new LinkedList(); 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)); diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js index 65d9de551..01884019b 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameUi.js @@ -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();