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) {
|
public final void setIntrinsicKeywords(final Iterable<KeywordInterface> intrinsicKeyword0) {
|
||||||
intrinsicKeywords.clear();
|
intrinsicKeywords.clear();
|
||||||
for (KeywordInterface k : intrinsicKeyword0) {
|
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());
|
setBaseToughness(source.getBaseToughness());
|
||||||
setSVars(source.getSVars());
|
setSVars(source.getSVars());
|
||||||
|
|
||||||
this.manaAbilities.clear();
|
manaAbilities.clear();
|
||||||
for (SpellAbility sa : source.manaAbilities) {
|
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) {
|
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());
|
setIntrinsicKeywords(source.intrinsicKeywords.getValues());
|
||||||
setImageKey(source.getImageKey());
|
setImageKey(source.getImageKey());
|
||||||
setRarity(source.rarity);
|
setRarity(source.rarity);
|
||||||
setSetCode(source.setCode);
|
setSetCode(source.setCode);
|
||||||
replacementEffects.clear();
|
|
||||||
for (ReplacementEffect RE : source.replacementEffects) {
|
triggers.clear();
|
||||||
replacementEffects.add(RE.getCopy());
|
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) {
|
for (StaticAbility sa : source.staticAbilities) {
|
||||||
StaticAbility saCopy = new StaticAbility(sa, this.card);
|
StaticAbility saCopy = new StaticAbility(sa, this.card);
|
||||||
this.staticAbilities.add(saCopy);
|
staticAbilities.add(saCopy);
|
||||||
}
|
}
|
||||||
view.updateKeywords(c, this);
|
view.updateKeywords(c, this);
|
||||||
}
|
}
|
||||||
@@ -430,7 +443,10 @@ public class CardState extends GameObject {
|
|||||||
public List<String> addIntrinsicKeywords(Collection<KeywordInterface> intrinsicKeywords2) {
|
public List<String> addIntrinsicKeywords(Collection<KeywordInterface> intrinsicKeywords2) {
|
||||||
List<String> names = Lists.newArrayList();
|
List<String> names = Lists.newArrayList();
|
||||||
for (KeywordInterface inst : intrinsicKeywords2) {
|
for (KeywordInterface inst : intrinsicKeywords2) {
|
||||||
names.add(inst.getOriginal());
|
String o = inst.getOriginal();
|
||||||
|
if (addIntrinsicKeyword(o, false) != null) {
|
||||||
|
names.add(o);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,28 +180,32 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> implements K
|
|||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
* @see forge.game.keyword.KeywordInterface#copy()
|
* @see forge.game.keyword.KeywordInterface#copy()
|
||||||
*/
|
*/
|
||||||
public KeywordInterface copy() {
|
public KeywordInterface copy(final Card host) {
|
||||||
try {
|
try {
|
||||||
KeywordInstance<?> result = (KeywordInstance<?>) super.clone();
|
KeywordInstance<?> result = (KeywordInstance<?>) super.clone();
|
||||||
|
|
||||||
result.abilities = Lists.newArrayList();
|
result.abilities = Lists.newArrayList();
|
||||||
for (SpellAbility sa : this.abilities) {
|
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();
|
result.triggers = Lists.newArrayList();
|
||||||
for (Trigger tr : this.triggers) {
|
for (Trigger tr : this.triggers) {
|
||||||
result.triggers.add(tr.getCopyForHostCard(tr.getHostCard()));
|
result.triggers.add(tr.getCopyForHostCard(host));
|
||||||
}
|
}
|
||||||
|
|
||||||
result.replacements = Lists.newArrayList();
|
result.replacements = Lists.newArrayList();
|
||||||
for (ReplacementEffect re : this.replacements) {
|
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();
|
result.staticAbilities = Lists.newArrayList();
|
||||||
for (StaticAbility sa : this.staticAbilities) {
|
for (StaticAbility sa : this.staticAbilities) {
|
||||||
result.staticAbilities.add(new StaticAbility(sa, sa.getHostCard()));
|
result.staticAbilities.add(new StaticAbility(sa, host));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -49,5 +49,5 @@ public interface KeywordInterface extends Cloneable {
|
|||||||
*/
|
*/
|
||||||
public Collection<StaticAbility> getStaticAbilities();
|
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 old = this.getOverridingAbility();
|
||||||
SpellAbility sa = old;
|
SpellAbility sa = old;
|
||||||
// try to copy it if newHost is not the wanted host
|
// try to copy it if newHost is not the wanted host
|
||||||
if (!newHost.equals(old.getHostCard())) {
|
final Card oldHost = old.getHostCard();
|
||||||
if (old instanceof AbilitySub) {
|
if (!newHost.equals(oldHost)) {
|
||||||
sa = ((AbilitySub)old).getCopy();
|
if (old instanceof AbilitySub) {
|
||||||
sa.setHostCard(newHost);
|
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);
|
copy.setOverridingAbility(sa);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user