Example #1
0
        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 });
                }
            }
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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");
        }
Example #5
0
        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());
        }