| | |
| | | /// <summary> |
| | | /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 |
| | | /// </summary> |
| | | public int DropTotalWeight; |
| | | public float DropTotalWeight; |
| | | |
| | | /// <summary> |
| | | /// 关卡等级 |
| | |
| | | /// </summary> |
| | | /// <value></value> |
| | | private static int maxLevel { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 新手总关卡数 |
| | | /// </summary> |
| | | /// <value></value> |
| | | public static int NewbieTotalLevel { get; private set; } |
| | | |
| | | public static int MaxLevel |
| | | { |
| | |
| | | { |
| | | preLevel = data.level; |
| | | ++maxLevel; |
| | | |
| | | if (data.level < 0) |
| | | ++NewbieTotalLevel; |
| | | } |
| | | |
| | | EndlessPortConfig param = new EndlessPortConfig(); |
| | |
| | | totalWeight += data.drop_rate[i]; |
| | | } |
| | | |
| | | param.DropTotalWeight = totalWeight; |
| | | param.DropTotalWeight = (float)data.drop_rate[0] / (float)totalWeight; |
| | | portConfigList.Add(param); |
| | | |
| | | if (!portDic.ContainsKey(param.PortLevel)) |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据关卡等级和波次获得该波次的掉落概率 |
| | | /// </summary> |
| | | /// <param name="level"></param> |
| | | /// <param name="wave"></param> |
| | | /// <returns></returns> |
| | | public static float GetDropRate(int level, int wave) |
| | | { |
| | | List<List<EndlessPortConfig>> list = GetLevelWaveData(level); |
| | | if (list.Count == 0) return 0; |
| | | Debug.Log($"level:{level} wave:{wave}"); |
| | | List<EndlessPortConfig> waveData = list[wave]; |
| | | |
| | | EndlessPortConfig tmpConfig = waveData[0]; |
| | | if (tmpConfig != null) |
| | | { |
| | | return tmpConfig.DropTotalWeight; |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据关卡等级和波次获得该波次的掉落BOX |
| | | /// </summary> |
| | | /// <param name="level"></param> |
| | | /// <param name="wave"></param> |
| | | /// <returns></returns> |
| | | public static reward GetDropReward(int level, int wave) |
| | | { |
| | | List<List<EndlessPortConfig>> list = GetLevelWaveData(level); |
| | | if (list.Count == 0) return null; |
| | | |
| | | List<EndlessPortConfig> waveData = list[wave]; |
| | | |
| | | EndlessPortConfig tmpConfig = waveData[0]; |
| | | if (tmpConfig != null) |
| | | { |
| | | return tmpConfig.Config.drop; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据关卡等级和波次获得该波次的所有敌人数量 |
| | | /// </summary> |
| | | /// <param name="level"></param> |
| | |
| | | { |
| | | if (waveData[i].Config.tunel != tunel) continue; |
| | | |
| | | for (int j = 0; j < waveData[i].Config.drop.Count; ++j) |
| | | { |
| | | // 概率为0 |
| | | if (waveData[i].Config.drop_rate[j] == 0) continue; |
| | | // for (int j = 0; j < waveData[i].Config.drop.Count; ++j) |
| | | // { |
| | | // // 概率为0 |
| | | // if (waveData[i].Config.drop_rate[j] == 0) continue; |
| | | |
| | | int val = random.Next(waveData[i].DropTotalWeight); |
| | | // float val = UnityEngine.Random.Range(0, waveData[i].DropTotalWeight); |
| | | |
| | | if (val <= waveData[i].Config.drop_rate[j]) |
| | | // 命中 |
| | | ret.Add(waveData[i].Config.drop[j]); |
| | | } |
| | | // if (val <= waveData[i].Config.drop_rate[j]) |
| | | // // 命中 |
| | | // ret.Add(waveData[i].Config.drop[j]); |
| | | // } |
| | | } |
| | | |
| | | return ret; |
| | |
| | | |
| | | return list[0][0].Config.bonus; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 根据关卡等级和波次获得该波次可出怪的所有赛道(1~5) |
| | | /// </summary> |
| | | /// <param name="level"></param> |
| | | /// <param name="wave"></param> |
| | | /// <returns></returns> |
| | | public static List<int> GetAllTunelByLevelWave(int level, int wave) |
| | | { |
| | | List<int> ret = new List<int>(); |
| | | List<List<EndlessPortConfig>> list = GetLevelWaveData(level); |
| | | |
| | | if (list.Count == 0) return ret; |
| | | |
| | | List<EndlessPortConfig> waveData = list[wave]; |
| | | |
| | | if (waveData == null) |
| | | { |
| | | Debug.LogError($"---- 找不到该波次信息,关卡:{level} 波次索引:{wave} ----"); |
| | | return ret; |
| | | } |
| | | |
| | | for (int i = 0; i < waveData.Count; ++i) |
| | | { |
| | | ret.Add(waveData[i].Config.tunel); |
| | | } |
| | | |
| | | return ret; |
| | | } |
| | | } |
| | | } |