Advertisement
Guest User

Loot Table

a guest
Apr 23rd, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.96 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3.  
  4. namespace DawidNoras
  5. {
  6.     public class LootTable<T> where T : class
  7.     {
  8.         private class LootTableObject
  9.         {
  10.             public readonly int number;
  11.             public readonly T value;
  12.  
  13.             public LootTableObject(int number, T value)
  14.             {
  15.                 this.number = number;
  16.                 this.value = value;
  17.             }
  18.         }
  19.  
  20.         private IList<LootTableObject> objects = new List<LootTableObject>();
  21.  
  22.         public int CombinedWeight { get; private set; }
  23.  
  24.         public void Add(T obj, int weight)
  25.         {
  26.             CombinedWeight += weight;
  27.             objects.Add(new LootTableObject(CombinedWeight, obj));
  28.         }
  29.  
  30.         public T GetRandomObject()
  31.         {
  32.             var randomNumber = Random.Range(0, CombinedWeight + 1);
  33.             return GetObject(randomNumber);
  34.         }
  35.  
  36.         public T GetObject(int value)
  37.         {
  38.             value = Mathf.Clamp(value, 0, CombinedWeight);
  39.             foreach (var obj in objects)
  40.             {
  41.                 if (value <= obj.number)
  42.                 {
  43.                     return obj.value;
  44.                 }
  45.             }
  46.             return null;
  47.         }
  48.     }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement