98 lines
1.9 KiB
C#
98 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()
|
|
{
|
|
camp.Exit();
|
|
isCamping = false;
|
|
}
|
|
} |