public void Import(MTGObject obj) { originalName = obj.baseattr.name; name = obj.attr.name; if (obj is AbilityObject cast) { switch (cast.abilityType) { case (AbilityObject.AbilityType.Activated): typeLine = "Activated Ability"; break; case (AbilityObject.AbilityType.Triggered): typeLine = "Triggered Ability"; break; default: typeLine = "Ability"; break; } } else { typeLine = ""; foreach (var t in obj.attr.superTypes) { typeLine += t.GetString() + " "; } foreach (var t in obj.attr.cardTypes) { typeLine += t.GetString() + " "; } if (obj.attr.subTypes.Count > 0) { typeLine += "- "; } foreach (var t in obj.attr.subTypes) { typeLine += t.GetString() + " "; } typeLine = typeLine.Trim(); } if (obj.attr.cardTypes.Contains(MTGObject.CardType.Creature)) { powerToughness = $"{obj.attr.power}/{obj.attr.toughness}"; } else { powerToughness = null; } owner = obj.owner; controller = obj.attr.controller; permanentStatus = obj.permanentStatus; }
public void TestModifications() { var mtg = new MTG(); MTGObject testobj = new MTGObject(new MTGObject.BaseCardAttributes { name = "Test Creature", cardTypes = new HashSet <MTGObject.CardType> { MTGObject.CardType.Creature }, manaCost = new ManaCost(2, ManaSymbol.Blue, ManaSymbol.Red), power = 1, toughness = 1 });; mtg.CreateObject(testobj); mtg.CalculateBoardState(); Assert.AreEqual(testobj.attr.power, 1); Assert.AreEqual(testobj.attr.toughness, 1); var contEffect = new ContinuousEffect(null, ContinuousEffect.Duration.Infinite); // All creatures get +2/+0 contEffect.AddModification( new PowerMod { value = 2, operation = Modification.Operation.Add, condition = (obj) => { if (!obj.attr.cardTypes.Contains(MTGObject.CardType.Creature)) { return(false); } return(true); } } ); // All creatures get -0/-1 contEffect.AddModification( new ToughnessMod { value = 1, operation = Modification.Operation.Subtract, condition = (obj) => { if (!obj.attr.cardTypes.Contains(MTGObject.CardType.Creature)) { return(false); } return(true); } } ); mtg.continuousEffects.Add(contEffect); mtg.CalculateBoardState(); Assert.AreEqual(testobj.attr.power, 3); Assert.AreEqual(testobj.attr.toughness, 0); // All blue creatures are green contEffect = new ContinuousEffect(null, ContinuousEffect.Duration.Infinite); contEffect.AddModification( new ColorMod { value = Color.Green, operation = Modification.Operation.Override, condition = (obj) => { if (!obj.attr.cardTypes.Contains(MTGObject.CardType.Creature)) { return(false); } if (!obj.attr.color.HasColor(Color.Blue)) { return(false); } return(true); } } ); mtg.continuousEffects.Clear(); mtg.continuousEffects.Add(contEffect); mtg.CalculateBoardState(); Assert.AreEqual(testobj.identity, Color.Green); // All creatures are artifacts contEffect.AddModification( new CardTypeMod { value = new HashSet <MTGObject.CardType> { MTGObject.CardType.Artifact }, operation = Modification.Operation.Override } ); mtg.continuousEffects.Clear(); mtg.continuousEffects.Add(contEffect); // Type is before color, so the color mod should fail as // the object is now an artifact mtg.CalculateBoardState(); Assert.AreEqual(testobj.identity, Color.Izzet); }