Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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();
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
        /// <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);
        }
Esempio n. 5
0
        /// <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();
        }