From 146e39c5ef6bb29927cb7c00d7708fceab30a724 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Wed, 21 Oct 2020 10:01:40 +0800 Subject: [PATCH] 无尽模式奖励和掉落逻辑基本完成 --- Assets/Scripts/Data/EndlessPortData.cs | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 57 insertions(+), 0 deletions(-) diff --git a/Assets/Scripts/Data/EndlessPortData.cs b/Assets/Scripts/Data/EndlessPortData.cs index 92cd2b0..e117da0 100644 --- a/Assets/Scripts/Data/EndlessPortData.cs +++ b/Assets/Scripts/Data/EndlessPortData.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System; /** * endless_port 无尽模式关卡配置表数据处理类 @@ -18,6 +19,11 @@ /// 预先随机好的敌人数据,spawnAgent时直接取这个数据,不再动态随机 /// </summary> public endless_enemy EnemyData; + + /// <summary> + /// 掉落概率总权重,即:表中掉落概率那一项全部加起来 + /// </summary> + public int DropTotalWeight; } public class EndlessPortData @@ -28,6 +34,8 @@ private static List<endless_port> endlessPortList; private static List<EndlessPortConfig> portConfigList; + + private static Random random; /// <summary> /// 最大关卡 @@ -46,6 +54,7 @@ { endlessPortList = JsonDataCenter.GetList<endless_port>(); portConfigList = new List<EndlessPortConfig>(); + random = new Random(); foreach (endless_port data in endlessPortList) { @@ -55,6 +64,14 @@ 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); } } @@ -130,5 +147,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