Ejemplo n.º 1
0
        /// <summary>
        /// Determines if the player has a free perk slot available
        /// </summary>
        public static bool HasFreeSlot(Player player)
        {
            if (!PerkTable.ContainsKey(player))
            {
                return(true);
            }

            return(PerkTable[player].Item1 is Empty || PerkTable[player].Item2 is Empty);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Determines if the player has the specified perk
        /// </summary>
        public static bool HasPerk(Player player, Perk perk)
        {
            if (!PerkTable.ContainsKey(player) || perk == null || perk is Empty)
            {
                return(false);
            }

            return(PerkTable[player].Item1.GetType() == perk.GetType() || (PerkTable[player].Item2.GetType() == perk.GetType()));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Returns the set of perks belonging to the specified player
        /// </summary>
        public static Tuple <Perk, Perk> GetPerks(Player player)
        {
            if (!PerkTable.ContainsKey(player))
            {
                return(Tuple.Create <Perk, Perk>(Empty, Empty));
            }

            return(PerkTable[player]);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Gets a perk by type for a specific player
        /// </summary>
        /// <returns>instance of the <code>Perk</code> or <code>null</code> if the player does not have the type of Perk</returns>
        /// <typeparam name="T"><code>Perk</code> to retrieve from the player</typeparam>
        public static T GetByType <T>(Player player) where T : Perk
        {
            T perk = default(T);

            if (!PerkTable.ContainsKey(player))
            {
                return(perk);
            }

            if (PerkTable[player].Item1 is T)
            {
                perk = (T)(object)PerkTable[player].Item1;
            }
            else if (PerkTable[player].Item2 is T)
            {
                perk = (T)(object)PerkTable[player].Item2;
            }

            return(perk);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Gets a perk of the same type as given for the specified player
        /// </summary>
        /// <param name="player">the player to lookup</param>
        /// <param name="perk">the perk type to match</param>
        /// <returns>instance of the perk or null if the player does not have that perk</returns>
        public static Perk Get(Player player, Perk perk)
        {
            Perk res = null;

            if (!PerkTable.ContainsKey(player) || !HasPerk(player, perk))
            {
                return(res);
            }

            if (PerkTable[player].Item1.GetType() == perk.GetType())
            {
                res = PerkTable[player].Item1;
            }
            else if (PerkTable[player].Item2.GetType() == perk.GetType())
            {
                res = PerkTable[player].Item2;
            }

            return(res);
        }
Ejemplo n.º 7
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);
            }
        }