mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 11:48:02 +00:00
DamageMap: use cause for Lifelink part
This commit is contained in:
@@ -120,7 +120,7 @@ public class DamageAllEffect extends DamageBaseEffect {
|
|||||||
|
|
||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
}
|
}
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
return;
|
return;
|
||||||
@@ -201,7 +201,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
}
|
}
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ public class DamageEachEffect extends DamageBaseEffect {
|
|||||||
|
|
||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public class DamageResolveEffect extends SpellAbilityEffect {
|
|||||||
}
|
}
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
if (damageMap != null) {
|
if (damageMap != null) {
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class FightEffect extends DamageBaseEffect {
|
|||||||
dealDamage(fighters.get(1), fighters.get(0), dmg2, damageMap, preventMap, sa);
|
dealDamage(fighters.get(1), fighters.get(0), dmg2, damageMap, preventMap, sa);
|
||||||
|
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ public class RepeatEachEffect extends SpellAbilityEffect {
|
|||||||
sa.getPreventMap().triggerPreventDamage(false);
|
sa.getPreventMap().triggerPreventDamage(false);
|
||||||
sa.setPreventMap(null);
|
sa.setPreventMap(null);
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
sa.getDamageMap().triggerDamageDoneOnce(false);
|
sa.getDamageMap().triggerDamageDoneOnce(false, sa);
|
||||||
sa.setDamageMap(null);
|
sa.setDamageMap(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import com.google.common.collect.Sets;
|
|||||||
import com.google.common.collect.Table;
|
import com.google.common.collect.Table;
|
||||||
|
|
||||||
import forge.game.GameEntity;
|
import forge.game.GameEntity;
|
||||||
|
import forge.game.spellability.SpellAbility;
|
||||||
import forge.game.trigger.TriggerType;
|
import forge.game.trigger.TriggerType;
|
||||||
|
|
||||||
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||||
@@ -35,7 +36,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void triggerDamageDoneOnce(boolean isCombat) {
|
public void triggerDamageDoneOnce(boolean isCombat, final SpellAbility sa) {
|
||||||
// Source -> Targets
|
// Source -> Targets
|
||||||
for (Map.Entry<Card, Map<GameEntity, Integer>> e : this.rowMap().entrySet()) {
|
for (Map.Entry<Card, Map<GameEntity, Integer>> e : this.rowMap().entrySet()) {
|
||||||
final Card sourceLKI = e.getKey();
|
final Card sourceLKI = e.getKey();
|
||||||
@@ -53,8 +54,7 @@ public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
|||||||
sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
|
sourceLKI.getGame().getTriggerHandler().runTrigger(TriggerType.DamageDealtOnce, runParams, false);
|
||||||
|
|
||||||
if (sourceLKI.hasKeyword("Lifelink")) {
|
if (sourceLKI.hasKeyword("Lifelink")) {
|
||||||
// FIXME: add sourceSA to fix Firesong and Sunspeaker
|
sourceLKI.getController().gainLife(sum, sourceLKI, sa);
|
||||||
sourceLKI.getController().gainLife(sum, sourceLKI);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -809,7 +809,7 @@ public class Combat {
|
|||||||
|
|
||||||
// Run the trigger to deal combat damage once
|
// Run the trigger to deal combat damage once
|
||||||
// LifeLink for Combat Damage at this place
|
// LifeLink for Combat Damage at this place
|
||||||
dealtDamageTo.triggerDamageDoneOnce(true);
|
dealtDamageTo.triggerDamageDoneOnce(true, null);
|
||||||
dealtDamageTo.clear();
|
dealtDamageTo.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class CostDamage extends CostPart {
|
|||||||
payer.addDamage(decision.c, source, damageMap, preventMap, null);
|
payer.addDamage(decision.c, source, damageMap, preventMap, null);
|
||||||
|
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, null);
|
||||||
|
|
||||||
return decision.c > 0;
|
return decision.c > 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -427,7 +427,7 @@ public class HumanPlay {
|
|||||||
p.addDamage(amount, source, damageMap, preventMap, null);
|
p.addDamage(amount, source, damageMap, preventMap, null);
|
||||||
|
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false);
|
damageMap.triggerDamageDoneOnce(false, null);
|
||||||
}
|
}
|
||||||
else if (part instanceof CostPutCounter) {
|
else if (part instanceof CostPutCounter) {
|
||||||
CounterType counterType = ((CostPutCounter) part).getCounter();
|
CounterType counterType = ((CostPutCounter) part).getCounter();
|
||||||
|
|||||||
Reference in New Issue
Block a user