internal static void CreateSystems(VFXView view, VFXViewController viewController, int count, int offset, string name = null) { Func <int, VFXContextController> fnContextController = delegate(int i) { viewController.ApplyChanges(); var controller = viewController.allChildren.OfType <VFXContextController>().Cast <VFXContextController>().ToArray(); return(controller[i]); }; var contextInitializeDesc = VFXLibrary.GetContexts().FirstOrDefault(o => o.name.Contains("Init")); var contextOutputDesc = VFXLibrary.GetContexts().FirstOrDefault(o => o.name.StartsWith("Output Particle Quad")); for (int i = 0; i < count; ++i) { var output = viewController.AddVFXContext(new Vector2(2 * i, 2 * i), contextOutputDesc); var init = viewController.AddVFXContext(new Vector2(i, i), contextInitializeDesc); var flowEdge = new VFXFlowEdgeController(fnContextController(2 * i + offset).flowInputAnchors.FirstOrDefault(), fnContextController(2 * i + offset + 1).flowOutputAnchors.FirstOrDefault()); viewController.AddElement(flowEdge); } viewController.ApplyChanges(); if (name != null) { var systems = GetFieldValue <VFXView, List <VFXSystemBorder> >(view, "m_Systems"); foreach (var sys in systems) { SetTextFieldValue(sys, name); CallMethod(sys, "OnTitleBlur", new object[] { null }); } } }
VFXContextController CreateAllBlocks(VFXViewController viewController, VFXModelDescriptor <VFXContext> context, IEnumerable <VFXModelDescriptor <VFXBlock> > blocks) { var newContext = viewController.AddVFXContext(new Vector2(300, 2000), context); viewController.ApplyChanges(); var contextController = viewController.nodes.Where(t => t is VFXContextController && (t as VFXContextController).model == newContext).First() as VFXContextController; Assert.AreEqual(contextController.model, newContext); // Adding every block compatible with an init context var newBlocks = new List <VFXBlock>(); foreach (var block in blocks) { var newBlock = block.CreateInstance(); contextController.AddBlock(0, newBlock); newBlocks.Add(newBlock); } viewController.ApplyChanges(); //We are expecting the same list from block controllers than initial block model var intersection = contextController.blockControllers.Select(x => x.model).Intersect(newBlocks); Assert.AreEqual(newBlocks.Count, intersection.Count()); Assert.AreEqual(newBlocks.Count, contextController.blockControllers.Count()); return(contextController); }
public void CreateFlowEdgesTest() { EditTestAsset(3); var eventContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.Event).First(); var eventContext = m_ViewController.AddVFXContext(new Vector2(300, 100), eventContextDesc); var spawnerContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.Spawner).First(); var spawnerContext = m_ViewController.AddVFXContext(new Vector2(300, 100), spawnerContextDesc); var initContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.Init).First(); var initContext = m_ViewController.AddVFXContext(new Vector2(300, 100), initContextDesc); var updateContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.Update).First(); var updateContext = m_ViewController.AddVFXContext(new Vector2(300, 1000), updateContextDesc); var outputContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.Output && t.model.name.Contains("Particle")).First(); var outputContext = m_ViewController.AddVFXContext(new Vector2(300, 2000), outputContextDesc); m_ViewController.ApplyChanges(); var contextControllers = new List <VFXContextController>(); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == eventContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == spawnerContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == initContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == updateContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == outputContext) as VFXContextController); CreateFlowEdges(contextControllers); }
public void CreateFlowEdgesTest() { CreateTestAsset("GUITest4"); var eventContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.kEvent).First(); var eventContext = m_ViewController.AddVFXContext(new Vector2(300, 100), eventContextDesc); var spawnerContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.kSpawner).First(); var spawnerContext = m_ViewController.AddVFXContext(new Vector2(300, 100), spawnerContextDesc); var initContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.kInit).First(); var initContext = m_ViewController.AddVFXContext(new Vector2(300, 100), initContextDesc); var updateContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.kUpdate).First(); var updateContext = m_ViewController.AddVFXContext(new Vector2(300, 1000), updateContextDesc); var outputContextDesc = VFXLibrary.GetContexts().Where(t => t.model.contextType == VFXContextType.kOutput).First(); var outputContext = m_ViewController.AddVFXContext(new Vector2(300, 2000), outputContextDesc); m_ViewController.ApplyChanges(); var contextControllers = new List <VFXContextController>(); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == eventContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == spawnerContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == initContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == updateContext) as VFXContextController); contextControllers.Add(m_ViewController.allChildren.OfType <VFXContextController>().First(t => t.model == outputContext) as VFXContextController); CreateFlowEdges(contextControllers); DestroyTestAsset("GUITest4"); }
void CreateAllBlocksExperiment(VFXViewController viewController, VFXModelDescriptor <VFXContext> context, IEnumerable <VFXModelDescriptor <VFXBlock> > blocks, bool applyChanges) { var newContext = viewController.AddVFXContext(new Vector2(300, 2000), context); //if (applyChanges) //Needed for retrieving the following contextController viewController.ApplyChanges(); var contextController = viewController.nodes.Where(t => t is VFXContextController ctxController && ctxController.model == newContext).First() as VFXContextController; foreach (var block in blocks) { var newBlock = block.CreateInstance(); contextController.AddBlock(0, newBlock); } if (applyChanges) { viewController.ApplyChanges(); } }
public void CopyPasteContextWithBlock() { var initContextDesc = VFXLibrary.GetContexts().Where(t => t.name == "Initialize").First(); var newContext = m_ViewController.AddVFXContext(new Vector2(100, 100), initContextDesc); m_ViewController.ApplyChanges(); Assert.AreEqual(m_ViewController.allChildren.Where(t => t is VFXContextController).Count(), 1); var contextController = m_ViewController.allChildren.OfType <VFXContextController>().First(); Assert.AreEqual(contextController.model, newContext); var flipBookBlockDesc = VFXLibrary.GetBlocks().First(t => t.name == "Set Tex Index "); contextController.AddBlock(0, flipBookBlockDesc.CreateInstance()); m_ViewController.ApplyChanges(); VFXViewWindow window = EditorWindow.GetWindow <VFXViewWindow>(); VFXView view = window.graphView; view.controller = m_ViewController; view.ClearSelection(); foreach (var element in view.Query().OfType <GraphElement>().ToList().OfType <ISelectable>()) { view.AddToSelection(element); } VFXSlot boundsSlot = newContext.GetInputSlot(0); AABox originalBounds = new AABox() { center = Vector3.one, size = Vector3.one * 10 }; boundsSlot.value = originalBounds; VFXBlock flipBookBlock = m_ViewController.contexts.First().blockControllers.First().model; VFXSlot minValueSlot = flipBookBlock.GetInputSlot(0); float originalMinValue = 123.456f; minValueSlot.value = originalMinValue; view.CopySelectionCallback(); boundsSlot.value = new AABox() { center = Vector3.zero, size = Vector3.zero }; minValueSlot.value = 789f; view.PasteCallback(); var elements = view.Query().OfType <GraphElement>().ToList(); var contexts = elements.OfType <VFXContextUI>().ToArray(); var copyContext = elements.OfType <VFXContextUI>().Select(t => t.controller).First(t => t.model != newContext).model; var copyBoundsSlot = copyContext.GetInputSlot(0); var copyMinSlot = copyContext[0].GetInputSlot(0); Assert.AreEqual((AABox)copyBoundsSlot.value, originalBounds); Assert.AreEqual((float)copyMinSlot.value, originalMinValue); Assert.AreNotEqual(copyContext.position, newContext.position); view.PasteCallback(); elements = view.Query().OfType <GraphElement>().ToList(); contexts = elements.OfType <VFXContextUI>().ToArray(); var copy2Context = contexts.First(t => t.controller.model != newContext && t.controller.model != copyContext).controller.model; Assert.AreNotEqual(copy2Context.position, newContext.position); Assert.AreNotEqual(copy2Context.position, copyContext.position); }
public void UndoRedoOperatorLinkToBlock() { Func <VFXContextController> fnFirstContextController = delegate() { m_ViewController.ApplyChanges(); return(m_ViewController.allChildren.OfType <VFXContextController>().FirstOrDefault()); }; Func <Type, VFXNodeController> fnFindController = delegate(Type type) { m_ViewController.ApplyChanges(); var allController = m_ViewController.allChildren.OfType <VFXNodeController>(); return(allController.FirstOrDefault(o => type.IsInstanceOfType(o.slotContainer))); }; Func <VFXBlockController> fnFirstBlockController = delegate() { m_ViewController.ApplyChanges(); return(m_ViewController.allChildren.OfType <VFXContextController>().SelectMany(t => t.blockControllers).FirstOrDefault()); }; Func <VFXDataEdgeController> fnFirstEdgeController = delegate() { m_ViewController.ApplyChanges(); return(m_ViewController.allChildren.OfType <VFXDataEdgeController>().FirstOrDefault()); }; Undo.IncrementCurrentGroup(); var cosDesc = VFXLibrary.GetOperators().FirstOrDefault(o => o.name == "Cosine"); var contextUpdateDesc = VFXLibrary.GetContexts().FirstOrDefault(o => o.name.Contains("Update")); var blockAttributeDesc = VFXLibrary.GetBlocks().FirstOrDefault(o => o.modelType == typeof(Block.SetAttribute)); m_ViewController.AddVFXOperator(new Vector2(0, 0), cosDesc); m_ViewController.AddVFXContext(new Vector2(2, 2), contextUpdateDesc); var blockAttribute = blockAttributeDesc.CreateInstance(); blockAttribute.SetSettingValue("attribute", "color"); blockAttribute.SetSettingValue("Source", Block.SetAttribute.ValueSource.Slot); fnFirstContextController().AddBlock(0, blockAttribute); var firstBlockController = fnFirstBlockController(); var cosController = fnFindController(typeof(Operator.Cosine)); var blockInputPorts = firstBlockController.inputPorts.ToArray(); var cosOutputPorts = cosController.outputPorts.ToArray(); var edgeController = new VFXDataEdgeController(blockInputPorts[0], cosOutputPorts[0]); m_ViewController.AddElement(edgeController); Undo.IncrementCurrentGroup(); m_ViewController.RemoveElement(fnFirstEdgeController()); Assert.IsNull(fnFirstEdgeController()); Undo.IncrementCurrentGroup(); Undo.PerformUndo(); Assert.IsNotNull(fnFirstEdgeController()); Undo.PerformRedo(); Assert.IsNull(fnFirstEdgeController()); }