| | |
| | | using System.Collections.Generic; |
| | | using System; |
| | | |
| | | /** |
| | | * endless_port 无尽模式关卡配置表数据处理类 |
| | |
| | | /// 预先随机好的敌人数据,spawnAgent时直接取这个数据,不再动态随机 |
| | | /// </summary> |
| | | public endless_enemy EnemyData; |
| | | |
| | | /// <summary> |
| | | /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 |
| | | /// </summary> |
| | | public int DropTotalWeight; |
| | | } |
| | | |
| | | public class EndlessPortData |
| | |
| | | private static List<endless_port> endlessPortList; |
| | | |
| | | private static List<EndlessPortConfig> portConfigList; |
| | | |
| | | private static Random random; |
| | | |
| | | /// <summary> |
| | | /// 最大关卡 |
| | |
| | | { |
| | | endlessPortList = JsonDataCenter.GetList<endless_port>(); |
| | | portConfigList = new List<EndlessPortConfig>(); |
| | | random = new Random(); |
| | | |
| | | foreach (endless_port data in endlessPortList) |
| | | { |
| | |
| | | EndlessPortConfig param = new EndlessPortConfig(); |
| | | param.Config = data; |
| | | param.EnemyData = EndlessEnemyData.GetDataById(data.enemy_id); |
| | | int totalWeight = 0; |
| | | |
| | | for (int i = 0; i < data.drop_rate.Count; ++i) |
| | | { |
| | | totalWeight += data.drop_rate[i]; |
| | | } |
| | | |
| | | param.DropTotalWeight = totalWeight; |
| | | portConfigList.Add(param); |
| | | } |
| | | } |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | | } |