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 modes; public GameObject root; } //全局战斗模式管理器 public class GBattleModeManager : SingletonScene { private static readonly string[] Worlds = { "WorldSceneMode", }; //当前模式 private GBattleMode _current = GBattleMode.Default; //当前模式实体 public Object root; //是否本地模式 public Boolean isLocalMode = false; //获取当前模式 public T GetMode() 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)); } } }