Beispiel #1
0
        /// <summary>
        /// Wählt aus dem Input <see cref="Array"/> ein Objekt aus und gibt dieses zurück
        /// </summary>
        /// <param name="allLoot">Das gesamte Ausgangsmaterial</param>
        /// <returns>Das EINE Loot</returns>
        /// <exception cref="NoMatchingLootException">Bei leerem Input</exception>
        public ILootable <T> Loot(ILootable <T>[] allLoot)
        {
            if (allLoot.Length.Equals(0))
            {
                throw new NoMatchingLootException("no input items");
            }
            int counter = 0;
            int j       = 0;

            allLastItemNames    = new string[allLoot.Length];
            allLastItemRarities = new int[allLoot.Length];
            lastInnerChain      = new IntervallChain((allLoot.Select(l => {
                allLastItemNames[j] = l.Name;
                allLastItemRarities[j++] = l.Rarity;
                return(counter += l.Rarity);
            })).ToArray(), 0);
            lastEntireRange = counter;
            lastRandomRoll  = GlobalRandom.Next(0, counter);
            int index = Array.FindIndex(lastInnerChain.Intervalls, i => i.X <= lastRandomRoll && i.Y >= lastRandomRoll);

            lastUsedIntervall = lastInnerChain.Intervalls[index];
            return(allLoot[index]);
        }
 /// <summary>
 /// Methode, die die Namen und deren Wertebereiche initialisiert
 /// </summary>
 /// <param name="_rarNames">Die Namen</param>
 /// <param name="_chain">Die Wertebereiche</param>
 public void SetValues(string[] _rarNames, IntervallChain _chain)
 {
     rarNames   = _rarNames;
     innerChain = _chain;
 }
 /// <summary>
 /// Konstruktor, der die Namen und deren Wertebereiche initialisiert
 /// </summary>
 /// <param name="_rarNames">Die Namen</param>
 /// <param name="_chain">Die Wertebereiche</param>
 public DynamicRarityTable(string[] _rarNames, IntervallChain _chain)
 {
     SetValues(_rarNames, _chain);
 }