コード例 #1
0
        /// <inheritdoc/>
        protected override void RemoveItem(int index)
        {
            var collectionChanged = itemRemoved;

            if (collectionChanged != null)
            {
                var e = new FastTrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, this[index], null, index, true);
                collectionChanged(this, ref e);
            }
            base.RemoveItem(index);
        }
コード例 #2
0
        /// <inheritdoc/>
        protected override void InsertItem(int index, T item)
        {
            base.InsertItem(index, item);
            var collectionChanged = itemAdded;

            if (collectionChanged == null)
            {
                return;
            }
            var e = new FastTrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, null, index, true);

            collectionChanged(this, ref e);
        }
コード例 #3
0
        protected void ClearItemsEvents()
        {
            var collectionChanged = itemRemoved;

            if (collectionChanged == null)
            {
                return;
            }
            for (var i = Count - 1; i >= 0; --i)
            {
                var e = new FastTrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, this[i], null, i, true);
                collectionChanged(this, ref e);
            }
        }
コード例 #4
0
        /// <inheritdoc/>
        protected override void SetItem(int index, T item)
        {
            // Note: Changing CollectionChanged is not thread-safe
            var collectionChangedRemoved = itemRemoved;

            var oldItem = (collectionChangedRemoved != null) ? (object)this[index] : null;

            if (collectionChangedRemoved != null)
            {
                var e = new FastTrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, oldItem, null, index);
                collectionChangedRemoved(this, ref e);
            }

            base.SetItem(index, item);

            var collectionChangedAdded = itemAdded;

            if (collectionChangedAdded != null)
            {
                var e = new FastTrackingCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item, oldItem, index);
                collectionChangedAdded(this, ref e);
            }
        }
コード例 #5
0
 /// <summary>
 /// Spawners have changed.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void SpawnersChanged(object sender, ref FastTrackingCollectionChangedEventArgs e)
 {
     DirtyParticlePool = true;
 }
コード例 #6
0
        /// <summary>
        /// Notification that the modules (plugins) have changed.
        /// Pool's fields may need to be updated if new are required or old ones are no longer needed.
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">Event arguments</param>
        private void ModulesChanged(object sender, ref FastTrackingCollectionChangedEventArgs e)
        {
            var module = e.Item as ParticleModule;
            if (module == null)
                return;

            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    for (int i = 0; i < module.RequiredFields.Count; i++)
                    {
                        AddRequiredField(module.RequiredFields[i]);
                    }
                    break;

                case NotifyCollectionChangedAction.Remove:
                    for (int i = 0; i < module.RequiredFields.Count; i++)
                    {
                        RemoveRequiredField(module.RequiredFields[i]);
                    }
                    break;
            }
        }
コード例 #7
0
ファイル: VisibilityGroup.cs プロジェクト: cg123/xenko
        private void RenderStages_CollectionChanged(object sender, ref FastTrackingCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    // Make sure mask is big enough
                    RenderData.ChangeDataMultiplier(RenderStageMaskKey, stageMaskMultiplier = (RenderSystem.RenderStages.Count + RenderStageMaskSizePerEntry - 1) / RenderStageMaskSizePerEntry);
                    Array.Resize(ref viewRenderStageMask, stageMaskMultiplier);

                    // Everything will need reevaluation
                    NeedActiveRenderStageReevaluation = true;

                    break;
            }
        }
コード例 #8
0
ファイル: VisibilityGroup.cs プロジェクト: cg123/xenko
        private void RenderFeatures_CollectionChanged(object sender, ref FastTrackingCollectionChangedEventArgs e)
        {
            switch (e.Action)
            {
                case NotifyCollectionChangedAction.Add:
                    for (int index = 0; index < renderObjectsWithoutFeatures.Count; index++)
                    {
                        var renderObject = renderObjectsWithoutFeatures[index];

                        // Try to reprocess object that didn't have any stage before
                        if (renderObject.RenderFeature == null)
                        {
                            RenderSystem.AddRenderObject(renderObject);
                            if (renderObject.RenderFeature != null)
                            {
                                renderObjectsWithoutFeatures.SwapRemoveAt(index--);
                                ReevaluateActiveRenderStages(renderObject);
                            }
                        }
                    }
                    break;
                case NotifyCollectionChangedAction.Remove:
                    foreach (var renderObject in RenderObjects)
                    {
                        if (renderObject.RenderFeature == e.Item)
                        {
                            RenderSystem.RemoveRenderObject(renderObject);
                            renderObjectsWithoutFeatures.Add(renderObject);
                        }
                    }
                    break;
            }
        }