@@ -13,44 +13,52 @@ namespace MonkeyLoader.Unity
1313{
1414 internal sealed class UnityHooks : Monkey < UnityHooks >
1515 {
16- private static IUnityMonkeyInternal [ ] UnityMonkeys
17- {
18- get
19- {
20- var monkeys = Mod . Loader . Mods
21- . GetMonkeysAscending ( )
22- . SelectCastable < IMonkey , IUnityMonkeyInternal > ( )
23- . ToArray ( ) ;
24-
25- return monkeys ;
26- }
27- }
16+ private Scene _firstScene ;
2817
2918 protected override IEnumerable < IFeaturePatch > GetFeaturePatches ( ) => Enumerable . Empty < IFeaturePatch > ( ) ;
3019
3120 protected override bool OnLoaded ( )
3221 {
33- SceneManager . sceneLoaded += SceneManager_sceneLoaded ;
22+ SceneManager . sceneLoaded += OnFirstSceneReady ;
3423 Application . quitting += ( ) => Mod . Loader . Shutdown ( ) ;
3524
3625 return true ;
3726 }
3827
39- private void SceneManager_sceneLoaded ( Scene scene , LoadSceneMode sceneMode )
28+ private void LateRunFirstSceneReady ( MonkeyLoader loader , IEnumerable < Mod > mods )
29+ {
30+ Logger . Info ( ( ) => "New mods were loaded! Executing OnFirstSceneReady hooks on UnityMonkeys!" ) ;
31+
32+ RunFirstSceneReadyHooks ( mods ) ;
33+ }
34+
35+ private void OnFirstSceneReady ( Scene scene , LoadSceneMode sceneMode )
4036 {
41- Info ( ( ) => "First Scene Loaded! Executing OnFirstSceneReady hooks on UnityMonkeys!" ) ;
37+ _firstScene = scene ;
38+ SceneManager . sceneLoaded -= OnFirstSceneReady ;
39+
40+ Mod . Loader . ModsRan += LateRunFirstSceneReady ;
41+ Logger . Info ( ( ) => "First Scene Loaded! Executing OnFirstSceneReady hooks on UnityMonkeys!" ) ;
42+
43+ RunFirstSceneReadyHooks ( Mod . Loader . Mods ) ;
44+ }
45+
46+ private void RunFirstSceneReadyHooks ( IEnumerable < Mod > mods )
47+ {
48+ var unityMonkeys = mods
49+ . GetMonkeysAscending ( )
50+ . SelectCastable < IMonkey , IUnityMonkeyInternal > ( )
51+ . ToArray ( ) ;
4252
43- var unityMonkeys = UnityMonkeys ;
4453 Logger . Trace ( ( ) => "Running FirstSceneReady hooks in this order:" ) ;
4554 Logger . Trace ( unityMonkeys . Select ( uM => new Func < object > ( ( ) => $ "{ uM . Mod . Title } /{ uM . Name } ") ) ) ;
4655
47- SceneManager . sceneLoaded -= SceneManager_sceneLoaded ;
4856 var sw = Stopwatch . StartNew ( ) ;
4957
5058 foreach ( var unityMonkey in unityMonkeys )
51- unityMonkey . FirstSceneReady ( scene ) ;
59+ unityMonkey . FirstSceneReady ( _firstScene ) ;
5260
53- Info ( ( ) => $ "Done executing OnFirstSceneReady hooks on UnityMonkeys in { sw . ElapsedMilliseconds } ms!") ;
61+ Logger . Info ( ( ) => $ "Done executing OnFirstSceneReady hooks on UnityMonkeys in { sw . ElapsedMilliseconds } ms!") ;
5462 }
5563 }
5664}
0 commit comments