- Improved TriggerCombatDamageDoneOnce to propagate the amount of damage dealt to targets.

- Corrected Armadillo Cloak and Fungusaur as implementation examples for simultaneous combat damage (simultaneous noncombat damage like Aura Barbs is still impossible as of yet, feel free to improve if you know how).
This commit is contained in:
Agetian
2017-09-15 05:12:55 +00:00
parent 093b5451c3
commit 6a74bd841a
4 changed files with 21 additions and 23 deletions

View File

@@ -17,26 +17,9 @@
*/
package forge.game.combat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import forge.game.Game;
import forge.game.spellability.SpellAbilityStackInstance;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Function;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
import com.google.common.collect.Table;
import com.google.common.collect.*;
import forge.game.Game;
import forge.game.GameEntity;
import forge.game.GameLogEntryType;
import forge.game.GameObjectMap;
@@ -45,9 +28,14 @@ import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardDamageMap;
import forge.game.player.Player;
import forge.game.spellability.SpellAbilityStackInstance;
import forge.game.trigger.TriggerType;
import forge.util.collect.FCollection;
import forge.util.collect.FCollectionView;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
import java.util.Map.Entry;
/**
* <p>
@@ -815,11 +803,17 @@ public class Combat {
c.addCombatDamage(c.getAssignedDamageMap(), dealtDamageTo, preventMap);
c.clearAssignedDamage();
}
// Run triggers
for (final GameEntity ge : dealtDamageTo.columnKeySet()) {
int totalDmg = 0;
for (Integer dmgEntry : dealtDamageTo.column(ge).values()) {
totalDmg += dmgEntry;
}
final Map<String, Object> runParams = Maps.newHashMap();
runParams.put("DamageSources", dealtDamageTo.column(ge).keySet());
runParams.put("DamageAmount", totalDmg);
runParams.put("DamageTarget", ge);
ge.getGame().getTriggerHandler().runTrigger(TriggerType.CombatDamageDoneOnce, runParams, false);
}

View File

@@ -82,13 +82,15 @@ public class TriggerCombatDamageDoneOnce extends Trigger {
public final void setTriggeringObjects(final SpellAbility sa) {
sa.setTriggeringObject("Sources", this.getRunParams().get("DamageSources"));
sa.setTriggeringObject("Target", this.getRunParams().get("DamageTarget"));
sa.setTriggeringObject("DamageAmount", this.getRunParams().get("DamageAmount"));
}
@Override
public String getImportantStackObjects(SpellAbility sa) {
StringBuilder sb = new StringBuilder();
sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", ");
//sb.append("Sources: ").append(sa.getTriggeringObject("Sources")).append(", "); // FIXME: why does this end up empty at all times?
sb.append("Target: ").append(sa.getTriggeringObject("Target"));
sb.append("Damage: ").append(sa.getTriggeringObject("DamageAmount"));
return sb.toString();
}
}