using Common.Utility.CombatEvent;
using Common.Utility.CombatTimer;
using Core.Audio;
using Core.State;
using Fort23.Core;
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
{
public static CombatController currActiveCombat;
public CombatHeroController CombatHeroController;
public CombatCameraControllder CombatCameraControllder;
public CombatTypeBasic CombatTypeBasic;
protected StateControl stateControl;
private AssetHandle scenesHandle;
public GameObject gameObject;
public GameTimeLineParticleFactory GameTimeLineParticleFactory;
public bool isUpdate;
///
/// 涨停游戏英雄AI行为
///
public bool isStopAi;
public float speed=1;
public CombatStateBasic CurrState
{
get { return stateControl.CurrIState as CombatStateBasic; }
}
public async CTask InitCombat(StartCombatInfo startCombatInfo)
{
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));
scenesHandle =
await AssetBundleLoadManager.Instance.LoadAssetAsyncTask("Chapter01.prefab");
gameObject = scenesHandle.AssetObject();
gameObject.SetActive(true);
Camera camera = Camera.main;
CombatCameraControllder = new CombatCameraControllder();
CombatCameraControllder.Init(this, camera);
CombatHeroController = new CombatHeroController();
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;
}
public void ChangeState(string name)
{
stateControl.ChangeState(name);
}
public void Update(float t)
{
if (!isUpdate)
{
return;
}
t *= speed;
stateControl.Update(t);
CombatTypeBasic?.Update(t);
CombatTimerManager.Instance.ComabtUpdate(t);
}
public void PlayAudio(string audioName, bool isLoop)
{
AudioManager.Instance.PlayAudio(audioName, isLoop);
}
}
}