From 395666762bbe26e31a5628c70c0c0563eec8ecfe Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Wed, 26 Oct 2011 22:44:25 +0000 Subject: [PATCH] Adding vitality display and fixing issues with Ring bearer having wrong stats during playing starting fellowship. --- .../lotro/cards/set4/gondor/Card4_116.java | 2 +- .../lotro/cards/set4/gondor/Card4_130.java | 2 +- .../lotro/cards/set4/rohan/Card4_265.java | 2 +- .../lotro/cards/set5/gondor/Card5_031.java | 2 +- .../lotro/cards/set6/gondor/Card6_121.java | 2 +- .../java/com/gempukku/lotro/common/Phase.java | 2 +- .../lotro/game/state/EventSerializer.java | 6 ++++-- .../gempukku/lotro/game/state/GameState.java | 18 ++++++++++-------- .../lotro/logic/timing/DefaultLotroGame.java | 2 +- .../gempukku/lotro/logic/timing/GameStats.java | 16 +++++++++++++++- ...RingBearerRingAndAddBurdersGameProcess.java | 2 ++ .../gempukku/lotro/game/LotroGameMediator.java | 2 +- .../gemp-lotr-web/src/main/webapp/game.html | 14 ++++++++++++-- .../src/main/webapp/js/gameAnimations.js | 18 ++++++++++-------- .../gemp-lotr-web/src/main/webapp/js/gameUi.js | 8 +++++++- .../gemp-lotr-web/src/main/webapp/js/jCards.js | 1 - 16 files changed, 68 insertions(+), 31 deletions(-) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_116.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_116.java index 5727f9fbc..0240535ab 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_116.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_116.java @@ -39,7 +39,7 @@ public class Card4_116 extends AbstractCompanion { new Condition() { @Override public boolean isFullfilled(GameState gameState, ModifiersQuerying modifiersQuerying) { - return gameState.getCurrentPhase() == Phase.GAME_SETUP; + return gameState.getCurrentPhase() == Phase.PLAY_STARTING_FELLOWSHIP; } }, -1)); modifiers.add( diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_130.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_130.java index 4f353cf5f..3c0c51bd2 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_130.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/gondor/Card4_130.java @@ -34,7 +34,7 @@ public class Card4_130 extends AbstractCompanion { @Override public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { - if (gameState.getCurrentPhase() == Phase.GAME_SETUP) + if (gameState.getCurrentPhase() == Phase.PLAY_STARTING_FELLOWSHIP) return -1; return 0; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_265.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_265.java index aac56f36c..5f4995959 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_265.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set4/rohan/Card4_265.java @@ -35,7 +35,7 @@ public class Card4_265 extends AbstractCompanion { @Override public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { - if (gameState.getCurrentPhase() == Phase.GAME_SETUP) + if (gameState.getCurrentPhase() == Phase.PLAY_STARTING_FELLOWSHIP) return -1; return 0; } diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gondor/Card5_031.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gondor/Card5_031.java index 22e095e25..c8a32d067 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gondor/Card5_031.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set5/gondor/Card5_031.java @@ -43,7 +43,7 @@ public class Card5_031 extends AbstractCompanion { Filters.and( Filters.not(Filters.sameCard(self)), Keyword.KNIGHT - ), new PhaseCondition(Phase.GAME_SETUP), -1)); + ), new PhaseCondition(Phase.PLAY_STARTING_FELLOWSHIP), -1)); } @Override diff --git a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_121.java b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_121.java index c65aa4ec4..c2a2226f1 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_121.java +++ b/gemp-lotr/gemp-lotr-cards/src/main/java/com/gempukku/lotro/cards/set6/gondor/Card6_121.java @@ -37,7 +37,7 @@ public class Card6_121 extends AbstractCompanion { @Override public int getTwilightCostModifier(GameState gameState, ModifiersQuerying modifiersQuerying, PhysicalCard self) { - if (gameState.getCurrentPhase() == Phase.GAME_SETUP) + if (gameState.getCurrentPhase() == Phase.PLAY_STARTING_FELLOWSHIP) return -1; return 0; } diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Phase.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Phase.java index 3cd29e0d7..85da00156 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Phase.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/Phase.java @@ -1,5 +1,5 @@ package com.gempukku.lotro.common; public enum Phase { - GAME_SETUP, FELLOWSHIP, SHADOW, MANEUVER, ARCHERY, ASSIGNMENT, SKIRMISH, REGROUP, BETWEEN_TURNS + PUT_RING_BEARER, PLAY_STARTING_FELLOWSHIP, FELLOWSHIP, SHADOW, MANEUVER, ARCHERY, ASSIGNMENT, SKIRMISH, REGROUP, BETWEEN_TURNS } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java index 40870f2b6..6c2e1bca1 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/EventSerializer.java @@ -76,15 +76,17 @@ public class EventSerializer { eventElem.appendChild(playerZonesElem); } + Map charVitalities = gameStats.getCharVitalities(); + StringBuilder charStr = new StringBuilder(); for (Map.Entry characters : gameStats.getCharStrengths().entrySet()) { - charStr.append("," + characters.getKey() + "=" + characters.getValue()); + charStr.append("," + characters.getKey() + "=" + characters.getValue() + "|" + charVitalities.get(characters.getKey())); } if (charStr.length() > 0) charStr.delete(0, 1); if (charStr.length() > 0) - eventElem.setAttribute("charStrengths", charStr.toString()); + eventElem.setAttribute("charStats", charStr.toString()); } return eventElem; 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 8f6389c26..722fb687a 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 @@ -25,7 +25,7 @@ public class GameState { private Map _allCards = new HashMap(); private String _currentPlayerId; - private Phase _currentPhase = Phase.GAME_SETUP; + private Phase _currentPhase = Phase.PUT_RING_BEARER; private int _twilightPool; private int _moveCount; @@ -299,7 +299,7 @@ public class GameState { Zone zone = card.getZone(); if (zone.isInPlay()) - if (card.getBlueprint().getCardType() != CardType.SITE || (getCurrentPhase() != Phase.GAME_SETUP && getCurrentSite() == card)) + if (card.getBlueprint().getCardType() != CardType.SITE || (getCurrentPhase() != Phase.PLAY_STARTING_FELLOWSHIP && getCurrentSite() == card)) stopAffecting(card); else if (zone == Zone.STACKED) stopAffectingStacked(card); @@ -358,11 +358,13 @@ public class GameState { listener.cardCreated(card); } - if (zone.isInPlay()) { - if (card.getBlueprint().getCardType() != CardType.SITE || (getCurrentPhase() != Phase.GAME_SETUP && getCurrentSite() == card)) - startAffecting(game, card); - } else if (zone == Zone.STACKED) - startAffectingStacked(game, card); + if (_currentPhase != Phase.PUT_RING_BEARER) { + if (zone.isInPlay()) { + if (card.getBlueprint().getCardType() != CardType.SITE || (getCurrentPhase() != Phase.PLAY_STARTING_FELLOWSHIP && getCurrentSite() == card)) + startAffecting(game, card); + } else if (zone == Zone.STACKED) + startAffectingStacked(game, card); + } } private void removeAllTokens(PhysicalCard card) { @@ -673,7 +675,7 @@ public class GameState { } // Current site is affecting - if (_currentPhase != Phase.GAME_SETUP) + if (_currentPhase != Phase.PLAY_STARTING_FELLOWSHIP) startAffecting(game, getCurrentSite()); // Stacked cards on active cards are stack-affecting diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java index dea4c91e6..fe35bf34e 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/DefaultLotroGame.java @@ -171,7 +171,7 @@ public class DefaultLotroGame implements LotroGame { @Override public void checkLoseConditions() { GameState gameState = getGameState(); - if (gameState != null && gameState.getCurrentPhase() != Phase.GAME_SETUP && gameState.getCurrentPhase() != Phase.BETWEEN_TURNS) { + if (gameState != null && gameState.getCurrentPhase() != Phase.PLAY_STARTING_FELLOWSHIP && gameState.getCurrentPhase() != Phase.BETWEEN_TURNS && gameState.getCurrentPhase() != Phase.PUT_RING_BEARER) { // Ring-bearer death if (!Filters.canSpot(gameState, getModifiersQuerying(), Filters.keyword(Keyword.RING_BEARER))) { playerLost(getGameState().getCurrentPlayerId(), "The Ring-Bearer is dead"); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java index a161084c8..1940c2733 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/GameStats.java @@ -23,6 +23,7 @@ public class GameStats { private Map> _zoneSizes = new HashMap>(); private Map _charStrengths = new HashMap(); + private Map _charVitalities = new HashMap(); /** * @return If the stats have changed @@ -85,14 +86,22 @@ public class GameStats { } Map newCharStrengths = new HashMap(); - for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) + Map newCharVitalities = new HashMap(); + for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) { newCharStrengths.put(character.getCardId(), game.getModifiersQuerying().getStrength(game.getGameState(), character)); + newCharVitalities.put(character.getCardId(), game.getModifiersQuerying().getVitality(game.getGameState(), character)); + } if (!newCharStrengths.equals(_charStrengths)) { changed = true; _charStrengths = newCharStrengths; } + if (!newCharVitalities.equals(_charVitalities)) { + changed = true; + _charVitalities = newCharVitalities; + } + return changed; } @@ -128,6 +137,10 @@ public class GameStats { return Collections.unmodifiableMap(_charStrengths); } + public Map getCharVitalities() { + return _charVitalities; + } + public GameStats makeACopy() { GameStats copy = new GameStats(); copy._fellowshipArchery = _fellowshipArchery; @@ -138,6 +151,7 @@ public class GameStats { copy._shadowSkirmishStrength = _shadowSkirmishStrength; copy._zoneSizes = _zoneSizes; copy._charStrengths = _charStrengths; + copy._charVitalities = _charVitalities; return copy; } } diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java index 2b254bad0..357aa05c0 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/timing/processes/pregame/PlayRingBearerRingAndAddBurdersGameProcess.java @@ -2,6 +2,7 @@ package com.gempukku.lotro.logic.timing.processes.pregame; import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.common.Keyword; +import com.gempukku.lotro.common.Phase; import com.gempukku.lotro.common.Zone; import com.gempukku.lotro.filters.Filters; import com.gempukku.lotro.game.PhysicalCard; @@ -39,6 +40,7 @@ public class PlayRingBearerRingAndAddBurdersGameProcess implements GameProcess { gameState.startPlayerTurn(playerId); gameState.addBurdens(_bids.get(playerId)); } + gameState.setCurrentPhase(Phase.PLAY_STARTING_FELLOWSHIP); } @Override diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java index 13cabaa07..70bd61ad9 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/LotroGameMediator.java @@ -76,7 +76,7 @@ public class LotroGameMediator { public String getGameStatus() { if (_lotroGame.getWinnerPlayerId() != null) return "Finished"; - if (_lotroGame.getGameState().getCurrentPhase() == Phase.GAME_SETUP) + if (_lotroGame.getGameState().getCurrentPhase() == Phase.PLAY_STARTING_FELLOWSHIP) return "Preparation"; return "Playing"; } diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html index 46841db1f..2440cd3b4 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/game.html @@ -32,9 +32,19 @@ .cardStrength { text-align: center; vertical-align: middle; - background-color: #ffffff; + background-color: #7a6a53; opacity: 0.7; - color: #000000; + font-weight: bolder; + color: #ffffff; + } + + .cardVitality { + text-align: center; + vertical-align: middle; + background-color: #8a1f0d; + opacity: 0.7; + font-weight: bolder; + color: #ffffff; } .selectableCard > .borderOverlay { diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js index 04fcfa8d8..d8ed71ffe 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/gameAnimations.js @@ -685,15 +685,17 @@ var GameAnimations = Class.extend({ $("#main").queue( function(next) { $(".cardStrength").css({display: "none"}); + $(".cardVitality").css({display: "none"}); - var charStrengths = element.getAttribute("charStrengths"); - if (charStrengths != null) { - var charStrengthsArr = charStrengths.split(","); - for (var i = 0; i < charStrengthsArr.length; i++) { - var cardStrength = charStrengthsArr[i].split("="); - var cardDiv = $(".card:cardId(" + cardStrength[0] + ")"); - cardDiv.data("card").strength = cardStrength[1]; - $(".cardStrength", cardDiv).html(cardStrength[1]).css({display: ""}); + var charStats = element.getAttribute("charStats"); + if (charStats != null) { + var charStatsArr = charStats.split(","); + for (var i = 0; i < charStatsArr.length; i++) { + var cardStats = charStatsArr[i].split("="); + var cardDiv = $(".card:cardId(" + cardStats[0] + ")"); + var cardStatArr = cardStats[1].split("|"); + $(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""}); + $(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""}); } } 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 4540b3a46..df92dff34 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 @@ -781,10 +781,15 @@ var GempLotrGameUI = Class.extend({ var cardDiv = createCardDiv(card.imageUrl, text, foil); var tokenOverlay = $(".tokenOverlay", cardDiv); + var cardStrengthDiv = $("
"); cardStrengthDiv.css({display: "none"}); tokenOverlay.append(cardStrengthDiv); + var cardVitalityDiv = $("
"); + cardVitalityDiv.css({display: "none"}); + tokenOverlay.append(cardVitalityDiv); + cardDiv.data("card", card); var sizeListeners = new Array(); @@ -797,7 +802,8 @@ var GempLotrGameUI = Class.extend({ var fontPerc = (size * 7) + "%"; var borderRadius = Math.ceil(size / 5) + "px"; - $(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.4 + "px", top: maxDimension * 0.64 + "px", width: size, height: size}); + $(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.64 + "px", width: size, height: size}); + $(".cardVitality", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.645 + size + "px", width: size, height: size}); } }; diff --git a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/jCards.js b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/jCards.js index f7411301b..17ea86114 100644 --- a/gemp-lotr/gemp-lotr-web/src/main/webapp/js/jCards.js +++ b/gemp-lotr/gemp-lotr-web/src/main/webapp/js/jCards.js @@ -12,7 +12,6 @@ var Card = Class.extend({ owner: null, siteNumber: null, attachedCards: null, - strength: null, init: function(blueprintId, zone, cardId, owner, siteNumber) { this.blueprintId = blueprintId;