mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 19:58:00 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -49,5 +49,5 @@ public interface KeywordInterface extends Cloneable {
|
||||
*/
|
||||
public Collection<StaticAbility> getStaticAbilities();
|
||||
|
||||
public KeywordInterface copy();
|
||||
public KeywordInterface copy(final Card host);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user