Files
BallCrushBest_GP/Assets/Scripts/Manager/Manager/SceneManager.cs
T
2026-04-20 12:06:34 +08:00

85 lines
2.1 KiB
C#

using System.Collections.Generic;
namespace BallKingdomCrush
{
public sealed class SceneManager : BaseInterfaceManager<SceneManager>
{
public const int DefaultMainSceneIdx = 0;
private Dictionary<int, BaseScene> sceneDict = new();
private BaseScene m_currScene;
public void AddScene(BaseScene scene)
{
if (!sceneDict.ContainsKey(scene.SceneIdx))
{
sceneDict[scene.SceneIdx] = scene;
}
}
public void InitialMain(object param = null)
{
if (sceneDict.Count == 0) return;
BaseScene scene = GetScene(DefaultMainSceneIdx);
if (SetScene(scene))
{
SceneSwitchManager.Instance.SwitchInitialScene(DefaultMainSceneIdx, scene.SwitchSceneComplete, param);
}
}
public void SwitchScene(int sceneIdx, object param = null)
{
BaseScene scene = GetScene(sceneIdx);
if (SetScene(scene))
{
UIManager.Instance.SwitchSceneCloseAllUI();
SceneSwitchManager.Instance.SwitchScene(sceneIdx, scene.SwitchSceneComplete, param);
}
}
private bool SetScene(BaseScene scene)
{
if (scene == null)
{
return false;
}
else if (scene == m_currScene)
{
return false;
}
if (m_currScene != null)
{
m_currScene.Leave();
}
m_currScene = scene;
m_currScene.Enter();
return true;
}
private BaseScene GetScene(int sceneIdx)
{
BaseScene scene = null;
if (!sceneDict.TryGetValue(sceneIdx, out scene))
{
}
return scene;
}
public override void Dispose()
{
base.Dispose();
foreach (BaseScene scene in sceneDict.Values)
{
scene.Dispose();
}
sceneDict.Clear();
sceneDict = null;
}
}
}