using AssetRipper.SourceGenerated.Classes.ClassID_1; using AssetRipper.SourceGenerated.Classes.ClassID_1001; using AssetRipper.SourceGenerated.Classes.ClassID_18; using AssetRipper.SourceGenerated.MarkerInterfaces; namespace AssetRipper.SourceGenerated.Extensions { public static class PrefabInstanceExtensions { public static string GetName(this IPrefabInstance prefab) { string? name = prefab.RootGameObjectP?.Name; return string.IsNullOrEmpty(name) ? prefab.ClassName : name; } public static IGameObject GetRootGameObject(this IPrefabInstance prefab) { return prefab.RootGameObjectP ?? throw new ArgumentException("Prefab has no root GameObject.", nameof(prefab)); } /// /// Sets the as the internal prefab for all s in the hierarchy. /// /// /// Prior to 2018.3, Prefab was an actual asset inside "*.prefab" files. /// /// public static void SetPrefabInternal(this IPrefabInstance prefab) { if (prefab is IPrefabMarker prefabMarker) { foreach (IEditorExtension editorExtension in prefab.GetRootGameObject().FetchHierarchy()) { editorExtension.PrefabInternal_C18P = prefabMarker; } } } } }