예제 #1
0
        /// <summary>
        /// Sets the player perk at the chosen position
        /// </summary>
        /// <returns>true if the perk could be assigned, false if the perk tree is full and overwriteExisting is false</returns>
        public static bool Set(Player player, Perk perk, PerkPosition position, bool overwriteExisting)
        {
            if (perk == null || !HasFreeSlot(player) || HasPerk(player, perk))
            {
                return(false);
            }

            if (!PerkTable.ContainsKey(player))
            {
                PerkTable[player] = Tuple.Create <Perk, Perk>(Perk.Empty, Perk.Empty);
            }

            if (!overwriteExisting)
            {
                if (position == PerkPosition.Primary && !(PerkTable[player].Item1 is Empty))
                {
                    position = PerkPosition.Secondary;
                }

                if (position == PerkPosition.Secondary && !(PerkTable[player].Item2 is Empty))
                {
                    if (PerkTable[player].Item1 is Empty)
                    {
                        position = PerkPosition.Primary;
                    }
                    else
                    {
                        return(false);
                    }
                }
            }

            switch (position)
            {
            case PerkPosition.Primary:
                PerkTable[player] = Tuple.Create <Perk, Perk>(perk, PerkTable[player].Item2);
                break;

            case PerkPosition.Secondary:
                PerkTable[player] = Tuple.Create <Perk, Perk>(PerkTable[player].Item1, perk);
                break;
            }

            return(true);
        }
예제 #2
0
        /// <summary>
        /// Removes the perk at the given position
        /// </summary>
        public static void Remove(Player player, PerkPosition position)
        {
            if (!PerkTable.ContainsKey(player))
            {
                return;
            }

            switch (position)
            {
            case PerkPosition.Primary:
                PerkTable[player] = Tuple.Create <Perk, Perk>(Empty, PerkTable[player].Item2);
                break;

            case PerkPosition.Secondary:
                PerkTable[player] = Tuple.Create <Perk, Perk>(PerkTable[player].Item1, Empty);
                break;
            }

            if (PerkTable[player].Item1 is Empty && PerkTable[player].Item2 is Empty)
            {
                PerkTable.Remove(player);
            }
        }