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(); }
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(); }