コード例 #1
0
        public void RefreshContext()
        {
            Profiler.BeginSample("VFXContextUI.RefreshContext");
            var blockControllers     = controller.blockControllers;
            int blockControllerCount = blockControllers.Count();

            bool somethingChanged = m_BlockContainer.childCount < blockControllerCount || (!m_CanHaveBlocks && m_NoBlock.parent != null);

            int cptBlock = 0;

            for (int i = 0; i < m_BlockContainer.childCount; ++i)
            {
                var child = m_BlockContainer.ElementAt(i) as VFXBlockUI;
                if (child != null)
                {
                    if (!somethingChanged && blockControllerCount > cptBlock && child.controller != blockControllers[cptBlock])
                    {
                        somethingChanged = true;
                    }
                    cptBlock++;
                }
            }
            if (somethingChanged || cptBlock != blockControllerCount)
            {
                foreach (var controller in blocks.Keys.Except(blockControllers).ToArray())
                {
                    GetFirstAncestorOfType <VFXView>().RemoveNodeEdges(blocks[controller]);
                    m_BlockContainer.Remove(blocks[controller]);
                    blocks.Remove(controller);
                }
                if (blockControllers.Count() > 0 || !m_CanHaveBlocks)
                {
                    m_NoBlock.RemoveFromHierarchy();
                }
                else if (m_NoBlock.parent == null)
                {
                    m_BlockContainer.Add(m_NoBlock);
                }
                if (blockControllers.Count > 0)
                {
                    VFXBlockUI prevBlock = null;
                    foreach (var blockController in blockControllers)
                    {
                        VFXBlockUI blockUI;
                        if (blocks.TryGetValue(blockController, out blockUI))
                        {
                            if (prevBlock != null)
                            {
                                blockUI.PlaceInFront(prevBlock);
                            }
                            else
                            {
                                blockUI.SendToBack();
                            }
                        }
                        else
                        {
                            blockUI = InstantiateBlock(blockController);
                            m_BlockContainer.Add(blockUI);
                            m_BlockContainer.Insert(prevBlock == null ? 0: m_BlockContainer.IndexOf(prevBlock) + 1, blockUI);
                        }
                        prevBlock = blockUI;
                    }
                    VFXBlockUI firstBlock = m_BlockContainer.Query <VFXBlockUI>();
                    firstBlock.AddToClassList("first");
                }
            }
            Profiler.EndSample();
        }
コード例 #2
0
        public void RefreshContext()
        {
            Profiler.BeginSample("VFXContextUI.RefreshContext");
            var blockControllers     = controller.blockControllers;
            int blockControllerCount = blockControllers.Count();

            // recreate the children list based on the controller list to keep the order.

            var blocksUIs = new Dictionary <VFXBlockController, VFXBlockUI>();

            bool somethingChanged = m_BlockContainer.childCount < blockControllerCount || (!m_CanHaveBlocks && m_NoBlock.parent != null);

            int cptBlock = 0;

            for (int i = 0; i < m_BlockContainer.childCount; ++i)
            {
                var child = m_BlockContainer.ElementAt(i) as VFXBlockUI;
                if (child != null)
                {
                    blocksUIs.Add(child.controller, child);

                    if (!somethingChanged && blockControllerCount > cptBlock && child.controller != blockControllers[cptBlock])
                    {
                        somethingChanged = true;
                    }
                    cptBlock++;
                }
            }
            if (somethingChanged || cptBlock != blockControllerCount)
            {
                foreach (var kv in blocksUIs)
                {
                    kv.Value.RemoveFromClassList("first");
                    m_BlockContainer.Remove(kv.Value);
                }
                if (blockControllers.Count() > 0 || !m_CanHaveBlocks)
                {
                    m_NoBlock.RemoveFromHierarchy();
                }
                else if (m_NoBlock.parent == null)
                {
                    m_BlockContainer.Add(m_NoBlock);
                }
                if (blockControllers.Count > 0)
                {
                    foreach (var blockController in blockControllers)
                    {
                        VFXBlockUI blockUI;
                        if (blocksUIs.TryGetValue(blockController, out blockUI))
                        {
                            m_BlockContainer.Add(blockUI);
                        }
                        else
                        {
                            InstantiateBlock(blockController);
                        }
                    }
                    VFXBlockUI firstBlock = m_BlockContainer.Query <VFXBlockUI>();
                    firstBlock.AddToClassList("first");
                }
            }
            Profiler.EndSample();
        }