public static void UpdateHierarchy(Fabric.Component component = null) { GameObject gameObject = null; List <Fabric.Component> list = null; if (component == null && Instance != null) { gameObject = Instance.gameObject; list = Instance._components; } else if (component != null) { gameObject = component.gameObject; list = component.Components; } if (gameObject == null || list == null) { return; } for (int i = 0; i < gameObject.transform.childCount; i++) { Fabric.Component component2 = gameObject.transform.GetChild(i).GetComponent <Fabric.Component>(); if (!(component2 != null) || component2.IsInstance) { continue; } GroupComponent groupComponent = component2 as GroupComponent; if (groupComponent != null && groupComponent._isRegisteredWithMainHierarchy) { groupComponent.UnregisterWithMainHierarchy(); } bool flag = false; for (int j = 0; j < list.Count; j++) { if (list[j] == component2) { flag = true; break; } } if (!flag) { list.Add(component2); if (component != null) { component.UpdateComponentsArray(); } if (component2.ParentComponent != null) { component2.ParentComponent.Initialise(component, isComponentInstance: false); } else { component2.Initialise(component, isComponentInstance: false); } Instance.RefreshComponents(); } else { UpdateHierarchy(component2); } } for (int k = 0; k < list.Count; k++) { bool flag2 = false; for (int l = 0; l < gameObject.transform.childCount; l++) { Fabric.Component component3 = gameObject.transform.GetChild(l).GetComponent <Fabric.Component>(); GroupComponentProxy component4 = gameObject.transform.GetChild(l).GetComponent <GroupComponentProxy>(); if (component3 == list[k] || (component4 != null && component4._groupComponent == list[k])) { flag2 = true; break; } } if (!flag2) { Fabric.Component component5 = list[k]; GroupComponent groupComponent2 = component5 as GroupComponent; list.Remove(component5); if (component != null) { component.UpdateComponentsArray(); } if (component5.ParentComponent != null) { component5.ParentComponent.Initialise(component, isComponentInstance: false); } if (groupComponent2 != null) { groupComponent2.RegisterWithMainHierarchy(); } Instance.RefreshComponents(); } } }