From fbdcc4708c9ecd859b2c52e2f6aea0bcbc5432ed Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Mon, 19 Sep 2011 10:56:41 +0000 Subject: [PATCH] Display deck/hand/discard/dead pile counts for all players. --- .../lotro/communication/GameStateListener.java | 3 +++ .../gempukku/lotro/game/state/GameState.java | 15 +++++++++++++-- .../com/gempukku/lotro/game/GameEvent.java | 3 ++- ...theringParticipantCommunicationChannel.java | 6 ++++++ .../gemp-lotr-web/src/main/webapp/js/gameUi.js | 18 ++++++++++++++++++ 5 files changed, 42 insertions(+), 3 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 f70d97a13..aa1f0bbff 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 @@ -2,6 +2,7 @@ package com.gempukku.lotro.communication; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Token; +import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.game.PhysicalCard; import java.util.List; @@ -38,4 +39,6 @@ public interface GameStateListener { public void sendMessage(String message); public void setSite(PhysicalCard card); + + public void setZoneSize(String playerId, Zone zone, int size); } 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 8acbe1559..307cb98b3 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 @@ -224,7 +224,8 @@ public class GameState { public void removeCardFromZone(PhysicalCard card) { Zone zone = card.getZone(); - boolean b = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone).remove(card); + List zoneCards = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone); + boolean b = zoneCards.remove(card); if (!b) throw new RuntimeException("Card was not found in the expected zone"); @@ -255,11 +256,18 @@ public class GameState { else if (isZonePrivate(zone)) for (GameStateListener listener : getPrivateGameStateListeners(card)) listener.cardRemoved(card); + + if (zone == Zone.DECK || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) + for (GameStateListener listener : getAllGameStateListeners()) + listener.setZoneSize(card.getOwner(), zone, zoneCards.size()); } public void addCardToZone(PhysicalCard card, Zone zone) { - getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone).add((PhysicalCardImpl) card); + List zoneCards = getZoneCards(card.getOwner(), card.getBlueprint().getCardType(), zone); + zoneCards.add((PhysicalCardImpl) card); + ((PhysicalCardImpl) card).setZone(zone); + if (zone == Zone.ADVENTURE_PATH) { for (GameStateListener listener : getAllGameStateListeners()) listener.setSite(card); @@ -270,6 +278,9 @@ public class GameState { else if (isZonePrivate(zone)) for (GameStateListener listener : getPrivateGameStateListeners(card)) listener.cardCreated(card); + if (zone == Zone.DECK || zone == Zone.HAND || zone == Zone.DISCARD || zone == Zone.DEAD) + for (GameStateListener listener : getAllGameStateListeners()) + listener.setZoneSize(card.getOwner(), zone, zoneCards.size()); } } diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameEvent.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameEvent.java index 75e7ef2e7..6635004df 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameEvent.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GameEvent.java @@ -14,7 +14,8 @@ public class GameEvent { ADD_ASSIGNMENT, REMOVE_ASSIGNMENT, START_SKIRMISH, END_SKIRMISH, ADD_TOKENS, REMOVE_TOKENS, - MESSAGE, WARNING + MESSAGE, WARNING, + ZONE_SIZE } private String _message; diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GatheringParticipantCommunicationChannel.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GatheringParticipantCommunicationChannel.java index d31a97854..840056d61 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GatheringParticipantCommunicationChannel.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/GatheringParticipantCommunicationChannel.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.game; import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Token; +import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.communication.GameStateListener; import java.util.Date; @@ -109,6 +110,11 @@ public class GatheringParticipantCommunicationChannel implements GameStateListen _events.add(new GameEvent(PUT_CARD_IN_PLAY).card(card).index(card.getBlueprint().getSiteNumber())); } + @Override + public void setZoneSize(String playerId, Zone zone, int size) { + _events.add(new GameEvent(ZONE_SIZE).participantId(playerId).zone(zone).count(size)); + } + public List consumeGameEvents() { List result = _events; _events = new LinkedList(); 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 92a461f41..dd1891410 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 @@ -117,6 +117,7 @@ var GempLotrGameUI = Class.extend({ this.gameStateElem.append("Players:
"); for (var i = 0; i < this.allPlayerIds.length; i++) { this.gameStateElem.append("
" + this.allPlayerIds[i] + "
"); + this.gameStateElem.append("Deck:
Hand:
Discard:
Dead pile:
"); } this.gameStateElem.append("
"); @@ -431,6 +432,8 @@ var GempLotrGameUI = Class.extend({ this.removeTokens(gameEvent); } else if (eventType == "PLAYER_POSITION") { this.playerPosition(gameEvent); + } else if (eventType == "ZONE_SIZE") { + this.zoneSize(gameEvent); } else if (eventType == "MESSAGE") { this.message(gameEvent); } else if (eventType == "WARNING") { @@ -503,6 +506,21 @@ var GempLotrGameUI = Class.extend({ alert("There was a problem during communication with server"); }, + zoneSize: function(element) { + var playerId = element.getAttribute("participantId"); + var zone = element.getAttribute("zone"); + var count = element.getAttribute("count"); + + if (zone == "HAND") + $("#hand" + this.getPlayerIndex(playerId)).text("" + count); + else if (zone == "DISCARD") + $("#discard" + this.getPlayerIndex(playerId)).text("" + count); + else if (zone == "DEAD") + $("#deadPile" + this.getPlayerIndex(playerId)).text("" + count); + else if (zone == "DECK") + $("#deck" + this.getPlayerIndex(playerId)).text("" + count); + }, + playerPosition: function(element) { var participantId = element.getAttribute("participantId"); var position = element.getAttribute("index");