added UI updates in PumpEffect and on Attachment changes

This commit is contained in:
Maxmtg
2013-07-03 08:44:01 +00:00
parent cca6e94a71
commit 2e4ec0e402
4 changed files with 31 additions and 16 deletions

View File

@@ -18,9 +18,7 @@ import forge.card.staticability.StaticAbility;
import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerHandler;
import forge.game.Game;
import forge.game.event.GameEvent;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.event.IGameEventVisitor;
public class AnimateEffect extends AnimateEffectBase {

View File

@@ -14,6 +14,7 @@ import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.TargetRestrictions;
import forge.game.Game;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
@@ -85,6 +86,7 @@ public class PumpEffect extends SpellAbilityEffect {
game.getEndOfTurn().addUntil(untilEOT);
}
}
sa.getActivatingPlayer().getGame().fireEvent(new GameEventCardStatsChanged(applyTo));
}
private void applyPump(final SpellAbility sa, final Player p, final List<String> keywords) {

View File

@@ -13,6 +13,7 @@ import forge.FThreads;
import forge.game.Game;
import forge.game.event.GameEvent;
import forge.game.event.GameEventAnteCardsSelected;
import forge.game.event.GameEventCardAttachment;
import forge.game.event.GameEventCardChangeZone;
import forge.game.event.GameEventCardCounters;
import forge.game.event.GameEventCardDamaged;
@@ -35,6 +36,7 @@ import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
import forge.gui.GuiDialog;
import forge.gui.SOverlayUtils;
import forge.gui.match.CMatchUI;
@@ -200,39 +202,52 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override
public Void visit(GameEventCardChangeZone event) {
updateTwoZones(event.from, event.to);
return null;
}
private void updateTwoZones(Zone z1, Zone z2) {
boolean needUpdate = false;
synchronized (zonesToUpdate) {
needUpdate = zonesToUpdate.isEmpty();
if ( event.from instanceof PlayerZone && !zonesToUpdate.contains(event.from) ) {
zonesToUpdate.add((PlayerZone)event.from);
if ( z1 instanceof PlayerZone && !zonesToUpdate.contains(z1) ) {
zonesToUpdate.add((PlayerZone)z1);
}
if ( event.to instanceof PlayerZone && !zonesToUpdate.contains(event.to) ) {
zonesToUpdate.add((PlayerZone)event.to);
if ( z2 instanceof PlayerZone && !zonesToUpdate.contains(z2) ) {
zonesToUpdate.add((PlayerZone)z2);
}
}
if( needUpdate )
FThreads.invokeInEdtNowOrLater(updZones);
return null;
}
@Override
public Void visit(GameEventCardAttachment event) {
// TODO Auto-generated method stub
Game game = event.equipment.getGame();
PlayerZone zEq = (PlayerZone)game.getZoneOf(event.equipment);
Zone z1 = event.oldEntiy instanceof Card ? game.getZoneOf((Card)event.oldEntiy) : null;
Zone z2 = event.newTarget instanceof Card ? game.getZoneOf((Card)event.newTarget) : null;
updateTwoZones(z1, z2);
return updateZone(zEq);
}
@Override
public Void visit(GameEventCardTapped event) {
// TODO Smart partial updates
PlayerZone z = (PlayerZone) event.card.getGame().getZoneOf(event.card);
return updateZone(z);
return updateZone((PlayerZone) event.card.getGame().getZoneOf(event.card));
}
@Override
public Void visit(GameEventCardDamaged event) {
PlayerZone z = (PlayerZone) event.damaged.getGame().getZoneOf(event.damaged);
return updateZone(z);
// TODO Smart partial updates
return updateZone((PlayerZone) event.damaged.getGame().getZoneOf(event.damaged));
}
@Override
public Void visit(GameEventCardCounters event) {
PlayerZone z = (PlayerZone) event.target.getGame().getZoneOf(event.target);
return updateZone(z);
// TODO Smart partial updates
return updateZone((PlayerZone) event.target.getGame().getZoneOf(event.target));
}
private Void updateZone(PlayerZone z) {

View File

@@ -499,11 +499,11 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen
*/
public void setupPlayZone() {
FThreads.assertExecutedByEdt(true);
setupPlayZone(model);
recalculateCardPanels(model);
}
public void setupPlayZone(final List<Card> model) {
private void recalculateCardPanels(final List<Card> model) {
List<Card> oldCards, toDelete;
oldCards = new ArrayList<Card>();
for (final CardPanel cpa : getCardPanels()) {