NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Camp/CampManager.cs

99 lines
1.9 KiB
C#

using Cysharp.Threading.Tasks;
using Gameplay.Camp;
using Gameplay.Camp.Fsm;
using LTGame;
using PhxhSDK;
using PhxhSDK.Res;
using TGS;
using UnityEngine.SceneManagement;
/// <summary>
/// 营地管理器
/// </summary>
public sealed class CampManager : Singlenton<CampManager>, IInitable, IUpdatable
{
/// <summary>
/// 营地数据
/// </summary>
private Camp camp;
/// <summary>
/// 营地状态机
/// </summary>
private NStateMachine<BaseCampState> fsm;
/// <summary>
/// 是否在营地中
/// </summary>
private bool isCamping;
/// <summary>
/// 营地
/// </summary>
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;
}
}
/// <summary>
/// 加载营地数据
/// </summary>
public async UniTask Load(SceneHandle sceneHandle)
{
// TODO 加载营地数据,从服务器取得营地建筑数据加载到场景中
await camp.SetInfo(sceneHandle);
isCamping = true;
}
/// <summary>
/// 进入普通模式
/// </summary>
public void EnterNormal()
{
fsm.ChangeState((int)E_CampState.Normal);
}
/// <summary>
/// 进入编辑模式
/// </summary>
public void EnterEdit()
{
fsm.ChangeState((int)E_CampState.Edit);
}
/// <summary>
/// 退出营地
/// </summary>
public void Exit()
{
fsm.Exit();
camp.Exit();
isCamping = false;
}
}