public void UndoRedoAddBlockContext() { var contextUpdateDesc = VFXLibrary.GetContexts().FirstOrDefault(o => o.name.Contains("Update")); var blockDesc = new VFXModelDescriptor <VFXBlock>(ScriptableObject.CreateInstance <AllType>()); m_ViewController.AddVFXContext(Vector2.one, contextUpdateDesc); Func <VFXContextController> fnContextController = delegate() { m_ViewController.ApplyChanges(); var allContextController = m_ViewController.allChildren.OfType <VFXContextController>().ToArray(); return(allContextController.FirstOrDefault() as VFXContextController); }; Assert.IsNotNull(fnContextController()); //Creation Undo.IncrementCurrentGroup(); fnContextController().AddBlock(0, blockDesc.CreateInstance()); Assert.AreEqual(1, fnContextController().model.children.Count()); Undo.PerformUndo(); Assert.AreEqual(0, fnContextController().model.children.Count()); //Deletion var block = blockDesc.CreateInstance(); fnContextController().AddBlock(0, block); Assert.AreEqual(1, fnContextController().model.children.Count()); Undo.IncrementCurrentGroup(); fnContextController().RemoveBlock(block); Assert.AreEqual(0, fnContextController().model.children.Count()); Undo.PerformUndo(); m_ViewController.ApplyChanges(); Assert.IsNotNull(fnContextController()); Assert.AreEqual(1, fnContextController().model.children.Count()); Assert.IsInstanceOf(typeof(AllType), fnContextController().model.children.First()); }
bool ProviderFilter(VFXNodeProvider.Descriptor d) { var mySlot = controller.model; var parameterDescriptor = d.modelDescriptor as VFXParameterController; IVFXSlotContainer container = null; if (parameterDescriptor != null) { container = parameterDescriptor.model; } else { VFXModelDescriptor desc = d.modelDescriptor as VFXModelDescriptor; if (desc == null) { string path = d.modelDescriptor as string; if (path != null && !path.StartsWith(VisualEffectAssetEditorUtility.templatePath)) { if (Path.GetExtension(path) == VisualEffectSubgraphOperator.Extension) { var subGraph = AssetDatabase.LoadAssetAtPath <VisualEffectSubgraphOperator>(path); if (subGraph != null && (!controller.viewController.model.isSubgraph || !subGraph.GetResource().GetOrCreateGraph().subgraphDependencies.Contains(controller.viewController.model.subgraph) && subGraph.GetResource() != controller.viewController.model)) { return(true); } } } return(false); } container = desc.model as IVFXSlotContainer; if (container == null) { return(false); } if (direction == Direction.Output && mySlot != null && container is VFXOperatorDynamicOperand && (container as VFXOperatorDynamicOperand).validTypes.Contains(mySlot.property.type)) { return(true); } } IEnumerable <Type> validTypes = null; if (mySlot == null) { var op = controller.sourceNode.model as VFXOperatorDynamicOperand; if (op != null) { validTypes = op.validTypes; } } var getSlots = direction == Direction.Input ? container.GetOutputSlot : (System.Func <int, VFXSlot>)container.GetInputSlot; var count = direction == Direction.Input ? container.GetNbOutputSlots() : container.GetNbInputSlots(); // Template containers are not sync initially to save time during loading // For container with no input or output this can be called everytime, but should also be very fast if (count == 0) { container.ResyncSlots(false); count = direction == Direction.Input ? container.GetNbOutputSlots() : container.GetNbInputSlots(); } for (int i = 0; i < count; ++i) { var slot = getSlots(i); if (mySlot != null && slot.CanLink(mySlot)) { return(true); } else if (validTypes != null && validTypes.Contains(slot.property.type)) { return(true); } } return(false); }
bool ProviderFilter(VFXNodeProvider.Descriptor d) { var mySlot = controller.model; var parameterDescriptor = d.modelDescriptor as VFXParameterController; IVFXSlotContainer container = null; if (parameterDescriptor != null) { container = parameterDescriptor.model; } else { VFXModelDescriptor desc = d.modelDescriptor as VFXModelDescriptor; if (desc == null) { return(false); } container = desc.model as IVFXSlotContainer; if (container == null) { return(false); } if (direction == Direction.Output && mySlot != null && container is VFXOperatorDynamicOperand && (container as VFXOperatorDynamicOperand).validTypes.Contains(mySlot.property.type)) { return(true); } } IEnumerable <Type> validTypes = null; if (mySlot == null) { var op = controller.sourceNode.model as VFXOperatorDynamicOperand; if (op != null) { validTypes = op.validTypes; } } var getSlots = direction == Direction.Input ? (System.Func <int, VFXSlot>)container.GetOutputSlot : (System.Func <int, VFXSlot>)container.GetInputSlot; int count = direction == Direction.Input ? container.GetNbOutputSlots() : container.GetNbInputSlots(); for (int i = 0; i < count; ++i) { var slot = getSlots(i); if (mySlot != null && slot.CanLink(mySlot)) { return(true); } else if (validTypes != null && validTypes.Contains(slot.property.type)) { return(true); } } return(false); }
protected override string GetName(VFXModelDescriptor <VFXBlock> desc) { return(desc.name); }
protected override string GetCategory(VFXModelDescriptor <VFXBlock> desc) { return(desc.info.category); }
public void ExpandRetractAndSetPropertyValue() { EditTestAsset(7); var initContextDesc = VFXLibrary.GetContexts().Where(t => typeof(VFXBasicInitialize).IsAssignableFrom(t.modelType)).First(); var newContext = m_ViewController.AddVFXContext(new Vector2(300, 100), initContextDesc); m_ViewController.ApplyChanges(); Assert.AreEqual(m_ViewController.allChildren.Where(t => t is VFXContextController).Count(), 1); var contextController = m_ViewController.allChildren.Where(t => t is VFXContextController).First() as VFXContextController; Assert.AreEqual(contextController.model, newContext); // Adding every block compatible with an init context var blockDesc = new VFXModelDescriptor <VFXBlock>(ScriptableObject.CreateInstance <AllType>()); var newBlock = blockDesc.CreateInstance(); contextController.AddBlock(0, newBlock); Assert.IsTrue(newBlock is AllType); m_ViewController.ApplyChanges(); Assert.AreEqual(contextController.blockControllers.Where(t => t.model == newBlock).Count(), 1); var blockController = contextController.blockControllers.Where(t => t.model == newBlock).First(); Assert.NotNull(blockController); Assert.NotZero(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).name == "aVector3").Count()); VFXSlot slot = blockController.model.inputSlots.First(t => t.name == "aVector3"); var aVector3Controller = blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).name == "aVector3").First() as VFXContextDataInputAnchorController; Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.x").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.y").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.z").Count(), 1); aVector3Controller.ExpandPath(); m_ViewController.ApplyChanges(); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.x").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.y").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.z").Count(), 1); aVector3Controller.RetractPath(); m_ViewController.ApplyChanges(); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.x").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.y").Count(), 1); Assert.AreEqual(blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.z").Count(), 1); aVector3Controller.SetPropertyValue(new Vector3(1.2f, 3.4f, 5.6f)); Assert.AreEqual(slot.value, new Vector3(1.2f, 3.4f, 5.6f)); aVector3Controller.ExpandPath(); m_ViewController.ApplyChanges(); var vector3yController = blockController.inputPorts.Where(t => t is VFXContextDataInputAnchorController && (t as VFXContextDataInputAnchorController).path == "aVector3.y").First() as VFXContextDataInputAnchorController; vector3yController.SetPropertyValue(7.8f); Assert.AreEqual(slot.value, new Vector3(1.2f, 7.8f, 5.6f)); }
public NewBlockDescriptor(VFXModelDescriptor <VFXBlock> newBlock) { this.newBlock = newBlock; }
bool ProviderFilter(VFXNodeProvider.Descriptor d) { var mySlot = controller.model; IEnumerable <Type> validTypes = null; if (mySlot == null) { var op = controller.sourceNode.model as VFXOperatorNumericCascadedUnified; if (op != null) { validTypes = op.validTypes; } } var parameterDescriptor = d.modelDescriptor as VFXParameterController; IVFXSlotContainer container = null; if (parameterDescriptor != null) { container = parameterDescriptor.model; } else { VFXModelDescriptor desc = d.modelDescriptor as VFXModelDescriptor; if (desc == null) { return(false); } container = desc.model as IVFXSlotContainer; if (container == null) { return(false); } } var getSlots = direction == Direction.Input ? (System.Func <int, VFXSlot>)container.GetOutputSlot : (System.Func <int, VFXSlot>)container.GetInputSlot; int count = direction == Direction.Input ? container.GetNbOutputSlots() : container.GetNbInputSlots(); bool oneFound = false; for (int i = 0; i < count; ++i) { VFXSlot slot = getSlots(i); if (mySlot != null) { if (slot.CanLink(mySlot)) { oneFound = true; break; } } else if (validTypes != null) { if (validTypes.Contains(slot.property.type)) { oneFound = true; break; } } } return(oneFound); }