| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 | 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<CombatDrive>    {        public CombatController CombatController;        private CombatMonoBaisc combatMonoBaisc;        private System.Action<bool> caombatFinish;        public async CTask Init()        {            string name = "CombatRoot.prefab";            AssetHandle assetHandle = await AssetBundleLoadManager.Instance.LoadAssetAsyncTask<GameObject>(name);            assetHandle.AssetObject<GameObject>().SetActive(true);            EventManager.Instance.AddEventListener(CustomEventType.ShowLoadingUI, ShowLoadingUI);            EventManager.Instance.AddEventListener(CustomEventType.CloseLoadingUI, CloseLoadingUI);            //         }        private void ShowLoadingUI(IEventData eventData)        {            LoadingPanel.OpenLodingPanel();        }        private void CloseLoadingUI(IEventData eventData)        {            UIManager.Instance.HideUIUIPanel<LoadingPanel>();        }        public void AddCombatController(CombatController combatController)        {            this.CombatController = combatController;        }        public async CTask StartCombat(StartCombatInfo startCombatInfo)        {            CombatController.Dispose();            combatMonoBaisc = new LevelBattleCombatMono();            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);            if (startCombatInfo.CombatType == CombatType.CombatType.TestCombat)            {                await CombatPanel.OpenCombatPanel();            }            StaticUpdater.Instance.AddRenderUpdateCallBack(Update);        }        public async CTask LoadLevelBattleCombat(int levelBattleId, bool isCombatOverUi,int level, System.Action<bool> caombatFinish = null)        {            await MarskPanel.OpenPanel();            UIManager.Instance.HindCurrAllShowPanel();            // UIManager.Instance.HideUIUIPanel<DivineSenceInfoPanel>();            StartCombatInfo startCombatInfo = new StartCombatInfo();            startCombatInfo.CombatType = CombatType.CombatType.LevelBattle;            startCombatInfo.isCombatOverUi = isCombatOverUi;            startCombatInfo.monsterLevel = level;            startCombatInfo.levelBattleId= levelBattleId;            await StartCombat(startCombatInfo);            LevelBattleCombatType levelBattleCombatType = CombatController.CombatTypeBasic as LevelBattleCombatType;            if (levelBattleCombatType != null)            {                this.caombatFinish = caombatFinish;                CombatController.ChangeState(CombatController.idle);                CombatController.combatFinish = CombatFinish;                await levelBattleCombatType.LoadCombat(levelBattleId, caombatFinish);            }            else            {                return;            }            // CTaskAwaitBuffer cTaskAwaitBuffer = new CTaskAwaitBuffer();            // // CombatPanel.OpenCombatPanel(cTaskAwaitBuffer);            // CombatShowTextPanel.OpenCombatShowTextPanel(cTaskAwaitBuffer);            //            // cTaskAwaitBuffer.AddTask(combatMonoBaisc.Init(CombatController));            // await cTaskAwaitBuffer.WaitAll();            // await CombatHPPanel.OpenCombatHPPanel();            await CombatPanel.OpenCombatPanel();            ///播放动画            // MainPanel mainPanel = UIManager.Instance.GetComponent<MainPanel>();            // mainPanel.transform.gameObject.SetActive(false);            CombatController.ChangeState(CombatController.fight);            await MarskPanel.ClosePanel();        }        protected async void CombatFinish(bool isWin)        {            UIManager.Instance.HideUIUIPanel<CombatHPPanel>();            await LoadCombatFinishUI(isWin);            // MainPanel mainPanel = UIManager.Instance.GetComponent<MainPanel>();            // mainPanel.transform.gameObject.SetActive(true);        }        private async CTask LoadCombatFinishUI(bool isWin)        {            UIManager.Instance.GetComponent<CombatPanel>().Hide();            await combatMonoBaisc.GameOver(isWin);        }        /// <summary>        /// 战斗到章节        /// </summary>        /// <param name="isWin"></param>        public void CombatToStage(bool isWin)        {            CombatController.CombatHeroController.CombatFinishDispose();            CombatController.DisposeOneCombatInfo();            if (isWin)            {                LevelBattleCombatType levelBattleCombatType = CombatController.CombatTypeBasic as LevelBattleCombatType;                EventSystemManager.Instance.CeekEventCompletes(5, new[] { levelBattleCombatType.levelbattleConfig.ID });            }            caombatFinish?.Invoke(isWin);            UIManager.Instance.ShowLastHindAllShowPanel();            foreach (var instancePopUIPanel in UIManager.Instance.popUIPanels)            {                instancePopUIPanel.transform.SetAsLastSibling();            }        }        public void Update()        {            float t = Time.deltaTime;            CombatController.Update(t);            combatMonoBaisc.Update(t);        }        public void Dispose()        {            StaticUpdater.Instance.RemoveRenderUpdateCallBack(Update);        }    }}
 |