| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 | using System;using Common.Utility.CombatEvent;using Common.Utility.CombatTimer;using Core.Audio;using Core.Event.Event;using Core.State;using Core.Utility;using Excel2Json;using Fort23.Core;using GameLogic.Combat.CombatGuide;using GameLogic.Combat.CombatState;using GameLogic.Combat.CombatTool.CombatReport;using GameLogic.Combat.CombatType;using GameLogic.Combat.Hero;using GameLogic.Combat.Hero.HeroGPU;using GameLogic.CombatScenesTool;using UnityEngine;using Utility.CustomizeTimeLogic.FxLogic.TimeLineEvent;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;namespace GameLogic.Combat.CombatTool{    public class CombatController : ITimeLineAudio, IDisposable    {        public static string idle = "idle";        public static string update = "update";        public static string fight = "fight";        public static CombatController currActiveCombat;        public CombatHeroController CombatHeroController;        public CombatCameraControllder CombatCameraControllder;        public CombatTypeBasic CombatTypeBasic;        protected StateControl stateControl;        public CombatSenceController CombatSenceController;        public CombatDataController CombatDataController;        public GameTimeLineParticleFactory GameTimeLineParticleFactory;        public MagicWeaponCombatSence MagicWeaponCombatSence;        // public RandomEventController RandomEventController;        public bool isUpdate;        /// <summary>        /// 涨停游戏英雄AI行为        /// </summary>        public bool isStopAi;        public float speed = 1;        private bool _isFullUIShow;        public bool IsGameOver;        public bool IsFightState;        public System.Action<bool> combatFinish;        public float combatTime;        public CombatHeroEntity playerHeroEntity;        public bool isWin;        public CombatStateBasic CurrState        {            get { return stateControl.CurrIState as CombatStateBasic; }        }        public async CTask InitCombat(StartCombatInfo startCombatInfo)        {            combatTime = 0;            isWin = false;            IsGameOver = false;            CombatReportManager.Instance.Clear();            // CombatGuideManager.Instance.Init();            TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this);            GameTimeLineParticleFactory = new GameTimeLineParticleFactory();            TimeLineFxParticleTool.Instance.Init(GameTimeLineParticleFactory);            // RandomEventController = new RandomEventController();            currActiveCombat = this;            if (stateControl == null)            {                stateControl = new StateControl();                stateControl.AddState("idle", new CombatIdleState(this));                stateControl.AddState("update", new CombatUpdateState(this));                stateControl.AddState("fight", new CombatFightState(this));                stateControl.AddState("combatfinish", new CombatFinishState(this));                                MagicWeaponCombatSence = new MagicWeaponCombatSence();                MagicWeaponCombatSence.Init();                if (CombatSenceController == null)                {                    CombatSenceController = new CombatSenceController();                    await CombatSenceController.InitScenes();                }                if (CombatDataController == null)                {                    CombatDataController = new CombatDataController();                    await CombatDataController.Init();                }            }            Camera camera = Camera.main;            CombatCameraControllder = new CombatCameraControllder();            CombatCameraControllder.Init(this, camera);            CombatHeroController = new CombatHeroController();            await CombatHeroController.Init(this);            switch (startCombatInfo.CombatType)            {                case CombatType.CombatType.TestCombat:                    CombatTypeBasic = new TestCombatType();                    break;                case CombatType.CombatType.LevelBattle:                    CombatTypeBasic = new LevelBattleCombatType();                    break;            }            CombatTypeBasic.Init(this, startCombatInfo);            await CombatTypeBasic.StartGame();            ChangeState("update");            isUpdate = true;            EventManager.Instance.AddEventListener(CustomEventType.RefreshFull, RefreshFull);            CombatEventManager.Instance.Dispatch(CombatEventType.GameStart, null);        }        private void RefreshFull(IEventData eventData)        {            RefreshFullEventData data = (RefreshFullEventData)eventData;            _isFullUIShow = data.isFullShow;        }        public void ChangeState(string name)        {            stateControl.ChangeState(name);        }        public void Update(float t)        {            CombatGestureController.Instance.Update();            if (!isUpdate || _isFullUIShow)            {                return;            }            t *= speed;            combatTime += t;            stateControl.Update(t);            CombatTypeBasic?.Update(t);            MagicWeaponCombatSence?.Update(t);            CombatSenceController?.Update(t);            CombatTimerManager.Instance.ComabtUpdate(t);            CombatGuideManager.Instance.Update();            LateUpdate(t);        }        private void TriggerCombat()        {        }        public void LateUpdate(float t)        {            CombatHeroController.LateUpdate(t);            CombatReportManager.Instance.Update();        }        public async CTask<AudioSourcePool> PlayAudio(string audioName, bool isLoop)        {            return await AudioManager.Instance.PlayAudio(audioName, isLoop);        }        public void GameOver(bool isWin)        {            this.isWin = isWin;            IsGameOver = true;            ChangeState("combatfinish");            combatFinish?.Invoke(isWin);        }        public void DisposeOneCombatInfo()        {            CombatReportManager.Instance.Clear();            MagicWeaponCombatSence.CloseSecene();            CombatEventManager.Instance.Dispose();        }        public void Dispose()        {            TimeLineSingletonEventManager.Instance.RemoveTimeLineBasic(this);            CombatTypeBasic?.Dispose();            CombatHeroController?.Dispose();            CombatCameraControllder?.Dispose();            CombatSenceController?.Dispose();            GameTimeLineParticleFactory?.Dispose();            EventManager.Instance.RemoveAllEventListener(CustomEventType.RefreshFull);        }    }}
 |