mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 02:08:00 +00:00
Merge branch 'damageMapClear' into 'master'
DamageMap: add clear after being triggered See merge request core-developers/forge!1290
This commit is contained in:
@@ -121,6 +121,9 @@ public class DamageAllEffect extends DamageBaseEffect {
|
|||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
final int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa);
|
final int dmg = AbilityUtils.calculateAmount(sa.getHostCard(), damage, sa);
|
||||||
|
|
||||||
List<GameObject> tgts = getTargets(sa);
|
List<GameObject> tgts = getTargets(sa);
|
||||||
if (tgts.isEmpty())
|
if (tgts.isEmpty())
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
final List<Card> definedSources = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("DamageSource"), sa);
|
final List<Card> definedSources = AbilityUtils.getDefinedCards(sa.getHostCard(), sa.getParam("DamageSource"), sa);
|
||||||
@@ -131,15 +131,15 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
sa.setPreventMap(preventMap);
|
sa.setPreventMap(preventMap);
|
||||||
usedDamageMap = true;
|
usedDamageMap = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<Card> definedSources = AbilityUtils.getDefinedCards(hostCard, sa.getParam("DamageSource"), sa);
|
final List<Card> definedSources = AbilityUtils.getDefinedCards(hostCard, sa.getParam("DamageSource"), sa);
|
||||||
if (definedSources == null || definedSources.isEmpty()) {
|
if (definedSources == null || definedSources.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Card source : definedSources) {
|
for (Card source : definedSources) {
|
||||||
final Card sourceLKI = hostCard.getGame().getChangeZoneLKIInfo(source);
|
final Card sourceLKI = hostCard.getGame().getChangeZoneLKIInfo(source);
|
||||||
|
|
||||||
if (divideOnResolution) {
|
if (divideOnResolution) {
|
||||||
// Dividing Damage up to multiple targets using combat damage box
|
// Dividing Damage up to multiple targets using combat damage box
|
||||||
// Currently only used for Master of the Wild Hunt
|
// Currently only used for Master of the Wild Hunt
|
||||||
@@ -147,7 +147,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
if (players.isEmpty()) {
|
if (players.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CardCollection assigneeCards = new CardCollection();
|
CardCollection assigneeCards = new CardCollection();
|
||||||
// Do we have a way of doing this in a better fashion?
|
// Do we have a way of doing this in a better fashion?
|
||||||
for (GameObject obj : tgts) {
|
for (GameObject obj : tgts) {
|
||||||
@@ -155,7 +155,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
assigneeCards.add((Card)obj);
|
assigneeCards.add((Card)obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Player assigningPlayer = players.get(0);
|
Player assigningPlayer = players.get(0);
|
||||||
Map<Card, Integer> map = assigningPlayer.getController().assignCombatDamage(sourceLKI, assigneeCards, dmg, null, true);
|
Map<Card, Integer> map = assigningPlayer.getController().assignCombatDamage(sourceLKI, assigneeCards, dmg, null, true);
|
||||||
for (Entry<Card, Integer> dt : map.entrySet()) {
|
for (Entry<Card, Integer> dt : map.entrySet()) {
|
||||||
@@ -166,6 +166,9 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
return;
|
return;
|
||||||
@@ -201,7 +204,7 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remember) {
|
if (remember) {
|
||||||
source.addRemembered(damageMap.row(sourceLKI).keySet());
|
source.addRemembered(damageMap.row(sourceLKI).keySet());
|
||||||
}
|
}
|
||||||
@@ -210,6 +213,9 @@ public class DamageDealEffect extends DamageBaseEffect {
|
|||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -132,6 +132,9 @@ public class DamageEachEffect extends DamageBaseEffect {
|
|||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|||||||
@@ -21,10 +21,12 @@ public class DamageResolveEffect extends SpellAbilityEffect {
|
|||||||
|
|
||||||
if (preventMap != null) {
|
if (preventMap != null) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
|
preventMap.clear();
|
||||||
}
|
}
|
||||||
// non combat damage cause lifegain there
|
// non combat damage cause lifegain there
|
||||||
if (damageMap != null) {
|
if (damageMap != null) {
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -153,6 +153,9 @@ public class FightEffect extends DamageBaseEffect {
|
|||||||
if (!usedDamageMap) {
|
if (!usedDamageMap) {
|
||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceDying(sa);
|
replaceDying(sa);
|
||||||
|
|||||||
@@ -19,6 +19,13 @@ import forge.game.trigger.TriggerType;
|
|||||||
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
public class CardDamageMap extends ForwardingTable<Card, GameEntity, Integer> {
|
||||||
private Table<Card, GameEntity, Integer> dataMap = HashBasedTable.create();
|
private Table<Card, GameEntity, Integer> dataMap = HashBasedTable.create();
|
||||||
|
|
||||||
|
public CardDamageMap(Table<Card, GameEntity, Integer> damageMap) {
|
||||||
|
this.putAll(damageMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CardDamageMap() {
|
||||||
|
}
|
||||||
|
|
||||||
public void triggerPreventDamage(boolean isCombat) {
|
public void triggerPreventDamage(boolean isCombat) {
|
||||||
for (Map.Entry<GameEntity, Map<Card, Integer>> e : this.columnMap().entrySet()) {
|
for (Map.Entry<GameEntity, Map<Card, Integer>> e : this.columnMap().entrySet()) {
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
|
|||||||
@@ -816,6 +816,7 @@ public class Combat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
preventMap.triggerPreventDamage(true);
|
preventMap.triggerPreventDamage(true);
|
||||||
|
preventMap.clear();
|
||||||
// This was deeper before, but that resulted in the stack entry acting like before.
|
// This was deeper before, but that resulted in the stack entry acting like before.
|
||||||
|
|
||||||
// Run the trigger to deal combat damage once
|
// Run the trigger to deal combat damage once
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ public class CostDamage extends CostPart {
|
|||||||
preventMap.triggerPreventDamage(false);
|
preventMap.triggerPreventDamage(false);
|
||||||
damageMap.triggerDamageDoneOnce(false, sa);
|
damageMap.triggerDamageDoneOnce(false, sa);
|
||||||
|
|
||||||
|
preventMap.clear();
|
||||||
|
damageMap.clear();
|
||||||
return decision.c > 0;
|
return decision.c > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -875,6 +875,14 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
clone.manaPart = new AbilityManaPart(host, mapParams);
|
clone.manaPart = new AbilityManaPart(host, mapParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// need to copy the damage tables
|
||||||
|
if (damageMap != null) {
|
||||||
|
clone.damageMap = new CardDamageMap(damageMap);
|
||||||
|
}
|
||||||
|
if (preventMap != null) {
|
||||||
|
clone.preventMap = new CardDamageMap(preventMap);
|
||||||
|
}
|
||||||
|
|
||||||
// clear maps for copy, the values will be added later
|
// clear maps for copy, the values will be added later
|
||||||
clone.additionalAbilities = Maps.newHashMap();
|
clone.additionalAbilities = Maps.newHashMap();
|
||||||
clone.additionalAbilityLists = Maps.newHashMap();
|
clone.additionalAbilityLists = Maps.newHashMap();
|
||||||
|
|||||||
Reference in New Issue
Block a user