using cfg.LegionBattleCfg; using Cysharp.Threading.Tasks; using Framework; using Gameplay.Common; using Gameplay.SubSystems; using LTGame; using PhxhSDK; using UnityEngine; namespace Gameplay.LegionBattle { public sealed partial class LegionBattle : IUpdatable, ILoadable { /// /// 军团战状态 /// private NStateMachine fsm; /// /// 加载完成 /// /// public bool IsLoadComplete { get; private set; } public LegionBattle() { fsm = new(); fsm.Add(new LegionBattleStatePrepare(this)); fsm.Add(new LegionBattleStateBattle(this)); fsm.Add(new LegionBattleStateOver(this)); IsLoadComplete = false; } public LegionBattle(int mapId) { fsm = new(); fsm.Add(new LegionBattleStateInspect(this)); foreach (DataLegionBattleMap dataLegionBattleMap in TableManager.Instance.Tables.LegionBattleMap.DataList) { if (dataLegionBattleMap.ID == mapId) { MapCfg = dataLegionBattleMap; break; } } IsLoadComplete = false; } /// /// 加载军团战 /// /// public async UniTask Load() { AssetManager.Instance.PostPreload(PathDefine.RoadLine.ROAD_LINE_STRAIGHT); await LoadMap(); // 加载地图 await LoadLevelData(); // 加载关卡数据 await AssetManager.Instance.WaitAllPreloads(); await LoadActor(); // 加载玩家 IsLoadComplete = true; } /// /// 加载军团战查看地图 /// /// public async UniTask LoadInspect() { await LoadMap(); // 加载地图 await LoadLevelData(); // 加载关卡数据 IsLoadComplete = true; } public void Update(float deltaTime) { fsm.LogicUpdate(deltaTime); } public async UniTask Unload() { CameraManager.Instance.RevertMainCamera(); MapUtils.UnLoadMap(Map); ClearInfo(); await GameSceneManager.Instance.UnLoadSceneAsync(MapCfg.Path); AssetManager.Instance.Unload(PathDefine.RoadLine.ROAD_LINE_STRAIGHT); } public void Release() { fsm.Exit(); fsm = null; } /// /// 进入军团战查看地图 /// public void EnterLegionBattleInspect() { fsm.SetForceChangeState((int)E_LegionBattleState.Inspect); } /// /// 进入军团战 /// public void EnterLegionBattle() { //fsm.SetForceChangeState((int)E_LegionBattleState.Prepare); BeginLegionBattle(); } /// /// 开始军团战 /// public void BeginLegionBattle() { fsm.SetForceChangeState((int)E_LegionBattleState.Battle); } /// /// 结束军团战 /// public void EndLegionBattle(LegionSettleData legionSettleData) { fsm.SetForceChangeState((int)E_LegionBattleState.Over, legionSettleData); } /// /// 点击屏幕 /// /// public void ClickFromScreen(Vector2 screenPos) { fsm.currentState?.ClickFromScreen(screenPos); } } }