/// <summary> /// Deregisters the current scene and layer from this object. /// </summary> internal void ResetSceneAndLayer() { m_scene.EnsureNotNull(nameof(m_scene)); m_sceneLayer.EnsureNotNull(nameof(m_sceneLayer)); // Remember old scene Scene oldScene = m_scene; // Clear message subscriptions if (m_sceneMessageSubscriptions != null) { foreach (MessageSubscription actSubscription in m_sceneMessageSubscriptions) { actSubscription.Unsubscribe(); } m_sceneMessageSubscriptions = null; } // Clear references m_scene = null; m_sceneLayer = null; // Call virtual event this.OnRemovedFromScene(oldScene); }
/// <summary> /// Clears the given layer. /// </summary> /// <param name="layer">The layer to be cleared.</param> internal void ClearLayer(SceneLayer layer) { layer.EnsureNotNull(nameof(layer)); if (layer == null) { throw new ArgumentNullException("layer"); } if (layer.Scene != this) { throw new ArgumentException("Given layer does not belong to this scene!", "layer"); } layer.ClearObjects(); }
/// <summary> /// Sets the order id of the given layer. /// </summary> /// <param name="layer">The layer to modify.</param> /// <param name="newOrderID">the new order id.</param> internal void SetLayerOrderID(SceneLayer layer, int newOrderID) { layer.EnsureNotNull(nameof(layer)); if (!m_sceneLayers.Contains(layer)) { throw new ArgumentException("This scene does not contain the given layer!"); } // Change the order id layer.OrderID = newOrderID; // Sort local layer list this.SortLayers(); }
/// <summary> /// Registers the given scene and layer on this object. /// </summary> /// <param name="scene">The scene.</param> /// <param name="sceneLayer">The scene layer.</param> internal void SetSceneAndLayer(Scene scene, SceneLayer sceneLayer) { scene.EnsureNotNull(nameof(scene)); sceneLayer.EnsureNotNull(nameof(sceneLayer)); m_scene.EnsureNull(nameof(m_scene)); m_sceneLayer.EnsureNull(nameof(m_sceneLayer)); m_scene = scene; m_sceneLayer = sceneLayer; // Register message handlers if (m_scene.Messenger != null) { m_sceneMessageSubscriptions = m_scene.Messenger.SubscribeAll(this); } // Call virtual event this.OnAddedToScene(m_scene); }
/// <summary> /// Removes the given layer from the scene. /// </summary> /// <param name="layer">Layer to remove.</param> internal void RemoveLayer(SceneLayer layer) { layer.EnsureNotNull(nameof(layer)); if (layer == null) { throw new ArgumentNullException("layer"); } if (layer.Scene != this) { throw new ArgumentException("Given layer does not belong to this scene!", "layer"); } if (layer.Name == DEFAULT_LAYER_NAME) { throw new ArgumentNullException("Unable to remove the default layer!", "layer"); } layer.UnloadResources(); m_sceneLayers.Remove(layer); // Sort local layer list SortLayers(); }