/// <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); }
/// <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); } }