From f4ee5e066efaa7f1964cb6b03a81ffc479064cc4 Mon Sep 17 00:00:00 2001 From: "marcins78@gmail.com" Date: Thu, 22 Sep 2011 00:28:08 +0000 Subject: [PATCH] "Event played" effect added. --- .../communication/GameStateListener.java | 2 + .../gempukku/lotro/game/state/GameState.java | 5 + .../lotro/logic/effects/PlayCardEffect.java | 3 + .../com/gempukku/lotro/game/GameEvent.java | 2 +- ...heringParticipantCommunicationChannel.java | 7 +- .../src/main/webapp/js/gameAnimations.js | 103 ++++++++++++++---- .../src/main/webapp/js/gameUi.js | 12 +- .../src/main/webapp/js/jCards.js | 6 + 8 files changed, 109 insertions(+), 31 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 d50855e36..52067c657 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 @@ -43,4 +43,6 @@ public interface GameStateListener { public void setZoneSize(String playerId, Zone zone, int size); public void cardAffectedByCard(PhysicalCard card, PhysicalCard affectedCard); + + public void eventPlayed(PhysicalCard card); } 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 ebf13c3d1..6b86db9d5 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,6 +224,11 @@ public class GameState { listener.cardAffectedByCard(card, affectedCard); } + public void eventPlayed(PhysicalCard card) { + for (GameStateListener listener : getAllGameStateListeners()) + listener.eventPlayed(card); + } + public void stackCard(PhysicalCard card, PhysicalCard stackOn) { ((PhysicalCardImpl) card).stackOn((PhysicalCardImpl) stackOn); addCardToZone(card, Zone.STACKED); diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java index 724a90cb3..6dfca7722 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/logic/effects/PlayCardEffect.java @@ -1,5 +1,6 @@ package com.gempukku.lotro.logic.effects; +import com.gempukku.lotro.common.CardType; import com.gempukku.lotro.game.PhysicalCard; import com.gempukku.lotro.game.state.LotroGame; import com.gempukku.lotro.logic.timing.AbstractEffect; @@ -44,6 +45,8 @@ public class PlayCardEffect extends AbstractEffect { @Override public EffectResult[] playEffect(LotroGame game) { + if (_cardPlayed.getBlueprint().getCardType() == CardType.EVENT) + game.getGameState().eventPlayed(_cardPlayed); return new EffectResult[]{new PlayCardResult(_cardPlayed, _attachedToCard)}; } } 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 36eb3e437..b29ea58a6 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 @@ -16,7 +16,7 @@ public class GameEvent { ADD_TOKENS, REMOVE_TOKENS, MESSAGE, WARNING, ZONE_SIZE, - CARD_AFFECTS_CARD + CARD_AFFECTS_CARD, EVENT_PLAYED } 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 80ed827ce..864613821 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 @@ -4,13 +4,12 @@ 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 static com.gempukku.lotro.game.GameEvent.Type.*; import java.util.Date; import java.util.LinkedList; import java.util.List; -import static com.gempukku.lotro.game.GameEvent.Type.*; - public class GatheringParticipantCommunicationChannel implements GameStateListener { private List _events = new LinkedList(); private String _self; @@ -120,6 +119,10 @@ public class GatheringParticipantCommunicationChannel implements GameStateListen _events.add(new GameEvent(CARD_AFFECTS_CARD).card(card).targetCardId(affectedCard.getCardId())); } + public void eventPlayed(PhysicalCard card) { + _events.add(new GameEvent(EVENT_PLAYED).card(card)); + } + public List consumeGameEvents() { List result = _events; _events = new LinkedList(); 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 99e6102dc..401a1f621 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 @@ -1,40 +1,96 @@ var GameAnimations = Class.extend({ game: null, - animationEffectDiv: null, - + playEventDuration: 500, + cardAffectsCardDuration: 500, init: function(gameUI) { this.game = gameUI; + }, - this.animationEffectDiv = $("
"); - this.animationEffectDiv.hide(); - $("#main").append(this.animationEffectDiv); + eventPlayed: function(element) { + var that = this; + + var participantId = element.getAttribute("participantId"); + var blueprintId = element.getAttribute("blueprintId"); + + var card = new Card(blueprintId, "ANIMATION", "anim", participantId); + var cardDiv = createSimpleCardDiv(card.imageUrl); + + $("#main").queue( + function(next) { + cardDiv.data("card", card); + $("#main").append(cardDiv); + + var gameWidth = $("#main").width(); + var gameHeight = $("#main").height(); + + var cardWidth = card.getWidthForHeight(gameHeight / 2); + + $(cardDiv).css( + { + position: "absolute", + left: 0, + top: gameHeight / 4, + width: cardWidth, + height: gameHeight / 2, + "z-index": 100, + opacity: 0}); + + $(cardDiv).animate( + { + left: "+=" + (gameWidth - cardWidth)}, + { + duration: that.playEventDuration, + easing: "linear", + queue: false, + complete: next}); + $(cardDiv).animate( + { + opacity: 1}, + { + duration: that.playEventDuration / 2, + easing: "easeOutQuart", + queue: false, + complete: function() { + $(cardDiv).animate( + { + opacity: 0}, + { + duration: that.playEventDuration / 2, + easing: "easeInQuart", + queue: false + }); + }}); + }).queue( + function(next) { + $(cardDiv).remove(); + next(); + }); }, cardAffectsCard: function(element) { + var that = this; + var participantId = element.getAttribute("participantId"); var blueprintId = element.getAttribute("blueprintId"); var targetCardId = element.getAttribute("targetCardId"); - this.animationEffectDiv.queue("anim", + var card = new Card(blueprintId, "ANIMATION", "anim", participantId); + var cardDiv = createSimpleCardDiv(card.imageUrl); + + $("#main").queue( function(next) { var targetCard = $(".card:cardId(" + targetCardId + ")"); if (targetCard.length > 0) { - var card = new Card(blueprintId, "ANIMATION", "anim", participantId); - var cardDiv = createCardDiv(card.imageUrl); cardDiv.data("card", card); + $("#main").append(cardDiv); targetCard = targetCard[0]; - $("#animation").html(cardDiv); - $("#animation").show(); var targetCardWidth = $(targetCard).width(); var targetCardHeight = $(targetCard).height(); - var maxDimension = Math.max(targetCardWidth, targetCardHeight); - - var borderWidth = Math.floor(maxDimension / 30); - var endBorderWidth = Math.floor(maxDimension * 2 / 30); - $("#animation").css({ + $(cardDiv).css( + { position: "absolute", left: $(targetCard).position().left, top: $(targetCard).position().top, @@ -42,7 +98,7 @@ var GameAnimations = Class.extend({ height: targetCardHeight, "z-index": 100, opacity: 1}); - $("#animation").animate( + $(cardDiv).animate( { opacity: 0, left: "-=" + (targetCardWidth / 2), @@ -50,16 +106,17 @@ var GameAnimations = Class.extend({ width: "+=" + targetCardWidth, height: "+=" + targetCardHeight}, { - duration: 800, - easing: "easeInCubic", + duration: that.cardAffectsCardDuration, + easing: "easeInQuart", queue: false, - complete: next - }); + complete: next}); + } else { + next(); } - }).queue("anim", + }).queue( function(next) { - $("#animation").hide(); + $(cardDiv).remove(); next(); - }).dequeue("anim"); + }); } }); \ No newline at end of file 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 6483f1fb7..00456f8ef 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 @@ -85,10 +85,10 @@ var GempLotrGameUI = Class.extend({ this.skirmishShadowGroup = new NormalCardGroup($("#main"), function (card) { return card.zone == "SHADOW_CHARACTERS" && card.skirmish == true; - }); + }, false); this.skirmishFellowshipGroup = new NormalCardGroup($("#main"), function (card) { return (card.zone == "FREE_SUPPORT" || card.zone == "FREE_CHARACTERS") && card.skirmish == true; - }); + }, false); this.initializeDialogs(); @@ -518,10 +518,12 @@ var GempLotrGameUI = Class.extend({ var eventType = gameEvent.getAttribute("type"); if (eventType == "CARD_AFFECTS_CARD") { this.animations.cardAffectsCard(gameEvent); + } else if (eventType == "EVENT_PLAYED") { + this.animations.eventPlayed(gameEvent); } } - var skirmish = element.getElementsByTagName("skirmish") + var skirmish = element.getElementsByTagName("skirmish"); if (skirmish.length > 0) { this.fpStrengthDiv.text(skirmish[0].getAttribute("fpStrength")); this.shadowStrengthDiv.text(skirmish[0].getAttribute("shadowStrength")); @@ -1407,8 +1409,8 @@ var GempLotrGameUI = Class.extend({ delete this.shadowAssignGroups[previousCharacterId]; delete this.freePeopleAssignGroups[previousCharacterId]; - this.assignGroupDivs[this.assignGroupDivs.length - 1].remove(); - this.assignGroupDivs.splice(this.assignGroupDivs.length - 1, 1); + this.assignGroupDivs[0].remove(); + this.assignGroupDivs.splice(0, 1); } }, 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 b62ebacc0..add97bc8b 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 @@ -87,5 +87,11 @@ function createCardDiv(image, text) { var borderDiv = $("
"); cardDiv.append(borderDiv); + return cardDiv; +} + +function createSimpleCardDiv(image) { + var cardDiv = $("
"); + return cardDiv; } \ No newline at end of file