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);
}
}
}