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