wangguan
2020-12-29 452c75675679c44cc39b04bdb7d330d7c5c14d5c
Assets/Scripts/Data/EndlessPortData.cs
@@ -29,7 +29,7 @@
        /// <summary>
        /// 掉落概率总权重,即:表中掉落概率那一项全部加起来
        /// </summary>
        public int DropTotalWeight;
        public float DropTotalWeight;
        /// <summary>
        /// 关卡等级
@@ -64,6 +64,12 @@
        /// <value></value>
        private static int maxLevel { get; set; }
        /// <summary>
        /// 新手总关卡数
        /// </summary>
        /// <value></value>
        public static int NewbieTotalLevel { get; private set; }
        public static int MaxLevel
        {
            get { return maxLevel; }
@@ -80,7 +86,6 @@
            portDic = new Dictionary<int, List<EndlessPortConfig>>();
            InitPortList();
            InitPortEnemiesTotalHP();
            int score = GetLevelScore(1);
        }
        /// <summary>
@@ -101,6 +106,9 @@
                {
                    preLevel = data.level;
                    ++maxLevel;
                    if (data.level < 0)
                        ++NewbieTotalLevel;
                }
                EndlessPortConfig param = new EndlessPortConfig();
@@ -125,7 +133,7 @@
                    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))
@@ -235,6 +243,48 @@
        }
        /// <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>
@@ -312,17 +362,17 @@
            {
                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;
@@ -340,5 +390,34 @@
            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;
        }
    }
}