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.FThreads;
|
||||||
import forge.game.event.GameEvent;
|
import forge.game.event.GameEvent;
|
||||||
import forge.game.event.GameEventAnteCardsSelected;
|
import forge.game.event.GameEventAnteCardsSelected;
|
||||||
|
import forge.game.event.GameEventAttackersDeclared;
|
||||||
import forge.game.event.GameEventGameFinished;
|
import forge.game.event.GameEventGameFinished;
|
||||||
import forge.game.event.GameEventGameOutcome;
|
import forge.game.event.GameEventGameOutcome;
|
||||||
import forge.game.event.GameEventPlayerControl;
|
import forge.game.event.GameEventPlayerControl;
|
||||||
|
import forge.game.event.GameEventPlayerPriority;
|
||||||
import forge.game.event.GameEventSpellAbilityCast;
|
import forge.game.event.GameEventSpellAbilityCast;
|
||||||
import forge.game.event.GameEventSpellRemovedFromStack;
|
import forge.game.event.GameEventSpellRemovedFromStack;
|
||||||
import forge.game.event.GameEventSpellResolved;
|
import forge.game.event.GameEventSpellResolved;
|
||||||
import forge.game.event.GameEventTurnBegan;
|
import forge.game.event.GameEventTurnBegan;
|
||||||
import forge.game.event.GameEventTurnPhase;
|
import forge.game.event.GameEventTurnPhase;
|
||||||
import forge.game.event.IGameEventVisitor;
|
import forge.game.event.IGameEventVisitor;
|
||||||
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.GuiDialog;
|
import forge.gui.GuiDialog;
|
||||||
@@ -46,8 +49,9 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
if ( phaseUpdPlanned.getAndSet(true) ) return null;
|
if ( phaseUpdPlanned.getAndSet(true) ) return null;
|
||||||
|
|
||||||
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() {
|
FThreads.invokeInEdtNowOrLater(new Runnable() { @Override public void run() {
|
||||||
Player p = fc.getObservedGame().getPhaseHandler().getPlayerTurn();
|
PhaseHandler pH = fc.getObservedGame().getPhaseHandler();
|
||||||
PhaseType ph = fc.getObservedGame().getPhaseHandler().getPhase();
|
Player p = pH.getPlayerTurn();
|
||||||
|
PhaseType ph = pH.getPhase();
|
||||||
|
|
||||||
phaseUpdPlanned.set(false);
|
phaseUpdPlanned.set(false);
|
||||||
|
|
||||||
@@ -57,10 +61,25 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
|
|||||||
matchUi.resetAllPhaseButtons();
|
matchUi.resetAllPhaseButtons();
|
||||||
if (lbl != null) lbl.setActive(true);
|
if (lbl != null) lbl.setActive(true);
|
||||||
} });
|
} });
|
||||||
|
|
||||||
|
|
||||||
return null;
|
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);
|
private final AtomicBoolean turnUpdPlanned = new AtomicBoolean(false);
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ public class Combat {
|
|||||||
this.defenderMap.clear();
|
this.defenderMap.clear();
|
||||||
fillDefenderMaps(defender);
|
fillDefenderMaps(defender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final boolean isCombat() {
|
||||||
|
return !attackerMap.isEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
private void fillDefenderMaps(final Player defender) {
|
private void fillDefenderMaps(final Player defender) {
|
||||||
this.defenders.add(defender);
|
this.defenders.add(defender);
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import forge.CardLists;
|
|||||||
import forge.CardPredicates;
|
import forge.CardPredicates;
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
import forge.Constant;
|
import forge.Constant;
|
||||||
import forge.FThreads;
|
|
||||||
import forge.GameEntity;
|
import forge.GameEntity;
|
||||||
import forge.card.CardType;
|
import forge.card.CardType;
|
||||||
import forge.card.MagicColor;
|
import forge.card.MagicColor;
|
||||||
@@ -51,9 +50,6 @@ import forge.game.player.Player;
|
|||||||
import forge.game.player.PlayerController.ManaPaymentPurpose;
|
import forge.game.player.PlayerController.ManaPaymentPurpose;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.GuiDialog;
|
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) {
|
public static void orderMultipleCombatants(final Combat combat) {
|
||||||
CombatUtil.orderMultipleBlockers(combat);
|
CombatUtil.orderMultipleBlockers(combat);
|
||||||
CombatUtil.showCombat();
|
|
||||||
|
|
||||||
CombatUtil.orderBlockingMultipleAttackers(combat);
|
CombatUtil.orderBlockingMultipleAttackers(combat);
|
||||||
CombatUtil.showCombat();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void orderMultipleBlockers(final Combat combat) {
|
private static void orderMultipleBlockers(final Combat combat) {
|
||||||
@@ -955,20 +948,6 @@ public class CombatUtil {
|
|||||||
return true;
|
return true;
|
||||||
} // canAttack()
|
} // 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>
|
* <p>
|
||||||
* checkPropagandaEffects.
|
* checkPropagandaEffects.
|
||||||
|
|||||||
@@ -397,10 +397,6 @@ public class PhaseHandler implements java.io.Serializable {
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inCombat()) {
|
|
||||||
CombatUtil.showCombat();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle effects that happen at the beginning of phases
|
// Handle effects that happen at the beginning of phases
|
||||||
@@ -498,10 +494,6 @@ public class PhaseHandler implements java.io.Serializable {
|
|||||||
if (exaltedMagnitude > 0) {
|
if (exaltedMagnitude > 0) {
|
||||||
CombatUtil.executeExaltedAbility(game, attacker, exaltedMagnitude, card);
|
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.phase.CombatUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.util.MyObservable;
|
import forge.util.MyObservable;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
@@ -90,7 +91,7 @@ public class InputAttack extends InputSyncronizedBase {
|
|||||||
|
|
||||||
private void showCombat() {
|
private void showCombat() {
|
||||||
playerAttacks.getZone(ZoneType.Battlefield).updateObservers(); // redraw sword icons
|
playerAttacks.getZone(ZoneType.Battlefield).updateObservers(); // redraw sword icons
|
||||||
CombatUtil.showCombat();
|
CMatchUI.SINGLETON_INSTANCE.showCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import forge.game.phase.Combat;
|
|||||||
import forge.game.phase.CombatUtil;
|
import forge.game.phase.CombatUtil;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
import forge.gui.match.CMatchUI;
|
||||||
import forge.view.ButtonUtil;
|
import forge.view.ButtonUtil;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +84,7 @@ public class InputBlock extends InputSyncronizedBase {
|
|||||||
showMessage(sb.toString());
|
showMessage(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
CombatUtil.showCombat();
|
CMatchUI.SINGLETON_INSTANCE.showCombat();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@@ -109,7 +110,7 @@ public class InputBlock extends InputSyncronizedBase {
|
|||||||
combat.removeFromCombat(card);
|
combat.removeFromCombat(card);
|
||||||
}
|
}
|
||||||
removeFromAllBlocking(card);
|
removeFromAllBlocking(card);
|
||||||
CombatUtil.showCombat();
|
CMatchUI.SINGLETON_INSTANCE.showCombat();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.PlayerZone;
|
import forge.game.zone.PlayerZone;
|
||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
import forge.gui.framework.EDocID;
|
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.CDetail;
|
||||||
import forge.gui.match.controllers.CMessage;
|
import forge.gui.match.controllers.CMessage;
|
||||||
import forge.gui.match.controllers.CPicture;
|
import forge.gui.match.controllers.CPicture;
|
||||||
@@ -256,4 +258,13 @@ public enum CMatchUI {
|
|||||||
private int getPlayerIndex(Player player) {
|
private int getPlayerIndex(Player player) {
|
||||||
return sortedPlayers.indexOf(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.GameEntity;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.phase.Combat;
|
import forge.game.phase.Combat;
|
||||||
|
import forge.game.phase.PhaseHandler;
|
||||||
|
import forge.game.phase.PhaseType;
|
||||||
import forge.game.player.Player;
|
import forge.game.player.Player;
|
||||||
import forge.gui.framework.ICDoc;
|
import forge.gui.framework.ICDoc;
|
||||||
import forge.gui.match.views.VCombat;
|
import forge.gui.match.views.VCombat;
|
||||||
@@ -39,15 +41,22 @@ public enum CCombat implements ICDoc {
|
|||||||
public void initialize() {
|
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)
|
/* (non-Javadoc)
|
||||||
* @see forge.gui.framework.ICDoc#update()
|
* @see forge.gui.framework.ICDoc#update()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
if (!game.getPhaseHandler().inCombat())
|
if (hasCombatToShow()) // display combat
|
||||||
VCombat.SINGLETON_INSTANCE.updateCombat(0, "");
|
|
||||||
else
|
|
||||||
VCombat.SINGLETON_INSTANCE.updateCombat(game.getCombat().getAttackers().size(), getCombatDescription(game.getCombat()));
|
VCombat.SINGLETON_INSTANCE.updateCombat(game.getCombat().getAttackers().size(), getCombatDescription(game.getCombat()));
|
||||||
|
else
|
||||||
|
VCombat.SINGLETON_INSTANCE.updateCombat(0, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setModel(Game game)
|
public void setModel(Game game)
|
||||||
|
|||||||
Reference in New Issue
Block a user