using System.Collections.Generic; using Sog; using UnityEngine; using xFrame; namespace CoreGame.Render { public static class BattleSvc { public static void InitLevelCmpt(CombatContext context) { int chapterId = CoreUIBridge.BattleInfoParams.characterId; int stageId = CoreUIBridge.BattleInfoParams.initStageId; var chapterBattleDesc = ChapterBattleDescMgr.Instance.GetConfig(chapterId); if (stageId == 0) stageId = chapterBattleDesc.firstChapterBattleStageId; List waveParams = ListPool.Pop(); while (stageId != 0) { var battleStageDesc = ChapterBattleStageDescMgr.Instance.GetConfig(stageId); var waveParam = GetWaveParamByStageId(battleStageDesc); waveParams.Add(waveParam); stageId = battleStageDesc.nextStageId; } var dictionary = DictionaryPool.Pop(); var levelWaveEnt = context.CreateEntity("LevelWaveEnt"); levelWaveEnt.AddLevelWave(dictionary, waveParams, LevelSpawnState.Start, chapterBattleDesc.chapterBattleLimitedTime, chapterId); levelWaveEnt.AddFaction(Faction.Player, SelectUseType.None, Faction.Enemy); levelWaveEnt.AddTransformProxy(Vector2.zero, Vector2.zero, levelWaveEnt); var commParamDesc = CommParamDescMgr.Instance.GetConfig("MonAngryGA"); if (commParamDesc != null) { AbilitySrv.AttachActiveAbility(levelWaveEnt, commParamDesc.int_val); } context.leveWaveEid = levelWaveEnt.creationIndex; } public static WaveParam GetWaveParamByStageId(ChapterBattleStageDesc battleStageDesc) { // 小波 var lastCnt = 0; for (int i = 0; i < battleStageDesc.monster.Length; i++) { var waveConfig = battleStageDesc.monster[i]; // 用数量做的上线 if (((int)waveConfig.PositionType & 0b11110000) != 0) { for (int j = 0; j < waveConfig.Local.Length; j++) { lastCnt += waveConfig.Num[j]; } continue; } for (int j = 0; j < waveConfig.Num.Length; j++) { lastCnt += waveConfig.Num[j]; } } var waveParam = new WaveParam { waveData = battleStageDesc, state = WaveSpawnState.None, lastSpawnCount = lastCnt, spawnedIdx = new int[battleStageDesc.monster.Length], newRuleTimeSpanAcc = new Fixed64[battleStageDesc.monster.Length], eids = ListPool.Pop() }; return waveParam; } // 关卡压制Buff // public static void AttachChapterSuppressBuffToHero() // { // var heroEnt = context.LocalPlayer; // var heroPower = CoreUIBridge.BattleInfoParams.heroPower; // heroEnt.property.SetProperty(PropertyDef.LocalHeroPower, heroPower, true); // // var levelWave = context.LevelWave.levelWave; // var chapterId = levelWave.battleId; // var chapterBattleDesc = ChapterBattleDescMgr.Instance.GetConfig(chapterId); // var chapterPower = chapterBattleDesc.chapterPower; // heroEnt.property.SetProperty(PropertyDef.ChapterSuppressPower, chapterPower, true); // if (chapterPower <= 0) return; // var commParamDesc = CommParamDescMgr.Instance.GetConfig("LevelPenaltyGA"); // if (commParamDesc != null) // { // AbilitySrv.AttachActiveAbility(heroEnt, commParamDesc.int_val); // } // } } }