CardState & Keyword when copying the keywords and cardtraits, update the hostcard for them

for Keyword, update them when the Keyword get's copied
This commit is contained in:
Hanmac
2017-10-30 10:17:18 +00:00
parent b61267d3bd
commit 003d7ac606
4 changed files with 46 additions and 22 deletions

View File

@@ -159,7 +159,7 @@ public class CardState extends GameObject {
public final void setIntrinsicKeywords(final Iterable<KeywordInterface> intrinsicKeyword0) {
intrinsicKeywords.clear();
for (KeywordInterface k : intrinsicKeyword0) {
intrinsicKeywords.insert(k.copy());
intrinsicKeywords.insert(k.copy(card));
}
}
@@ -371,28 +371,41 @@ public class CardState extends GameObject {
setBaseToughness(source.getBaseToughness());
setSVars(source.getSVars());
this.manaAbilities.clear();
manaAbilities.clear();
for (SpellAbility sa : source.manaAbilities) {
this.manaAbilities.add(sa.copy());
SpellAbility saCopy = sa.copy();
saCopy.setHostCard(card); // update HostCard
manaAbilities.add(saCopy);
}
this.nonManaAbilities.clear();
nonManaAbilities.clear();
for (SpellAbility sa : source.nonManaAbilities) {
this.nonManaAbilities.add(sa.copy());
SpellAbility saCopy = sa.copy();
saCopy.setHostCard(card); // update HostCard
nonManaAbilities.add(saCopy);
}
setIntrinsicKeywords(source.intrinsicKeywords.getValues());
setImageKey(source.getImageKey());
setRarity(source.rarity);
setSetCode(source.setCode);
replacementEffects.clear();
for (ReplacementEffect RE : source.replacementEffects) {
replacementEffects.add(RE.getCopy());
triggers.clear();
for (Trigger tr : source.triggers) {
triggers.add(tr.getCopyForHostCard(card));
}
this.staticAbilities.clear();
replacementEffects.clear();
for (ReplacementEffect re : source.replacementEffects) {
ReplacementEffect reCopy = re.getCopy();
reCopy.setHostCard(card);
replacementEffects.add(reCopy);
}
staticAbilities.clear();
for (StaticAbility sa : source.staticAbilities) {
StaticAbility saCopy = new StaticAbility(sa, this.card);
this.staticAbilities.add(saCopy);
staticAbilities.add(saCopy);
}
view.updateKeywords(c, this);
}
@@ -430,7 +443,10 @@ public class CardState extends GameObject {
public List<String> addIntrinsicKeywords(Collection<KeywordInterface> intrinsicKeywords2) {
List<String> names = Lists.newArrayList();
for (KeywordInterface inst : intrinsicKeywords2) {
names.add(inst.getOriginal());
String o = inst.getOriginal();
if (addIntrinsicKeyword(o, false) != null) {
names.add(o);
}
}
return names;
}

View File

@@ -180,28 +180,32 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> implements K
* (non-Javadoc)
* @see forge.game.keyword.KeywordInterface#copy()
*/
public KeywordInterface copy() {
public KeywordInterface copy(final Card host) {
try {
KeywordInstance<?> result = (KeywordInstance<?>) super.clone();
result.abilities = Lists.newArrayList();
for (SpellAbility sa : this.abilities) {
result.abilities.add(sa.copy());
SpellAbility saCopy = sa.copy();
saCopy.setHostCard(host);
result.abilities.add(saCopy);
}
result.triggers = Lists.newArrayList();
for (Trigger tr : this.triggers) {
result.triggers.add(tr.getCopyForHostCard(tr.getHostCard()));
result.triggers.add(tr.getCopyForHostCard(host));
}
result.replacements = Lists.newArrayList();
for (ReplacementEffect re : this.replacements) {
result.replacements.add(re.getCopy());
ReplacementEffect reCopy = re.getCopy();
reCopy.setHostCard(host);
result.replacements.add(reCopy);
}
result.staticAbilities = Lists.newArrayList();
for (StaticAbility sa : this.staticAbilities) {
result.staticAbilities.add(new StaticAbility(sa, sa.getHostCard()));
result.staticAbilities.add(new StaticAbility(sa, host));
}
return result;

View File

@@ -49,5 +49,5 @@ public interface KeywordInterface extends Cloneable {
*/
public Collection<StaticAbility> getStaticAbilities();
public KeywordInterface copy();
public KeywordInterface copy(final Card host);
}

View File

@@ -513,11 +513,15 @@ public abstract class Trigger extends TriggerReplacementBase {
SpellAbility old = this.getOverridingAbility();
SpellAbility sa = old;
// try to copy it if newHost is not the wanted host
if (!newHost.equals(old.getHostCard())) {
if (old instanceof AbilitySub) {
sa = ((AbilitySub)old).getCopy();
sa.setHostCard(newHost);
}
final Card oldHost = old.getHostCard();
if (!newHost.equals(oldHost)) {
if (old instanceof AbilitySub) {
sa = ((AbilitySub)old).getCopy();
sa.setHostCard(newHost);
}
} else if (newHost != oldHost) {
//host would be the same, but different state?
sa.setHostCard(newHost);
}
copy.setOverridingAbility(sa);
}