Skip to content

Commit

Permalink
Initial commit, missing tests
Browse files Browse the repository at this point in the history
  • Loading branch information
jimga150 committed Feb 23, 2024
1 parent 504889b commit a262ff3
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
18 changes: 18 additions & 0 deletions Mage/src/main/java/mage/game/GameState.java
Original file line number Diff line number Diff line change
Expand Up @@ -812,15 +812,18 @@ public void addSimultaneousDamage(DamagedEvent damagedEvent, Game game) {
// 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) {

// per damage type
Expand All @@ -839,6 +842,16 @@ public void addSimultaneousDamage(DamagedEvent damagedEvent, Game game) {
isPlayerBatchUsed = true;
}
}

// per permanent
if (isPermanentDamage && event instanceof DamagedBatchForOnePermanentEvent) {
DamagedBatchForOnePermanentEvent oldPermanentBatch = (DamagedBatchForOnePermanentEvent) event;
if (oldPermanentBatch.getDamageClazz().isInstance(damagedEvent)
&& event.getTargetId().equals(damagedEvent.getTargetId())) {
oldPermanentBatch.addEvent(damagedEvent);
isPermanentBatchUsed = true;
}
}
}

// new batch
Expand All @@ -850,6 +863,11 @@ public void addSimultaneousDamage(DamagedEvent damagedEvent, Game game) {
event.addEvent(damagedEvent);
addSimultaneousEvent(event, game);
}
if (!isPermanentBatchUsed && isPermanentDamage) {
DamagedBatchEvent event = new DamagedBatchForOnePermanentEvent(damagedEvent.getTargetId());
event.addEvent(damagedEvent);
addSimultaneousEvent(event, game);
}
}

public void addSimultaneousTapped(TappedEvent tappedEvent, Game game) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package mage.game.events;

import java.util.UUID;

public class DamagedBatchForOnePermanentEvent extends DamagedBatchEvent {

public DamagedBatchForOnePermanentEvent(UUID targetId) {
super(GameEvent.EventType.DAMAGED_BATCH_FOR_ONE_PERMANENT, DamagedPermanentEvent.class);
this.setTargetId(targetId);
}
}
5 changes: 5 additions & 0 deletions Mage/src/main/java/mage/game/events/GameEvent.java
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,11 @@ combine all permanent damage events to a single batch (event)
*/
DAMAGED_BATCH_FOR_PERMANENTS,

/* DAMAGED_BATCH_FOR_ONE_PERMANENT
combines all permanent damage events to a single batch (event) and split it per damaged permanent
*/
DAMAGED_BATCH_FOR_ONE_PERMANENT,

DESTROY_PERMANENT,
/* DESTROY_PERMANENT_BY_LEGENDARY_RULE
targetId id of the permanent to destroy
Expand Down

0 comments on commit a262ff3

Please sign in to comment.