} // AddComponent #endregion #region Remove Component /// <summary> /// Removes a component to the game object. /// </summary> /// <remarks> /// A component is not really destroyed, is recycled, it returns to the component pool. /// </remarks> /// <typeparam name="TComponentType">Component Type</typeparam> public override void RemoveComponent <TComponentType>() { #region Transform if (typeof(TComponentType) == typeof(Transform2D)) { throw new ArgumentException("Game Object 2D: Unable to remove the 2D transform component. The transform component can’t be replaced or removed."); } if (typeof(TComponentType) == typeof(Transform3D)) { throw new ArgumentException("Game Object 2D: Unable to remove the 3D transform component. A 2D Game Object does not work in 3D."); } #endregion #region HUD Text if (typeof(TComponentType) == typeof(HudText)) { if (hudTextAccessor == null) { throw new InvalidOperationException("Game Object 2D: Unable to remove the HUD text component. There is not one."); } HudText.Uninitialize(); Components.Remove(HudText); HudText.ComponentPool2D.Release(hudTextAccessor); HudText = null; hudTextAccessor = null; } #endregion #region HUD Texture if (typeof(TComponentType) == typeof(HudTexture)) { if (hudTextureAccessor == null) { throw new InvalidOperationException("Game Object 2D: Unable to remove the HUD texture component. There is not one."); } HudTexture.Uninitialize(); Components.Remove(HudTexture); HudTexture.ComponentPool2D.Release(hudTextureAccessor); HudTexture = null; hudTextureAccessor = null; } #endregion #region Video Renderer if (typeof(TComponentType) == typeof(VideoRenderer)) { if (videoRendererAccessor == null) { throw new InvalidOperationException("Game Object 2D: Unable to remove the video renderer component. There is not one."); } VideoRenderer.Uninitialize(); Components.Remove(VideoRenderer); VideoRenderer.ComponentPool.Release(videoRendererAccessor); VideoRenderer = null; videoRendererAccessor = null; } #endregion #region Line Renderer if (typeof(TComponentType) == typeof(LineRenderer)) { if (lineRendererAccessor == null) { throw new InvalidOperationException("Game Object 2D: Unable to remove the line renderer component. There is not one."); } LineRenderer.Uninitialize(); Components.Remove(LineRenderer); LineRenderer.ComponentPool2D.Release(lineRendererAccessor); LineRenderer = null; lineRendererAccessor = null; } #endregion #region Script if (typeof(Script).IsAssignableFrom(typeof(TComponentType))) { Component script = XNAFinalEngine.Components.Script.ContainScript <TComponentType>(this); if (script == null) { throw new ArgumentException("Game Object 2D: Unable to remove the script component. There is not one."); } script.Uninitialize(); Components.Remove(script); scripts.Remove((Script)script); } #endregion } // RemoveComponent