| | |
| | | using System.Collections.Generic; |
| | | using System; |
| | | using UnityEngine; |
| | | |
| | | /** |
| | | * endless_port 无尽模式关卡配置表数据处理类 |
| | |
| | | /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 |
| | | /// </summary> |
| | | public int DropTotalWeight; |
| | | |
| | | /// <summary> |
| | | /// 关卡等级 |
| | | /// </summary> |
| | | public int PortLevel; |
| | | } |
| | | |
| | | public class EndlessPortData |
| | |
| | | |
| | | private static List<EndlessPortConfig> portConfigList; |
| | | |
| | | private static Random random; |
| | | /// <summary> |
| | | /// 关卡配置字典 |
| | | /// </summary> |
| | | private static Dictionary<int, List<EndlessPortConfig>> portDic; |
| | | |
| | | private static System.Random random; |
| | | |
| | | /// <summary> |
| | | /// 最大关卡 |
| | |
| | | /// </summary> |
| | | public static void Init() |
| | | { |
| | | random = new System.Random(); |
| | | endlessPortList = JsonDataCenter.GetList<endless_port>(); |
| | | portConfigList = new List<EndlessPortConfig>(); |
| | | random = new Random(); |
| | | portDic = new Dictionary<int, List<EndlessPortConfig>>(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更新关卡数据的时候也重新初始化一次 |
| | | /// </summary> |
| | | public static void InitPortList() |
| | | { |
| | | maxLevel = 0; |
| | | int? preLevel = null; |
| | | portConfigList.Clear(); |
| | | portDic.Clear(); |
| | | |
| | | foreach (endless_port data in endlessPortList) |
| | | { |
| | | 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); |
| | | param.PortLevel = maxLevel; |
| | | int totalWeight = 0; |
| | | |
| | | for (int i = 0; i < data.drop_rate.Count; ++i) |
| | |
| | | |
| | | param.DropTotalWeight = totalWeight; |
| | | portConfigList.Add(param); |
| | | } |
| | | } |
| | | |
| | | /// <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; |
| | | } |
| | | if (!portDic.ContainsKey(param.PortLevel)) |
| | | portDic.Add(param.PortLevel, new List<EndlessPortConfig>()); |
| | | |
| | | return -1; |
| | | portDic[param.PortLevel].Add(param); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | ret.Add(new List<EndlessPortConfig>()); |
| | | } |
| | | |
| | | foreach (EndlessPortConfig data in portConfigList) |
| | | List<EndlessPortConfig> allLevelData = portDic[level]; |
| | | |
| | | foreach (EndlessPortConfig data in allLevelData) |
| | | { |
| | | if (data.Config.level != level || data.Config.amount == 0) continue; |
| | | if (data.Config.amount == 0) continue; |
| | | |
| | | ret[data.Config.wave - 1].Add(data); |
| | | } |
| | |
| | | |
| | | for (int i = 0; i < waveData.Count; ++i) |
| | | { |
| | | ret += waveData[i].Config.amount; |
| | | int count = waveData[i].Config.amount; |
| | | endless_enemy enemyData = EndlessEnemyData.GetDataById(waveData[i].Config.enemy_id); |
| | | |
| | | // WTF... |
| | | if (enemyData.resource == 103) |
| | | count *= 2; |
| | | |
| | | ret += count; |
| | | } |
| | | |
| | | return ret; |
| | |
| | | |
| | | int val = random.Next(waveData[i].DropTotalWeight); |
| | | |
| | | // cx test |
| | | // if (val <= waveData[i].Config.drop_rate[j]) |
| | | if (val <= waveData[i].Config.drop_rate[j]) |
| | | // 命中 |
| | | ret.Add(waveData[i].Config.drop[j]); |
| | | } |