mirror of
https://github.com/magefree/mage.git
synced 2025-12-20 10:40:06 -08:00
add CopiableValues object
This commit is contained in:
parent
f86cf176d7
commit
6094545343
7 changed files with 100 additions and 6 deletions
|
|
@ -4,10 +4,6 @@ import mage.MageObjectReference;
|
||||||
import mage.abilities.Ability;
|
import mage.abilities.Ability;
|
||||||
import mage.abilities.CompoundAbility;
|
import mage.abilities.CompoundAbility;
|
||||||
import mage.abilities.MageSingleton;
|
import mage.abilities.MageSingleton;
|
||||||
import mage.abilities.dynamicvalue.DynamicValue;
|
|
||||||
import mage.abilities.dynamicvalue.common.DomainValue;
|
|
||||||
import mage.abilities.dynamicvalue.common.SignInversionDynamicValue;
|
|
||||||
import mage.abilities.dynamicvalue.common.StaticValue;
|
|
||||||
import mage.abilities.keyword.ChangelingAbility;
|
import mage.abilities.keyword.ChangelingAbility;
|
||||||
import mage.constants.*;
|
import mage.constants.*;
|
||||||
import mage.filter.Filter;
|
import mage.filter.Filter;
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ import mage.game.stack.Spell;
|
||||||
import mage.players.ManaPoolItem;
|
import mage.players.ManaPoolItem;
|
||||||
import mage.players.Player;
|
import mage.players.Player;
|
||||||
import mage.target.common.TargetCardInHand;
|
import mage.target.common.TargetCardInHand;
|
||||||
import mage.util.CardUtil;
|
|
||||||
import mage.util.trace.TraceInfo;
|
import mage.util.trace.TraceInfo;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
@ -1002,6 +1001,10 @@ public class ContinuousEffects implements Serializable {
|
||||||
activeLayerEffects = getLayeredEffects(game, "layer_1");
|
activeLayerEffects = getLayeredEffects(game, "layer_1");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) {
|
||||||
|
permanent.saveCopiableValues(game);
|
||||||
|
}
|
||||||
|
|
||||||
layer = filterLayeredEffects(activeLayerEffects, Layer.ControlChangingEffects_2);
|
layer = filterLayeredEffects(activeLayerEffects, Layer.ControlChangingEffects_2);
|
||||||
// apply control changing effects multiple times if it's needed
|
// apply control changing effects multiple times if it's needed
|
||||||
// for cases when control over permanents with change control abilities is changed
|
// for cases when control over permanents with change control abilities is changed
|
||||||
|
|
|
||||||
78
Mage/src/main/java/mage/game/permanent/CopiableValues.java
Normal file
78
Mage/src/main/java/mage/game/permanent/CopiableValues.java
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
package mage.game.permanent;
|
||||||
|
|
||||||
|
import mage.MageObject;
|
||||||
|
import mage.abilities.Abilities;
|
||||||
|
import mage.abilities.Ability;
|
||||||
|
import mage.abilities.costs.mana.ManaCost;
|
||||||
|
import mage.abilities.costs.mana.ManaCosts;
|
||||||
|
import mage.constants.CardType;
|
||||||
|
import mage.game.Game;
|
||||||
|
import mage.util.SubTypes;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author TheElk801
|
||||||
|
*/
|
||||||
|
public class CopiableValues extends PermanentImpl {
|
||||||
|
|
||||||
|
CopiableValues() {
|
||||||
|
super(null, null, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
private CopiableValues(final CopiableValues permanent) {
|
||||||
|
super(permanent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MageObject getBasicMageObject(Game game) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CopiableValues copy() {
|
||||||
|
return new CopiableValues(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void copyFrom(Permanent permanent, Game game) {
|
||||||
|
this.name = "" + permanent.getName();
|
||||||
|
this.manaCost = permanent.getManaCost().copy();
|
||||||
|
this.color = permanent.getColor(game).copy();
|
||||||
|
this.cardType.clear();
|
||||||
|
this.cardType.addAll(permanent.getCardType(game));
|
||||||
|
this.subtype.copyFrom(permanent.getSubtype(game));
|
||||||
|
this.supertype.clear();
|
||||||
|
this.supertype.addAll(permanent.getSuperType());
|
||||||
|
this.abilities = permanent.getAbilities(game).copy();
|
||||||
|
this.power = permanent.getPower().copy();
|
||||||
|
this.toughness = permanent.getToughness().copy();
|
||||||
|
this.startingLoyalty = permanent.getStartingLoyalty();
|
||||||
|
this.startingDefense = permanent.getStartingDefense();
|
||||||
|
this.expansionSetCode = permanent.getExpansionSetCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ManaCosts<ManaCost> getManaCost() {
|
||||||
|
return manaCost;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CardType> getCardType(Game game) {
|
||||||
|
return cardType;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubTypes getSubtype(Game game) {
|
||||||
|
return subtype;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Abilities<Ability> getAbilities(Game game) {
|
||||||
|
return super.getAbilities(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -441,4 +441,8 @@ public interface Permanent extends Card, Controllable {
|
||||||
this.getPower().setBoostedValue(this.getToughness().getValue());
|
this.getPower().setBoostedValue(this.getToughness().getValue());
|
||||||
this.getToughness().setBoostedValue(power);
|
this.getToughness().setBoostedValue(power);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void saveCopiableValues(Game game);
|
||||||
|
|
||||||
|
Permanent getCopiableValues();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,7 @@ public class PermanentCard extends PermanentImpl {
|
||||||
startingLoyalty = card.getStartingLoyalty();
|
startingLoyalty = card.getStartingLoyalty();
|
||||||
startingDefense = card.getStartingDefense();
|
startingDefense = card.getStartingDefense();
|
||||||
copyFromCard(card, game);
|
copyFromCard(card, game);
|
||||||
|
saveCopiableValues(game);
|
||||||
// if temporary added abilities to the spell/card exist, you need to add it to the permanent derived from that card
|
// if temporary added abilities to the spell/card exist, you need to add it to the permanent derived from that card
|
||||||
Abilities<Ability> otherAbilities = game.getState().getAllOtherAbilities(card.getId());
|
Abilities<Ability> otherAbilities = game.getState().getAllOtherAbilities(card.getId());
|
||||||
if (otherAbilities != null) {
|
if (otherAbilities != null) {
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,6 @@ import mage.players.Player;
|
||||||
import mage.target.TargetPlayer;
|
import mage.target.TargetPlayer;
|
||||||
import mage.util.CardUtil;
|
import mage.util.CardUtil;
|
||||||
import mage.util.GameLog;
|
import mage.util.GameLog;
|
||||||
import mage.util.RandomUtil;
|
|
||||||
import mage.util.ThreadLocalStringBuilder;
|
import mage.util.ThreadLocalStringBuilder;
|
||||||
import org.apache.log4j.Logger;
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
@ -110,6 +109,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
||||||
protected Map<String, String> info;
|
protected Map<String, String> info;
|
||||||
protected int createOrder;
|
protected int createOrder;
|
||||||
protected boolean legendRuleApplies = true;
|
protected boolean legendRuleApplies = true;
|
||||||
|
private final CopiableValues copiableValues = new CopiableValues();
|
||||||
|
|
||||||
private static final List<UUID> emptyList = Collections.unmodifiableList(new ArrayList<UUID>());
|
private static final List<UUID> emptyList = Collections.unmodifiableList(new ArrayList<UUID>());
|
||||||
|
|
||||||
|
|
@ -182,6 +182,7 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
||||||
this.morphed = permanent.morphed;
|
this.morphed = permanent.morphed;
|
||||||
this.manifested = permanent.manifested;
|
this.manifested = permanent.manifested;
|
||||||
this.createOrder = permanent.createOrder;
|
this.createOrder = permanent.createOrder;
|
||||||
|
this.copiableValues.copyFrom(permanent.copiableValues, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -223,6 +224,16 @@ public abstract class PermanentImpl extends CardImpl implements Permanent {
|
||||||
this.legendRuleApplies = true;
|
this.legendRuleApplies = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveCopiableValues(Game game) {
|
||||||
|
this.copiableValues.copyFrom(this, game);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Permanent getCopiableValues() {
|
||||||
|
return copiableValues;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ public class PermanentToken extends PermanentImpl {
|
||||||
this.power = new MageInt(token.getPower().getModifiedBaseValue());
|
this.power = new MageInt(token.getPower().getModifiedBaseValue());
|
||||||
this.toughness = new MageInt(token.getToughness().getModifiedBaseValue());
|
this.toughness = new MageInt(token.getToughness().getModifiedBaseValue());
|
||||||
this.copyFromToken(this.token, game, false); // needed to have at this time (e.g. for subtypes for entersTheBattlefield replacement effects)
|
this.copyFromToken(this.token, game, false); // needed to have at this time (e.g. for subtypes for entersTheBattlefield replacement effects)
|
||||||
|
this.saveCopiableValues(game);
|
||||||
if (this.token.isEntersTransformed()) {
|
if (this.token.isEntersTransformed()) {
|
||||||
TransformAbility.transformPermanent(this, this.token.getBackFace(), game, null);
|
TransformAbility.transformPermanent(this, this.token.getBackFace(), game, null);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue