zombie_mp/Assets/HQ FPS Weapons/Scripts/Utility/ProbabilityUtils.cs
Sewmina Dilshan 68183e5317 initial
2021-08-23 13:28:33 +05:30

44 lines
1.2 KiB
C#

using UnityEngine;
using System.Collections.Generic;
namespace HQFPSWeapons
{
/// <summary>
///
/// </summary>
public class ProbabilityUtils : MonoBehaviour
{
/// <summary>
/// Return an index randomly chosen following the distribution specified by a list of probabilities
/// </summary>
/// <returns>
/// An index in range [0, probabilities.Length) following the distribution specified in probabilites.
/// </returns>
/// <param name="probabilities">
/// A list of probabilities from which to choose an index. All values must be >= 0!
/// </param>
public static int RandomChoiceFollowingDistribution(List<float> probabilities)
{
// Sum to create CDF:
float[] cdf = new float[probabilities.Count];
float sum = 0;
for (int i = 0; i < probabilities.Count; ++i)
{
cdf[i] = sum + probabilities[i];
sum = cdf[i];
}
// Choose from CDF:
float cdf_value = Random.Range(0f, cdf[probabilities.Count - 1]);
int index = System.Array.BinarySearch(cdf, cdf_value);
if (index < 0)
// If not found (probably won't be) BinarySearch returns bitwise complement of next-highest index.
index = ~index;
return index;
}
}
}