示例#1
0
 public void AddMana(ManaSymbol mana)
 {
     if (ManaSymbol.GetColorCount(mana.color) > 1)
     {
         throw new ArgumentException("You can only add 0-1 color mana to your mana pool");
     }
     manaSymbols.Add(mana);
     tempManaSymbols.Add(mana);
 }
示例#2
0
        public bool RemoveMana(ManaSymbol mana)
        {
            bool result = manaSymbols.Remove(mana);

            if (result)
            {
                tempManaSymbols.Remove(mana);
            }
            return(result);
        }
示例#3
0
        public virtual bool CanThisPayForMe(ManaSymbol manaBeingSpent)
        {
            int colorCount = GetColorCount(color);

            if (colorCount == 0)
            {
                return(true);
            }
            else if (colorCount == 1)
            {
                return(color.HasColor(manaBeingSpent.color));
            }
            else
            {
                throw new ArgumentException("The ManaSymbol being spent should only have one color");
            }
        }
示例#4
0
        public static bool operator ==(ManaCost x, ManaCost y)
        {
            if (object.ReferenceEquals(x, null))
            {
                return(object.ReferenceEquals(y, null));
            }
            if (object.ReferenceEquals(y, null))
            {
                return(object.ReferenceEquals(x, null));
            }
            // TODO Manacost should self-sort to make this faster
            if (x.manaSymbols.Count != y.manaSymbols.Count)
            {
                return(false);
            }
            var manaX = new List <ManaSymbol>(x.manaSymbols);
            var manaY = new List <ManaSymbol>(y.manaSymbols);

            for (int ix = 0; ix < manaX.Count; ix++)
            {
                bool       found = false;
                ManaSymbol mana  = manaX[ix];
                for (int iy = 0; iy < manaY.Count; iy++)
                {
                    if (manaY[iy] == mana)
                    {
                        manaY.RemoveAt(iy);
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    return(false);
                }
            }
            return(true);
        }
示例#5
0
        public ManaChoice(List <ManaSymbol> manaSymbols, ManaSymbol manaToPay, int playerIndex)
        {
            Title       = $"Choose which mana to use to pay for {manaToPay}";
            Min         = 1; Max = 1;
            Options     = new List <ManaChoiceOption>();
            Cancellable = true;

            foreach (var mana in manaSymbols)
            {
                Options.Add(new ManaChoiceOption
                {
                    type       = ManaChoiceOption.OptionType.UseMana,
                    manaSymbol = mana
                });
            }

            foreach (var kvp in MTG.Instance.objects)
            {
                OID oid = kvp.Key; MTGObject obj = kvp.Value;
                if (obj.attr.controller != playerIndex)
                {
                    continue;
                }
                foreach (var ability in obj.attr.activatedAbilities)
                {
                    if (ability is ManaAbility && ability.CanBeActivated(oid))
                    {
                        Options.Add(new ManaChoiceOption
                        {
                            type = ManaChoiceOption.OptionType.ActivateManaAbility,
                            manaAbilitySource = oid,
                            manaAbility       = ability as ManaAbility
                        });
                    }
                }
            }
        }
示例#6
0
 public RemoveManaEvent(OID source, int player, ManaSymbol mana) : base(source)
 {
     this.player = player;
     this.mana   = mana;
 }
示例#7
0
 internal AddManaEvent(OID source, int player, ManaSymbol mana) : base(source)
 {
     this.player = player;
     this.mana   = mana;
 }
示例#8
0
 public PayManaCostEvent(ManaSymbol mana) : base()
 {
     this.mana = mana;
 }