mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 18:58:00 +00:00
Svar fallback changes (#7385)
* getSVarFallback use stream filter to find one with name
This commit is contained in:
@@ -2,12 +2,14 @@ package forge.game;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.card.CardStateName;
|
||||
import forge.card.MagicColor;
|
||||
@@ -564,13 +566,20 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
return CardView.get(hostCard);
|
||||
}
|
||||
|
||||
protected IHasSVars getSVarFallback() {
|
||||
protected List<IHasSVars> getSVarFallback() {
|
||||
List<IHasSVars> result = Lists.newArrayList();
|
||||
|
||||
if (this.getKeyword() != null && this.getKeyword().getStatic() != null) {
|
||||
return this.getKeyword().getStatic();
|
||||
// TODO try to add the keyword instead if possible?
|
||||
result.add(this.getKeyword().getStatic());
|
||||
}
|
||||
if (getCardState() != null)
|
||||
return getCardState();
|
||||
return getHostCard();
|
||||
result.add(getCardState());
|
||||
result.add(getHostCard());
|
||||
return result;
|
||||
}
|
||||
protected Optional<IHasSVars> findSVar(final String name) {
|
||||
return getSVarFallback().stream().filter(f -> f.hasSVar(name)).findFirst();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -578,12 +587,12 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
if (sVars.containsKey(name)) {
|
||||
return sVars.get(name);
|
||||
}
|
||||
return getSVarFallback().getSVar(name);
|
||||
return findSVar(name).map(o -> o.getSVar(name)).orElse("");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasSVar(final String name) {
|
||||
return sVars.containsKey(name) || getSVarFallback().hasSVar(name);
|
||||
return sVars.containsKey(name) || findSVar(name).isPresent();
|
||||
}
|
||||
|
||||
public Integer getSVarInt(final String name) {
|
||||
@@ -604,7 +613,11 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
||||
|
||||
@Override
|
||||
public Map<String, String> getSVars() {
|
||||
Map<String, String> res = Maps.newHashMap(getSVarFallback().getSVars());
|
||||
Map<String, String> res = Maps.newHashMap();
|
||||
// TODO reverse the order
|
||||
for (IHasSVars s : getSVarFallback()) {
|
||||
res.putAll(s.getSVars());
|
||||
}
|
||||
res.putAll(sVars);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
package forge.game.spellability;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import forge.game.IHasSVars;
|
||||
import forge.game.ability.AbilityFactory;
|
||||
@@ -105,10 +107,10 @@ public final class AbilitySub extends SpellAbility implements java.io.Serializab
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IHasSVars getSVarFallback() {
|
||||
protected List<IHasSVars> getSVarFallback() {
|
||||
// fused or spliced
|
||||
if (getRootAbility().getCardState() != getCardState()) {
|
||||
return getCardState();
|
||||
return Lists.newArrayList(getCardState());
|
||||
}
|
||||
return super.getSVarFallback();
|
||||
}
|
||||
|
||||
@@ -1647,8 +1647,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
||||
return null;
|
||||
}
|
||||
|
||||
protected IHasSVars getSVarFallback() {
|
||||
return ObjectUtils.firstNonNull(this.getParent(), super.getSVarFallback());
|
||||
protected List<IHasSVars> getSVarFallback() {
|
||||
List<IHasSVars> result = Lists.newArrayList();
|
||||
if (getParent() != null) {
|
||||
result.add(getParent());
|
||||
}
|
||||
result.addAll(super.getSVarFallback());
|
||||
return result;
|
||||
}
|
||||
|
||||
public boolean isUndoable() {
|
||||
|
||||
Reference in New Issue
Block a user