@@ -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