Better UI updates - CCombat

This commit is contained in:
Maxmtg
2013-06-04 13:51:21 +00:00
parent ab55af70bd
commit be41dd7fff
8 changed files with 55 additions and 39 deletions

View File

@@ -10,15 +10,18 @@ import forge.Card;
import forge.FThreads;
import forge.game.event.GameEvent;
import forge.game.event.GameEventAnteCardsSelected;
import forge.game.event.GameEventAttackersDeclared;
import forge.game.event.GameEventGameFinished;
import forge.game.event.GameEventGameOutcome;
import forge.game.event.GameEventPlayerControl;
import forge.game.event.GameEventPlayerPriority;
import forge.game.event.GameEventSpellAbilityCast;
import forge.game.event.GameEventSpellRemovedFromStack;
import forge.game.event.GameEventSpellResolved;
import forge.game.event.GameEventTurnBegan;
import forge.game.event.GameEventTurnPhase;
import forge.game.event.IGameEventVisitor;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.gui.GuiDialog;
@@ -46,8 +49,9 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
if ( phaseUpdPlanned.getAndSet(true) ) return null;
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() {
Player p = fc.getObservedGame().getPhaseHandler().getPlayerTurn();
PhaseType ph = fc.getObservedGame().getPhaseHandler().getPhase();
PhaseHandler pH = fc.getObservedGame().getPhaseHandler();
Player p = pH.getPlayerTurn();
PhaseType ph = pH.getPhase();
phaseUpdPlanned.set(false);
@@ -57,11 +61,26 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
matchUi.resetAllPhaseButtons();
if (lbl != null) lbl.setActive(true);
} });
return null;
}
/* (non-Javadoc)
* @see forge.game.event.IGameEventVisitor.Base#visit(forge.game.event.GameEventPlayerPriority)
*/
private final AtomicBoolean combatUpdPlanned = new AtomicBoolean(false);
@Override
public Void visit(GameEventPlayerPriority event) {
if ( combatUpdPlanned.getAndSet(true) ) return null;
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() {
combatUpdPlanned.set(false);
CMatchUI.SINGLETON_INSTANCE.showCombat();
} });
return null;
}
private final AtomicBoolean turnUpdPlanned = new AtomicBoolean(false);
@Override
public Void visit(GameEventTurnBegan event) {

View File

@@ -113,6 +113,10 @@ public class Combat {
fillDefenderMaps(defender);
}
public final boolean isCombat() {
return !attackerMap.isEmpty();
}
private void fillDefenderMaps(final Player defender) {
this.defenders.add(defender);
this.defenderMap.put(defender, new ArrayList<Card>());

View File

@@ -34,7 +34,6 @@ import forge.CardLists;
import forge.CardPredicates;
import forge.Command;
import forge.Constant;
import forge.FThreads;
import forge.GameEntity;
import forge.card.CardType;
import forge.card.MagicColor;
@@ -51,9 +50,6 @@ import forge.game.player.Player;
import forge.game.player.PlayerController.ManaPaymentPurpose;
import forge.game.zone.ZoneType;
import forge.gui.GuiDialog;
import forge.gui.framework.EDocID;
import forge.gui.framework.SDisplayUtil;
import forge.gui.match.controllers.CCombat;
/**
@@ -423,10 +419,7 @@ public class CombatUtil {
public static void orderMultipleCombatants(final Combat combat) {
CombatUtil.orderMultipleBlockers(combat);
CombatUtil.showCombat();
CombatUtil.orderBlockingMultipleAttackers(combat);
CombatUtil.showCombat();
}
private static void orderMultipleBlockers(final Combat combat) {
@@ -955,20 +948,6 @@ public class CombatUtil {
return true;
} // canAttack()
/**
* <p>
* showCombat.
* </p>
*/
public static void showCombat() {
FThreads.invokeInEdtNowOrLater( new Runnable() { @Override public void run() {
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
CCombat.SINGLETON_INSTANCE.update();
} });
} // showBlockers()
/**
* <p>
* checkPropagandaEffects.

View File

@@ -397,10 +397,6 @@ public class PhaseHandler implements java.io.Serializable {
default:
break;
}
if (inCombat()) {
CombatUtil.showCombat();
}
}
// Handle effects that happen at the beginning of phases
@@ -498,10 +494,6 @@ public class PhaseHandler implements java.io.Serializable {
if (exaltedMagnitude > 0) {
CombatUtil.executeExaltedAbility(game, attacker, exaltedMagnitude, card);
}
// if ("Sovereigns of Lost Alara".equals(card.getName())) {
// CombatUtil.souverignsOfAlara2ndAbility(game, attacker);
// }
}
}

View File

@@ -30,6 +30,7 @@ import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.match.CMatchUI;
import forge.util.MyObservable;
import forge.view.ButtonUtil;
@@ -90,7 +91,7 @@ public class InputAttack extends InputSyncronizedBase {
private void showCombat() {
playerAttacks.getZone(ZoneType.Battlefield).updateObservers(); // redraw sword icons
CombatUtil.showCombat();
CMatchUI.SINGLETON_INSTANCE.showCombat();
}
/** {@inheritDoc} */

View File

@@ -26,6 +26,7 @@ import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.match.CMatchUI;
import forge.view.ButtonUtil;
/**
@@ -83,7 +84,7 @@ public class InputBlock extends InputSyncronizedBase {
showMessage(sb.toString());
}
CombatUtil.showCombat();
CMatchUI.SINGLETON_INSTANCE.showCombat();
}
/** {@inheritDoc} */
@@ -109,7 +110,7 @@ public class InputBlock extends InputSyncronizedBase {
combat.removeFromCombat(card);
}
removeFromAllBlocking(card);
CombatUtil.showCombat();
CMatchUI.SINGLETON_INSTANCE.showCombat();
return;
}

View File

@@ -37,6 +37,8 @@ import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType;
import forge.gui.framework.EDocID;
import forge.gui.framework.SDisplayUtil;
import forge.gui.match.controllers.CCombat;
import forge.gui.match.controllers.CDetail;
import forge.gui.match.controllers.CMessage;
import forge.gui.match.controllers.CPicture;
@@ -256,4 +258,13 @@ public enum CMatchUI {
private int getPlayerIndex(Player player) {
return sortedPlayers.indexOf(player);
}
public void showCombat() {
if ( CCombat.SINGLETON_INSTANCE.hasCombatToShow() ) {
SDisplayUtil.showTab(EDocID.REPORT_COMBAT.getDoc());
}
CCombat.SINGLETON_INSTANCE.update();
} // showBlockers()
}

View File

@@ -7,6 +7,8 @@ import forge.Command;
import forge.GameEntity;
import forge.game.Game;
import forge.game.phase.Combat;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
import forge.game.player.Player;
import forge.gui.framework.ICDoc;
import forge.gui.match.views.VCombat;
@@ -39,15 +41,22 @@ public enum CCombat implements ICDoc {
public void initialize() {
}
public final boolean hasCombatToShow() {
PhaseHandler pH = game.getPhaseHandler();
PhaseType ph = pH.getPhase();
return game.getCombat().isCombat() && ph.isAfter(PhaseType.COMBAT_BEGIN) && ph.isBefore(PhaseType.END_OF_TURN);
}
/* (non-Javadoc)
* @see forge.gui.framework.ICDoc#update()
*/
@Override
public void update() {
if (!game.getPhaseHandler().inCombat())
VCombat.SINGLETON_INSTANCE.updateCombat(0, "");
else
if (hasCombatToShow()) // display combat
VCombat.SINGLETON_INSTANCE.updateCombat(game.getCombat().getAttackers().size(), getCombatDescription(game.getCombat()));
else
VCombat.SINGLETON_INSTANCE.updateCombat(0, "");
}
public void setModel(Game game)