using System.Collections.Generic; using asap.core; using cfg; using GameCore; using UnityEngine; namespace Event1v1Battle.Data { /// /// 1v1扇耳光大赛数据扩展方法(仅包含纯数据查询) /// public static class Event1v1BattleSlapDataEx { #region 攻击间隔 /// /// 获取下次NPC攻击的时间间隔(秒),对 全表按 Weight 加权随机 /// public static int GetNextAttackInterval(this Event1v1BattleSlapData data) { return data.Tables.TbEventStageRobotAttackInterval.PickRandomAttackInterval(); } #endregion #region 关卡数据 /// /// 获取下一关ID /// public static int GetNextStageID(this Event1v1BattleSlapData data) { return data.StageConfig?.NextStage ?? data.InitConfig.InitialStage; } public static int GetAllStageCount(this Event1v1BattleSlapData data) { return data.GetAllStage().Count; } public static int GetStageIndex(this Event1v1BattleSlapData data, EventSlapStage stage) { return data.GetAllStage().IndexOf(stage); } public static int GetCurrentStageIndex(this Event1v1BattleSlapData data) { return data.GetStageIndex(data.StageConfig); } public static List GetAllStage(this Event1v1BattleSlapData data) { var stages = new List(); var stageIds = new HashSet(); EventSlapStage stageConfig = data.Tables.TbEventSlapStage.GetOrDefault(data.InitConfig.InitialStage); if (stageConfig == null) { Debug.LogError($"[EventSlap] Initial stage {data.InitConfig.InitialStage} not found"); return stages; } stages.Add(stageConfig); stageIds.Add(stageConfig.ID); while (!stageIds.Contains(stageConfig.NextStage)) { stageConfig = data.Tables.TbEventSlapStage.GetOrDefault(stageConfig.NextStage); stages.Add(stageConfig); stageIds.Add(stageConfig.ID); } return stages; } #endregion #region 奖励数据 public static List GetStageRewards(this Event1v1BattleSlapData data, EventSlapStage stage) { if (stage != null && stage.DropId != 0) return GContext.container.Resolve() .GetItemDataByDropIdAndTypeLureInflation(data.InflationRate, stage.DropId); Debug.LogWarning($"stage is null"); return new List(); } /// /// 获取当前关卡的奖励 /// public static List GetCurrentStageRewards(this Event1v1BattleSlapData data) { return data.GetStageRewards(data.StageConfig); } public static List> GetAllStageRewards(this Event1v1BattleSlapData data) { var rewards = new List>(); foreach (var stage in data.GetAllStage()) rewards.Add(data.GetStageRewards(stage)); return rewards; } #endregion #region 菠菜配置 /// /// 获取菠菜配置 /// public static EventSlapSpinach GetSpinachConfig(this Event1v1BattleSlapData data, int spinachID) { var spinachConfig = data.Tables.TbEventSlapSpinach.GetOrDefault(spinachID); if (spinachConfig == null) { Debug.LogError($"[EventSlap] Spinach config not found for ID: {spinachID}"); return null; } return spinachConfig; } #endregion } }