mirror of
https://gitee.com/jisol/jisol-game/
synced 2025-06-25 19:04:43 +00:00
110 lines
2.9 KiB
C#
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));
|
|
}
|
|
}
|
|
|
|
} |