- Counters moved from being on Card to on GameEntity allowing Poison + Experience Counters to work the same as other counter types

- Improved some PlayerView updates which weren't re-writing player detail hoverbox often enough
This commit is contained in:
Sol
2015-11-18 20:19:32 +00:00
parent 83cd79e705
commit 5527f6fc6d
16 changed files with 323 additions and 123 deletions

View File

@@ -14,35 +14,7 @@ import forge.game.Game;
import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardView;
import forge.game.event.GameEvent;
import forge.game.event.GameEventAnteCardsSelected;
import forge.game.event.GameEventAttackersDeclared;
import forge.game.event.GameEventBlockersDeclared;
import forge.game.event.GameEventCardAttachment;
import forge.game.event.GameEventCardChangeZone;
import forge.game.event.GameEventCardCounters;
import forge.game.event.GameEventCardDamaged;
import forge.game.event.GameEventCardPhased;
import forge.game.event.GameEventCardStatsChanged;
import forge.game.event.GameEventCardTapped;
import forge.game.event.GameEventCombatChanged;
import forge.game.event.GameEventCombatEnded;
import forge.game.event.GameEventGameFinished;
import forge.game.event.GameEventGameOutcome;
import forge.game.event.GameEventManaPool;
import forge.game.event.GameEventPlayerControl;
import forge.game.event.GameEventPlayerLivesChanged;
import forge.game.event.GameEventPlayerPoisoned;
import forge.game.event.GameEventPlayerPriority;
import forge.game.event.GameEventPlayerStatsChanged;
import forge.game.event.GameEventShuffle;
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.GameEventZone;
import forge.game.event.IGameEventVisitor;
import forge.game.event.*;
import forge.game.player.Player;
import forge.game.player.PlayerView;
import forge.game.zone.PlayerZone;
@@ -210,6 +182,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override
public Void visit(final GameEventTurnBegan event) {
turnUpdate = event.turnOwner.getView();
processPlayer(event.turnOwner, livesUpdate);
if (FModel.getPreferences().getPrefBoolean(FPref.UI_STACK_CREATURES) && event.turnOwner != null) {
// anything except stack will get here
updateZone(event.turnOwner, ZoneType.Battlefield);
@@ -374,7 +347,9 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
final CardCollection cards = new CardCollection();
for (final Player p : event.players) {
cards.addAll(p.getAllCards());
processPlayer(p, livesUpdate);
}
return processCards(cards, cardsRefreshDetails);
}
@@ -397,4 +372,9 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
public Void visit(final GameEventPlayerPoisoned event) {
return processPlayer(event.receiver, livesUpdate);
}
@Override
public Void visit(final GameEventPlayerCounters event) {
return processPlayer(event.receiver, livesUpdate);
}
}

View File

@@ -31,12 +31,7 @@ public final class InputProliferate extends InputSelectManyBase<GameEntity> {
}
else {
for (final Entry<GameEntity, CounterType> ge : chosenCounters.entrySet()) {
if (ge.getKey() instanceof Player) {
sb.append("* A poison counter to player ").append(ge.getKey()).append("\n");
}
else {
sb.append("* ").append(ge.getKey()).append(" -> ").append(ge.getValue()).append("counter\n");
}
sb.append("* ").append(ge.getKey()).append(" -> ").append(ge.getValue()).append("counter\n");
}
}
@@ -79,7 +74,8 @@ public final class InputProliferate extends InputSelectManyBase<GameEntity> {
@Override
protected final void onPlayerSelected(final Player player, final ITriggerEvent triggerEvent) {
if (player.getPoisonCounters() == 0 || player.hasKeyword("You can't get poison counters")) {
if (!player.hasCounters()) {
// Can't select a player without counters
return;
}
@@ -87,7 +83,21 @@ public final class InputProliferate extends InputSelectManyBase<GameEntity> {
if (entityWasSelected) {
this.chosenCounters.remove(player);
} else {
this.chosenCounters.put(player, null /* POISON counter is meant */);
final List<CounterType> choices = new ArrayList<CounterType>();
for (final CounterType ct : player.getCounters().keySet()) {
if (player.getCounters(ct) > 0) {
choices.add(ct);
}
}
if (player.hasKeyword("You can't get poison counters")) {
choices.remove(CounterType.POISON);
}
final CounterType toAdd = choices.size() == 1 ? choices.get(0) : getController().getGui().one("Select counter type", choices);
chosenCounters.put(player, toAdd);
this.chosenCounters.put(player, CounterType.POISON);
}
refresh();