Skip to content

Commit 28b375e

Browse files
committed
chore: Add register event for overlay scenes
1 parent da709ec commit 28b375e

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

Assets/JCSUnity/Scripts/Managers/JCS_SceneManager.cs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,14 @@ public class JCS_SceneManager : JCS_Manager<JCS_SceneManager>
5656
[ReadOnly]
5757
private JCS_WhiteScreen mWhiteScreen = null;
5858

59+
[Tooltip("A list of loaded overlays.")]
60+
[SerializeField]
61+
[ReadOnly]
62+
private List<string> mLoadedOverlaySceneNames = null;
63+
64+
// Executions after the overlay scene is loaded.
65+
private Dictionary<string, Action> mOnOverlaySceneLoaded = new();
66+
5967
[Separator("Initialize Variables (JCS_SceneManager)")]
6068

6169
[Tooltip("Type/Method to switch the scene.")]
@@ -240,6 +248,54 @@ private void HandleAdditive()
240248
}
241249
}
242250

251+
private void OnEnable()
252+
{
253+
SceneManager.sceneLoaded += OnOverlaySceneLoaded;
254+
}
255+
256+
private void OnDisable()
257+
{
258+
SceneManager.sceneLoaded -= OnOverlaySceneLoaded;
259+
}
260+
261+
private void OnOverlaySceneLoaded(Scene scene, LoadSceneMode mode)
262+
{
263+
// Overlay scene must be additive.
264+
if (mode != LoadSceneMode.Additive)
265+
return;
266+
267+
string sceneName = scene.name;
268+
269+
mLoadedOverlaySceneNames.Add(sceneName);
270+
271+
// Execute event.
272+
if (mOnOverlaySceneLoaded.ContainsKey(sceneName))
273+
RegisterOverlaySceneLoaded(sceneName, mOnOverlaySceneLoaded[sceneName]);
274+
}
275+
276+
/// <summary>
277+
/// Register an event call after the targeted overlay scene is loaded.
278+
/// </summary>
279+
/// <param name="sceneName"> The target overlay scene name. </param>
280+
/// <param name="evt"> The execution to call after the overlay scene is loaded. </param>
281+
public void RegisterOverlaySceneLoaded(string sceneName, Action evt)
282+
{
283+
// Already loaded, execute and return.
284+
if (mLoadedOverlaySceneNames.Contains(sceneName))
285+
{
286+
evt?.Invoke();
287+
288+
return;
289+
}
290+
291+
// Add one if not exists.
292+
if (!mOnOverlaySceneLoaded.ContainsKey(sceneName))
293+
mOnOverlaySceneLoaded.Add(sceneName, null);
294+
295+
// Register event.
296+
mOnOverlaySceneLoaded[sceneName] += evt;
297+
}
298+
243299
#region Load Scene
244300

245301
/// <summary>

0 commit comments

Comments
 (0)