using System; using Common.Utility.CombatEvent; using Common.Utility.CombatTimer; using Core.Audio; using Core.Event.Event; using Core.State; using Fort23.Core; using GameLogic.Combat.CombatGuide; using GameLogic.Combat.CombatState; using GameLogic.Combat.CombatType; 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 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 bool isUpdate; /// /// 涨停游戏英雄AI行为 /// public bool isStopAi; public float speed = 1; private bool _isFullUIShow; public bool IsGameOver; public bool IsFightState; public CombatStateBasic CurrState { get { return stateControl.CurrIState as CombatStateBasic; } } public async CTask InitCombat(StartCombatInfo startCombatInfo) { // CombatGuideManager.Instance.Init(); TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this); GameTimeLineParticleFactory = new GameTimeLineParticleFactory(); TimeLineFxParticleTool.Instance.Init(GameTimeLineParticleFactory); currActiveCombat = this; stateControl = new StateControl(); stateControl.AddState("idle", new CombatIdleState(this)); stateControl.AddState("update", new CombatUpdateState(this)); stateControl.AddState("fight", new CombatFightState(this)); MagicWeaponCombatSence = new MagicWeaponCombatSence(); MagicWeaponCombatSence.Init(); CombatSenceController = new CombatSenceController(); await CombatSenceController.InitScenes(); 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); } 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; 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); } public async CTask PlayAudio(string audioName, bool isLoop) { return await AudioManager.Instance.PlayAudio(audioName, isLoop); } public void Dispose() { TimeLineSingletonEventManager.Instance.RemoveTimeLineBasic(this); CombatTypeBasic?.Dispose(); CombatHeroController?.Dispose(); CombatCameraControllder?.Dispose(); CombatSenceController?.Dispose(); GameTimeLineParticleFactory?.Dispose(); EventManager.Instance.RemoveAllEventListener(CustomEventType.RefreshFull); } } }