JisolGame/JNFrame/Assets/Game/Script/battle/GBattleModeManager.cs
PC-20230316NUNE\Administrator 98bead1a7c 提交
2024-03-20 14:22:36 +08:00

110 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Game.Plugins.App;
using Plugins.JNGame.Sync.Frame;
using Plugins.JNGame.Util;
using UnityEngine;
using UnityEngine.SceneManagement;
using Object = UnityEngine.Object;
namespace Script.battle
{
//各种模式场景
public enum GBattleMode
{
Not = -1,
Default = 0
}
//初始化参数类
public class GBattleModeInfo
{
public List<GameObject> modes;
public GameObject root;
}
//全局战斗模式管理器
public class GBattleModeManager : SingletonScene<GBattleModeManager>
{
private static readonly string[] Worlds = { "WorldSceneMode", };
//当前模式
private GBattleMode _current = GBattleMode.Default;
//当前模式实体
public Object root;
//是否本地模式
public Boolean isLocalMode = false;
//获取当前模式
public T GetMode<T>() where T : class
{
return root as T;
}
//初始化管理器
public void Init(GBattleModeInfo info)
{
// App.Event.AddListener(JNSyncFrameEvent.CREATE,LoadScene);
// App.Event.AddListener(JNSyncFrameEvent.CLEAR,UnloadScene);
}
//打开指定模式
public async UniTask Open(GBattleMode mode, Boolean isLocalMode = false)
{
//销毁之前模式
await OnReset(mode);
//是否单机模式
this.isLocalMode = isLocalMode;
//开始同步
App.Sync.OnStart();
}
//重置当前模式
public async UniTask OnReset(GBattleMode mode)
{
await this.UnloadScene(mode);
App.Sync.OnReset();
_current = mode;
await this.LoadScene();
}
//获取场景名称
public string GetWorldName(GBattleMode mode)
{
return Worlds[(int)mode];
}
//加载场景
private async UniTask LoadScene()
{
GBattleMode mode = this._current;
if (mode == GBattleMode.Not) return;
Debug.Log($"[GBattleModeManager] 打开场景{GetWorldName(mode)}");
await SceneManager.LoadSceneAsync(GetWorldName(mode));
await UniTask.NextFrame();
}
//销毁所有场景
private async UniTask UnloadScene(GBattleMode mode)
{
Debug.Log($"[GBattleModeManager] 关闭场景");
await SceneManager.UnloadSceneAsync(GetWorldName(mode));
await UniTask.NextFrame();
}
//刷新模式
private void Update()
{
App.Sync.Update((int)(Time.deltaTime * 1000));
}
}
}