using System; using Fort23.Core; using Fort23.Mono; using Fort23.UTool; using GameLogic.Combat.CombatTool; using GameLogic.Combat.CombatType; using GameLogic.CombatScenesTool; using GameUI.Combat; using UnityEngine; using Utility; namespace GameLogic.Combat { public class CombatDrive : Singleton { public CombatController CombatController; private CombatMonoBaisc combatMonoBaisc; private System.Action caombatFinish; public async CTask Init() { string name = "CombatRoot.prefab"; AssetHandle assetHandle = await AssetBundleLoadManager.Instance.LoadAssetAsyncTask(name); assetHandle.AssetObject().SetActive(true); // } public void AddCombatController(CombatController combatController) { this.CombatController = combatController; } public async CTask StartCombat(StartCombatInfo startCombatInfo) { combatMonoBaisc = new CombatMonoBaisc(); CombatEquipFallManager.Instance.Dispose(); CombatEquipFallManager.Instance.Init(); CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer(); // CombatPanel.OpenCombatPanel(cTaskAwaitBuffer); CombatShowTextPanel.OpenCombatShowTextPanel(cTaskAwaitBuffer); cTaskAwaitBuffer.AddTask(combatMonoBaisc.Init(CombatController)); await cTaskAwaitBuffer.WaitAll(); await CombatHPPanel.OpenCombatHPPanel(); LogTool.Log("战斗逻辑自己写"); await CombatController.InitCombat(startCombatInfo); StaticUpdater.Instance.AddRenderUpdateCallBack(Update); } public async CTask LoadLevelBattleCombat(int levelBattleId, System.Action caombatFinish) { this.caombatFinish = caombatFinish; CombatController.ChangeState(CombatController.idle); LevelBattleCombatType levelBattleCombatType = CombatController.CombatTypeBasic as LevelBattleCombatType; if (levelBattleCombatType != null) { CombatController.combatFinish = CombatFinish; await levelBattleCombatType.LoadCombat(levelBattleId, caombatFinish); } await CombatPanel.OpenCombatPanel(); ///播放动画 MainPanel mainPanel = UIManager.Instance.GetComponent(); mainPanel.transform.gameObject.SetActive(false); CombatController.ChangeState(CombatController.update); } protected void CombatFinish(bool isWin) { caombatFinish?.Invoke(isWin); ///播放动画 MainPanel mainPanel = UIManager.Instance.GetComponent(); mainPanel.transform.gameObject.SetActive(true); UIManager.Instance.HideUIUIPanel(); } public void Update() { float t = Time.deltaTime; CombatController.Update(t); combatMonoBaisc.Update(t); } public void Dispose() { StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update); } } }