Пример #1
0
        /// <summary>
        /// Removes an individual <see cref="Komodo.Core.ECS.Components.Component"/> from this Entity's <see cref="Components"/>.
        /// </summary>
        /// <param name="component"><see cref="Komodo.Core.ECS.Components.Component"/> to remove.</param>
        /// <returns>Whether or not the <see cref="Komodo.Core.ECS.Components.Component"/> was removed from this Entity's <see cref="Components"/>. Will return false if the <see cref="Komodo.Core.ECS.Components.Component"/> is not present in <see cref="Components"/>.</returns>
        public bool RemoveComponent([NotNull] Component component)
        {
            if (component == null)
            {
                return(false);
            }
            if (Components != null)
            {
                switch (component)
                {
                case BehaviorComponent componentToRemove:
                    if (!Game.BehaviorSystem.RemoveComponent(componentToRemove))
                    {
                        return(false);
                    }
                    break;

                case CameraComponent componentToRemove:
                    if (Render2DSystem.ActiveCamera == componentToRemove)
                    {
                        Render2DSystem.ActiveCamera = null;
                    }
                    if (Render3DSystem.ActiveCamera == componentToRemove)
                    {
                        Render3DSystem.ActiveCamera = null;
                    }
                    if (!Game.CameraSystem.RemoveComponent(componentToRemove))
                    {
                        return(false);
                    }
                    break;

                case Drawable2DComponent componentToRemove:
                    if (Render2DSystem != null)
                    {
                        if (!Render2DSystem.RemoveComponent(componentToRemove))
                        {
                            return(false);
                        }
                    }
                    break;

                case Drawable3DComponent componentToRemove:
                    if (Render3DSystem != null)
                    {
                        if (!Render3DSystem.RemoveComponent(componentToRemove))
                        {
                            return(false);
                        }
                    }
                    break;

                case PhysicsComponent componentToRemove:
                    if (PhysicsSystem != null)
                    {
                        if (!PhysicsSystem.RemoveComponent(componentToRemove))
                        {
                            return(false);
                        }
                    }
                    break;

                case SoundComponent componentToRemove:
                    if (!Game.SoundSystem.RemoveComponent(componentToRemove))
                    {
                        return(false);
                    }
                    break;

                default:
                    return(false);
                }
                component.Parent = null;
                return(Components.Remove(component));
            }
            return(false);
        }