mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Better UI updates - CCombat
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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>());
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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} */
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user