forked from External/mage
Implement Damage Batch for Permanent event (#11841)
* implement [WHO] Donna Noble * Changed trigger to DAMAGED_BATCH_FOR_PERMANENTS, check for need of separate targets * fix short circuit operator * simplify control path in paired damage trigger * Initial commit, missing tests * use CardUtil.getEventTargets * Implement Donna Noble using DamagedBatchForOnePermanentEvent * fix double-effect bug * remove unnecessary custom effect * Fix addSimultaneousDamage to avoid adding damage events to existing DamagedBatchForOnePlayerEvent instances when they shouldnt * Add clarifying comment * Incorporate batching of DAMAGED_BATCH_FOR_ONE_PERMANENT into if-else if tree to match new logic * Add tests * make ability inline * Move DamageBatchTests * Change batch events to take first event in constructor
This commit is contained in:
parent
b2aa8abba2
commit
67286aa1a0
11 changed files with 365 additions and 12 deletions
|
|
@ -812,15 +812,18 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
// Combine multiple damage events in the single event (batch)
|
||||
// * per damage type (see GameEvent.DAMAGED_BATCH_FOR_PERMANENTS, GameEvent.DAMAGED_BATCH_FOR_PLAYERS)
|
||||
// * per player (see GameEvent.DAMAGED_BATCH_FOR_ONE_PLAYER)
|
||||
// * per permanent (see GameEvent.DAMAGED_BATCH_FOR_ONE_PERMANENT)
|
||||
//
|
||||
// Warning, one event can be stored in multiple batches,
|
||||
// example: DAMAGED_BATCH_FOR_PLAYERS + DAMAGED_BATCH_FOR_ONE_PLAYER
|
||||
|
||||
boolean isPlayerDamage = damagedEvent instanceof DamagedPlayerEvent;
|
||||
boolean isPermanentDamage = damagedEvent instanceof DamagedPermanentEvent;
|
||||
|
||||
// existing batch
|
||||
boolean isDamageBatchUsed = false;
|
||||
boolean isPlayerBatchUsed = false;
|
||||
boolean isPermanentBatchUsed = false;
|
||||
for (GameEvent event : simultaneousEvents) {
|
||||
|
||||
if (isPlayerDamage && event instanceof DamagedBatchForOnePlayerEvent) {
|
||||
|
|
@ -831,6 +834,14 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
oldPlayerBatch.addEvent(damagedEvent);
|
||||
isPlayerBatchUsed = true;
|
||||
}
|
||||
} else if (isPermanentDamage && event instanceof DamagedBatchForOnePermanentEvent) {
|
||||
// per permanent
|
||||
DamagedBatchForOnePermanentEvent oldPermanentBatch = (DamagedBatchForOnePermanentEvent) event;
|
||||
if (oldPermanentBatch.getDamageClazz().isInstance(damagedEvent)
|
||||
&& CardUtil.getEventTargets(event).contains(damagedEvent.getTargetId())) {
|
||||
oldPermanentBatch.addEvent(damagedEvent);
|
||||
isPermanentBatchUsed = true;
|
||||
}
|
||||
} else if ((event instanceof DamagedBatchEvent)
|
||||
&& ((DamagedBatchEvent) event).getDamageClazz().isInstance(damagedEvent)) {
|
||||
// per damage type
|
||||
|
|
@ -842,6 +853,7 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
((DamagedBatchEvent) event).addEvent(damagedEvent);
|
||||
isDamageBatchUsed = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// new batch
|
||||
|
|
@ -849,8 +861,11 @@ public class GameState implements Serializable, Copyable<GameState> {
|
|||
addSimultaneousEvent(DamagedBatchEvent.makeEvent(damagedEvent), game);
|
||||
}
|
||||
if (!isPlayerBatchUsed && isPlayerDamage) {
|
||||
DamagedBatchEvent event = new DamagedBatchForOnePlayerEvent(damagedEvent.getTargetId());
|
||||
event.addEvent(damagedEvent);
|
||||
DamagedBatchEvent event = new DamagedBatchForOnePlayerEvent(damagedEvent);
|
||||
addSimultaneousEvent(event, game);
|
||||
}
|
||||
if (!isPermanentBatchUsed && isPermanentDamage) {
|
||||
DamagedBatchEvent event = new DamagedBatchForOnePermanentEvent(damagedEvent);
|
||||
addSimultaneousEvent(event, game);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue