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