88
99public static class PrefabManager
1010{
11+ #region Init
12+ [ InitializeOnLoadMethod ]
13+ private static void Init ( )
14+ {
15+ EditorApplication . update += OnProjectLoad ;
16+ }
17+
18+ private static void OnProjectLoad ( )
19+ {
20+ DefaultPrefab = Resources . Load < GameObject > ( "Prefabs/DefaultPrefab" ) ;
21+ PrefabParent = GameObject . FindGameObjectWithTag ( "Prefabs" ) . transform ;
22+ if ( DefaultPrefab != null && PrefabParent != null )
23+ {
24+ EditorApplication . update -= OnProjectLoad ;
25+ if ( ! AssetManager . IsInitialised && SettingsManager . LoadBundleOnLaunch )
26+ AssetManager . Initialise ( SettingsManager . RustDirectory + SettingsManager . BundlePathExt ) ;
27+ }
28+ }
29+ #endregion
30+
1131 public static class Callbacks
1232 {
1333 public delegate void PrefabManagerCallback ( GameObject prefab ) ;
1434
1535 /// <summary>Called after prefab is loaded and setup from bundle. </summary>
1636 public static event PrefabManagerCallback PrefabLoaded ;
37+ /// <summary>Called after prefab category is renamed.</summary>
38+ public static event PrefabManagerCallback PrefabCategoryChanged ;
39+ /// <summary>Called after prefab ID is changed.</summary>
40+ public static event PrefabManagerCallback PrefabIDChanged ;
1741
1842 public static void OnPrefabLoaded ( GameObject prefab ) => PrefabLoaded ? . Invoke ( prefab ) ;
43+ public static void OnPrefabCategoryChanged ( GameObject prefab ) => PrefabCategoryChanged ? . Invoke ( prefab ) ;
44+ public static void OnPrefabIDChanged ( GameObject prefab ) => PrefabIDChanged ? . Invoke ( prefab ) ;
1945 }
2046
2147 public static GameObject DefaultPrefab { get ; private set ; }
@@ -32,24 +58,6 @@ public static class Callbacks
3258
3359 public static bool IsChangingPrefabs { get ; private set ; }
3460
35- [ InitializeOnLoadMethod ]
36- private static void Init ( )
37- {
38- EditorApplication . update += OnProjectLoad ;
39- }
40-
41- private static void OnProjectLoad ( )
42- {
43- DefaultPrefab = Resources . Load < GameObject > ( "Prefabs/DefaultPrefab" ) ;
44- PrefabParent = GameObject . FindGameObjectWithTag ( "Prefabs" ) . transform ;
45- if ( DefaultPrefab != null && PrefabParent != null )
46- {
47- EditorApplication . update -= OnProjectLoad ;
48- if ( ! AssetManager . IsInitialised && SettingsManager . LoadBundleOnLaunch )
49- AssetManager . Initialise ( SettingsManager . RustDirectory + SettingsManager . BundlePathExt ) ;
50- }
51- }
52-
5361 /// <summary>Loads, sets up and returns the prefab at the asset path.</summary>
5462 /// <param name="path">The prefab path in the bundle file.</param>
5563 public static GameObject Load ( string path )
@@ -61,10 +69,7 @@ public static GameObject Load(string path)
6169
6270 /// <summary>Loads, sets up and returns the prefab at the prefab id.</summary>
6371 /// <param name="id">The prefab manifest id.</param>
64- public static GameObject Load ( uint id )
65- {
66- return Load ( AssetManager . ToPath ( id ) ) ;
67- }
72+ public static GameObject Load ( uint id ) => Load ( AssetManager . ToPath ( id ) ) ;
6873
6974 /// <summary>Searches through all prefabs found in bundle files, returning matches.</summary>
7075 /// <returns>List of strings containing the path matching the <paramref name="key"/>.</returns>
@@ -322,6 +327,7 @@ public static IEnumerator RenamePrefabCategories(PrefabDataHolder[] prefabs, str
322327 for ( int i = 0 ; i < prefabs . Length ; i ++ )
323328 {
324329 prefabs [ i ] . prefabData . category = name ;
330+ Callbacks . OnPrefabCategoryChanged ( prefabs [ i ] . gameObject ) ;
325331 if ( sw . Elapsed . TotalSeconds > 0.2f )
326332 {
327333 yield return null ;
@@ -345,6 +351,7 @@ public static IEnumerator RenamePrefabIDs(PrefabDataHolder[] prefabs, uint id, b
345351 for ( int i = 0 ; i < prefabs . Length ; i ++ )
346352 {
347353 prefabs [ i ] . prefabData . id = id ;
354+ Callbacks . OnPrefabIDChanged ( prefabs [ i ] . gameObject ) ;
348355 if ( replace )
349356 {
350357 prefabs [ i ] . UpdatePrefabData ( ) ;
0 commit comments