From 00451158ba904571b1c6c755f34292dc76e25d80 Mon Sep 17 00:00:00 2001 From: River Jiang <546213258@qq.com> Date: Wed, 28 Oct 2020 14:47:51 +0800 Subject: [PATCH] 替换新的充能条特效 --- Assets/Scripts/Data/EndlessPortData.cs | 131 +++++++++++++++++++++++++++++++++++-------- 1 files changed, 107 insertions(+), 24 deletions(-) diff --git a/Assets/Scripts/Data/EndlessPortData.cs b/Assets/Scripts/Data/EndlessPortData.cs index c218560..5a18a97 100644 --- a/Assets/Scripts/Data/EndlessPortData.cs +++ b/Assets/Scripts/Data/EndlessPortData.cs @@ -1,4 +1,6 @@ using System.Collections.Generic; +using System; +using UnityEngine; /** * endless_port 无尽模式关卡配置表数据处理类 @@ -18,6 +20,16 @@ /// 预先随机好的敌人数据,spawnAgent时直接取这个数据,不再动态随机 /// </summary> public endless_enemy EnemyData; + + /// <summary> + /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 + /// </summary> + public int DropTotalWeight; + + /// <summary> + /// 关卡等级 + /// </summary> + public int PortLevel; } public class EndlessPortData @@ -28,6 +40,13 @@ private static List<endless_port> endlessPortList; private static List<EndlessPortConfig> portConfigList; + + /// <summary> + /// 关卡配置字典 + /// </summary> + private static Dictionary<int, List<EndlessPortConfig>> portDic; + + private static System.Random random; /// <summary> /// 最大关卡 @@ -44,35 +63,47 @@ /// </summary> public static void Init() { + random = new System.Random(); endlessPortList = JsonDataCenter.GetList<endless_port>(); portConfigList = new List<EndlessPortConfig>(); + portDic = new Dictionary<int, List<EndlessPortConfig>>(); + InitPortList(portConfigList, endlessPortList); + } - foreach (endless_port data in endlessPortList) + private static void InitPortList(List<EndlessPortConfig> list, List<endless_port> srcList) + { + maxLevel = 0; + int? preLevel = null; + + foreach (endless_port data in srcList) { - if (data.level > maxLevel) - maxLevel = data.level; + if (!GameConfig.IsNewbie && data.level < 0) continue; + + if (preLevel == null || preLevel != data.level) + { + preLevel = data.level; + ++maxLevel; + } EndlessPortConfig param = new EndlessPortConfig(); param.Config = data; param.EnemyData = EndlessEnemyData.GetDataById(data.enemy_id); - portConfigList.Add(param); - } - } + param.PortLevel = maxLevel; + int totalWeight = 0; - /// <summary> - /// 根据关卡等级获取boss资源id - /// </summary> - /// <param name="level">关卡等级</param> - /// <returns>如果返回-1查找失败</returns> - public static int GetResIdByLevel(int level) - { - foreach (endless_port data in endlessPortList) - { - if (data.level == level) - return data.resource; - } + for (int i = 0; i < data.drop_rate.Count; ++i) + { + totalWeight += data.drop_rate[i]; + } - return -1; + param.DropTotalWeight = totalWeight; + list.Add(param); + + if (!portDic.ContainsKey(param.PortLevel)) + portDic.Add(param.PortLevel, new List<EndlessPortConfig>()); + + portDic[param.PortLevel].Add(param); + } } /// <summary> @@ -84,15 +115,27 @@ { List<List<EndlessPortConfig>> ret = new List<List<EndlessPortConfig>>(); - foreach (EndlessPortConfig data in portConfigList) + for (int i = 0; i < 5; ++i) { - if (data.Config.level != level || data.Config.amount == 0 || data.Config.tunel != 3) - continue; + ret.Add(new List<EndlessPortConfig>()); + } - if (data.Config.wave > ret.Count) - ret.Add(new List<EndlessPortConfig>()); + List<EndlessPortConfig> allLevelData = portDic[level]; + + foreach (EndlessPortConfig data in allLevelData) + { + if (data.Config.amount == 0) continue; ret[data.Config.wave - 1].Add(data); + } + + for (int i = 0; i < ret.Count; ++i) + { + if (ret[i].Count == 0) + { + ret.Remove(ret[i]); + --i; + } } return ret; @@ -120,5 +163,45 @@ return ret; } + + /// <summary> + /// 根据关卡等级、波次、赛道获得击杀敌人掉落的奖励列表 + /// </summary> + /// <param name="level">关卡等级</param> + /// <param name="wave">波次</param> + /// <param name="tunel">第几条赛道</param> + /// <returns></returns> + public static List<reward> GetDropRewardList(int level, int wave, int tunel) + { + List<reward> ret = new List<reward>(); + List<List<EndlessPortConfig>> levelData = GetLevelWaveData(level); + + if (levelData.Count == 0) + throw new Exception($"当前关卡:{level}, 没有关卡数据"); + + List<EndlessPortConfig> waveData = levelData[wave - 1]; + + if (waveData.Count == 0) + throw new Exception($"当前关卡:{level},当前波次:{wave},没有波次数据"); + + for (int i = 0; i < waveData.Count; ++i) + { + 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; + + int val = random.Next(waveData[i].DropTotalWeight); + + if (val <= waveData[i].Config.drop_rate[j]) + // 命中 + ret.Add(waveData[i].Config.drop[j]); + } + } + + return ret; + } } } \ No newline at end of file -- Gitblit v1.9.1