From 4aa68c3fa6f05be429130043a12e4c1f97dc63d9 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Fri, 30 Dec 2016 08:08:18 +0000 Subject: [PATCH] CardDamageMap: add extra Table class for storeing the damage dealt by Card to GameEntity, might extended with extra functions --- .gitattributes | 1 + .../java/forge/game/card/CardDamageMap.java | 45 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 forge-game/src/main/java/forge/game/card/CardDamageMap.java diff --git a/.gitattributes b/.gitattributes index 4dc777caf36..a6d708677e0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -477,6 +477,7 @@ forge-game/src/main/java/forge/game/card/CardCollection.java -text forge-game/src/main/java/forge/game/card/CardCollectionView.java -text forge-game/src/main/java/forge/game/card/CardColor.java svneol=native#text/plain forge-game/src/main/java/forge/game/card/CardDamageHistory.java -text +forge-game/src/main/java/forge/game/card/CardDamageMap.java -text forge-game/src/main/java/forge/game/card/CardFactory.java svneol=native#text/plain forge-game/src/main/java/forge/game/card/CardFactoryUtil.java svneol=native#text/plain forge-game/src/main/java/forge/game/card/CardLists.java svneol=native#text/plain diff --git a/forge-game/src/main/java/forge/game/card/CardDamageMap.java b/forge-game/src/main/java/forge/game/card/CardDamageMap.java new file mode 100644 index 00000000000..b1cb3c164b9 --- /dev/null +++ b/forge-game/src/main/java/forge/game/card/CardDamageMap.java @@ -0,0 +1,45 @@ +/** + * + */ +package forge.game.card; + +import java.util.Map; + +import com.google.common.collect.ForwardingTable; +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.Table; + +import forge.game.GameEntity; + +public class CardDamageMap extends ForwardingTable { + private Table dataMap = HashBasedTable.create(); + + // common function to gain life for lifelink + public void dealLifelinkDamage() { + for (Map.Entry> e : this.rowMap().entrySet()) { + final Card sourceLKI = e.getKey(); + int damageSum = 0; + for (final Integer i : e.getValue().values()) { + damageSum += i; + } + if (damageSum > 0 && sourceLKI.hasKeyword("Lifelink")) { + sourceLKI.getController().gainLife(damageSum, sourceLKI); + } + } + } + + /** + * special put logic, sum the values + */ + @Override + public Integer put(Card rowKey, GameEntity columnKey, Integer value) { + Integer old = contains(rowKey, columnKey) ? get(rowKey, columnKey) : 0; + return dataMap.put(rowKey, columnKey, value + old); + } + + @Override + protected Table delegate() { + return dataMap; + } + +}