using Cysharp.Threading.Tasks;
using Gameplay.Camp;
using Gameplay.Camp.Fsm;
using LTGame;
using PhxhSDK;
using PhxhSDK.Res;
using TGS;
using UnityEngine.SceneManagement;
///
/// 营地管理器
///
public sealed class CampManager : Singlenton, IInitable, IUpdatable
{
///
/// 营地数据
///
private Camp camp;
///
/// 营地状态机
///
private NStateMachine fsm;
///
/// 是否在营地中
///
private bool isCamping;
///
/// 营地
///
public Camp Camp
{
get { return camp; }
}
public void Init()
{
camp = new Camp();
fsm = new();
fsm.Add(new NormalCampState(camp));
fsm.Add(new EditCampState(camp));
fsm.Add(new ShootCampState(camp));
}
public void Update(float deltaTime)
{
if (!isCamping)
return;
fsm.LogicUpdate(deltaTime);
}
public void Release()
{
if (null != fsm)
{
fsm.Exit();
fsm = null;
}
}
///
/// 加载营地数据
///
public async UniTask Load(SceneHandle sceneHandle)
{
// TODO 加载营地数据,从服务器取得营地建筑数据加载到场景中
await camp.SetInfo(sceneHandle);
isCamping = true;
}
///
/// 进入普通模式
///
public void EnterNormal()
{
fsm.ChangeState((int)E_CampState.Normal);
}
///
/// 进入编辑模式
///
public void EnterEdit()
{
fsm.ChangeState((int)E_CampState.Edit);
}
///
/// 退出营地
///
public void Exit()
{
fsm.Exit();
camp.Exit();
isCamping = false;
}
}