Пример #1
0
        public bool UnregisterGroupComponent(GroupComponent groupComponent, bool ignoreFadeOut = true)
        {
            if (!_allowExternalGroupComponents)
            {
                DebugLog.Print("External GroupComponent registration is disabled");
                return(false);
            }
            bool result = true;

            if (groupComponent != null)
            {
                if (!ignoreFadeOut)
                {
                    for (int i = 0; i < _groupComponentProxies.Count; i++)
                    {
                        GroupComponentProxy groupComponentProxy = _groupComponentProxies[i];
                        if (groupComponentProxy._groupComponent == groupComponent)
                        {
                            groupComponent.Stop();
                            GameObject gameObject = new GameObject();
                            groupComponentProxy._groupComponent = gameObject.AddComponent <GroupComponent>();
                            groupComponentProxy._groupComponent.transform.parent = groupComponentProxy.transform;
                            groupComponentProxy._groupComponent.name             = groupComponent.name;
                            groupComponentProxy._groupComponent.CopyPropertiesFrom(groupComponent);
                            if (groupComponent.ParentComponent != null)
                            {
                                groupComponent.ParentComponent.RemoveComponent(groupComponent);
                                groupComponent.ParentComponent.AddComponent(groupComponentProxy._groupComponent);
                            }
                            else
                            {
                                _components.Remove(groupComponent);
                                _components.Remove(groupComponentProxy._groupComponent);
                            }
                            Component[] childComponents = groupComponent.GetChildComponents();
                            for (int j = 0; j < childComponents.Length; j++)
                            {
                                groupComponentProxy._groupComponent.AddComponent(childComponents[j]);
                                childComponents[j].transform.parent = groupComponentProxy._groupComponent.transform;
                                childComponents[j].ParentComponent  = groupComponentProxy._groupComponent;
                            }
                            _groupComponentProxies.Remove(groupComponentProxy);
                            _groupComponentProxiesToDestroy.Add(groupComponentProxy);
                            groupComponentProxy._groupComponent.SetComponentActive(groupComponent.IsComponentActive());
                            DebugLog.Print("GroupComponent [" + groupComponent.name + "] scheduled to be unregistered");
                        }
                    }
                }
                else
                {
                    if (groupComponent.ParentComponent != null)
                    {
                        groupComponent.ParentComponent.RemoveComponent(groupComponent);
                    }
                    else
                    {
                        _components.Remove(groupComponent);
                    }
                    for (int k = 0; k < _groupComponentProxies.Count; k++)
                    {
                        GroupComponentProxy groupComponentProxy2 = _groupComponentProxies[k];
                        if (groupComponentProxy2 != null && groupComponentProxy2._groupComponent == groupComponent)
                        {
                            _groupComponentProxies.Remove(groupComponentProxy2);
                            UnityEngine.Object.DestroyImmediate(groupComponentProxy2.gameObject);
                            break;
                        }
                    }
                    DebugLog.Print("GroupComponent [" + groupComponent.name + "] unregistered succesfuly");
                }
                result = false;
            }
            else
            {
                DebugLog.Print("GroupComponent [" + groupComponent.name + "] failed to unregistred", DebugLevel.Error);
            }
            return(result);
        }