mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 03:08:02 +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.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.card.CardStateName;
|
import forge.card.CardStateName;
|
||||||
import forge.card.MagicColor;
|
import forge.card.MagicColor;
|
||||||
@@ -564,13 +566,20 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
|||||||
return CardView.get(hostCard);
|
return CardView.get(hostCard);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IHasSVars getSVarFallback() {
|
protected List<IHasSVars> getSVarFallback() {
|
||||||
|
List<IHasSVars> result = Lists.newArrayList();
|
||||||
|
|
||||||
if (this.getKeyword() != null && this.getKeyword().getStatic() != null) {
|
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)
|
if (getCardState() != null)
|
||||||
return getCardState();
|
result.add(getCardState());
|
||||||
return getHostCard();
|
result.add(getHostCard());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
protected Optional<IHasSVars> findSVar(final String name) {
|
||||||
|
return getSVarFallback().stream().filter(f -> f.hasSVar(name)).findFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -578,12 +587,12 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
|||||||
if (sVars.containsKey(name)) {
|
if (sVars.containsKey(name)) {
|
||||||
return sVars.get(name);
|
return sVars.get(name);
|
||||||
}
|
}
|
||||||
return getSVarFallback().getSVar(name);
|
return findSVar(name).map(o -> o.getSVar(name)).orElse("");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasSVar(final String name) {
|
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) {
|
public Integer getSVarInt(final String name) {
|
||||||
@@ -604,7 +613,11 @@ public abstract class CardTraitBase extends GameObject implements IHasCardView,
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, String> getSVars() {
|
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);
|
res.putAll(sVars);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
package forge.game.spellability;
|
package forge.game.spellability;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.List;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import forge.game.IHasSVars;
|
import forge.game.IHasSVars;
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
@@ -105,10 +107,10 @@ public final class AbilitySub extends SpellAbility implements java.io.Serializab
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected IHasSVars getSVarFallback() {
|
protected List<IHasSVars> getSVarFallback() {
|
||||||
// fused or spliced
|
// fused or spliced
|
||||||
if (getRootAbility().getCardState() != getCardState()) {
|
if (getRootAbility().getCardState() != getCardState()) {
|
||||||
return getCardState();
|
return Lists.newArrayList(getCardState());
|
||||||
}
|
}
|
||||||
return super.getSVarFallback();
|
return super.getSVarFallback();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1647,8 +1647,13 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IHasSVars getSVarFallback() {
|
protected List<IHasSVars> getSVarFallback() {
|
||||||
return ObjectUtils.firstNonNull(this.getParent(), super.getSVarFallback());
|
List<IHasSVars> result = Lists.newArrayList();
|
||||||
|
if (getParent() != null) {
|
||||||
|
result.add(getParent());
|
||||||
|
}
|
||||||
|
result.addAll(super.getSVarFallback());
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUndoable() {
|
public boolean isUndoable() {
|
||||||
|
|||||||
Reference in New Issue
Block a user