//====================================
//描 述 : 根据权重进行随机
//作 者 : SHY
//创建时间 :2019/03/29 10:45:31
//版 本 :
// ===============================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ProbabilityInfo
{
public int m_id;
public int m_weight;
public int m_start;
public int m_end;
}
public class ProbabilityGenerator {
public static ProbabilityInfo GetRandomInfoByWeight(List<ProbabilityInfo> infos)
{
if (infos == null)
return null;
int sum = GetSum(infos);
AreaCalculation(infos);
var index = Random.Range(0, sum);
for (int i = 0; i < infos.Count; i++)
{
if (infos[i].m_start < index && infos[i].m_end > index)
{
return infos[i];
}
}
//保底随机一个吧
return infos[Random.Range(0, infos.Count)];
}
public static int GetSum(List<ProbabilityInfo> infos)
{
int sum = 0;
for (int i = 0; i < infos.Count; i++)
{
sum += infos[i].m_weight;
}
return sum;
}
public static void AreaCalculation(List<ProbabilityInfo> infos)
{
int start = 0;
for (int i = 0; i < infos.Count; i++)
{
infos[i].m_start = start;
infos[i].m_end = start + infos[i].m_weight;
start += infos[i].m_weight;
}
}
}