Card & CardFactoryUtil & KeywordsChange: now adding Keywords to card, does add Trigger and Replacement effects into it.

This commit is contained in:
Hanmac
2016-07-20 07:44:07 +00:00
parent 34d3b57bdb
commit 74dd8cd90d
3 changed files with 46 additions and 1 deletions

View File

@@ -3004,15 +3004,21 @@ public class Card extends GameEntity implements Comparable<Card> {
// if the key already exists - merge entries // if the key already exists - merge entries
final KeywordsChange cks = changedCardKeywords.get(timestamp); final KeywordsChange cks = changedCardKeywords.get(timestamp);
if (cks != null) { if (cks != null) {
cks.removeKeywords(this);
List<String> kws = new ArrayList<>(keywords); List<String> kws = new ArrayList<>(keywords);
List<String> rkws = new ArrayList<>(removeKeywords); List<String> rkws = new ArrayList<>(removeKeywords);
boolean remAll = removeAllKeywords; boolean remAll = removeAllKeywords;
kws.addAll(cks.getKeywords()); kws.addAll(cks.getKeywords());
rkws.addAll(cks.getRemoveKeywords()); rkws.addAll(cks.getRemoveKeywords());
remAll |= cks.isRemoveAllKeywords(); remAll |= cks.isRemoveAllKeywords();
changedCardKeywords.put(timestamp, new KeywordsChange(kws, rkws, remAll)); final KeywordsChange newCks = new KeywordsChange(kws, rkws, remAll);
newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks);
} }
else { else {
final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords);
newCks.addKeywordsToCard(this);
changedCardKeywords.put(timestamp, newCks);
changedCardKeywords.put(timestamp, new KeywordsChange(keywords, removeKeywords, removeAllKeywords)); changedCardKeywords.put(timestamp, new KeywordsChange(keywords, removeKeywords, removeAllKeywords));
} }
currentState.getView().updateKeywords(this, currentState); currentState.getView().updateKeywords(this, currentState);

View File

@@ -53,6 +53,7 @@ import forge.game.card.CardPredicates.Presets;
import forge.game.cost.Cost; import forge.game.cost.Cost;
import forge.game.cost.CostPayment; import forge.game.cost.CostPayment;
import forge.game.event.GameEventCardStatsChanged; import forge.game.event.GameEventCardStatsChanged;
import forge.game.keyword.KeywordsChange;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.replacement.ReplacementEffect; import forge.game.replacement.ReplacementEffect;
@@ -2909,6 +2910,13 @@ public class CardFactoryUtil {
} }
} }
public static void addTriggerAbility(final String keyword, final Card card, final KeywordsChange kws) {
}
public static void addReplacementEffect(final String keyword, final Card card, final KeywordsChange kws) {
}
/** /**
* TODO: Write javadoc for this method. * TODO: Write javadoc for this method.
* @param card * @param card

View File

@@ -21,6 +21,11 @@ import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.game.card.Card;
import forge.game.card.CardFactoryUtil;
import forge.game.replacement.ReplacementEffect;
import forge.game.trigger.Trigger;
/** /**
* <p> * <p>
* Card_Keywords class. * Card_Keywords class.
@@ -34,6 +39,8 @@ public class KeywordsChange {
private final List<String> removeKeywords; private final List<String> removeKeywords;
private final boolean removeAllKeywords; private final boolean removeAllKeywords;
private List<Trigger> triggers = Lists.<Trigger>newArrayList();
private List<ReplacementEffect> replacements = Lists.<ReplacementEffect>newArrayList();
/** /**
* *
* Construct a new {@link KeywordsChange}. * Construct a new {@link KeywordsChange}.
@@ -86,4 +93,28 @@ public class KeywordsChange {
&& this.keywords.isEmpty() && this.keywords.isEmpty()
&& this.removeKeywords.isEmpty(); && this.removeKeywords.isEmpty();
} }
public final void addKeywordsToCard(final Card host) {
for (String k : keywords) {
CardFactoryUtil.addTriggerAbility(k, host, this);
CardFactoryUtil.addReplacementEffect(k, host, this);
}
}
public final void removeKeywords(final Card host) {
for (Trigger t : triggers) {
host.removeTrigger(t);
}
for (ReplacementEffect r : replacements) {
host.removeReplacementEffect(r);
}
}
public final void addTrigger(final Trigger trg) {
triggers.add(trg);
}
public final void addReplacement(final ReplacementEffect trg) {
replacements.add(trg);
}
} }