List <VFXParameter> CreateAllParameters() { List <VFXParameter> parameters = new List <VFXParameter>(); int cpt = 0; foreach (var param in VFXLibrary.GetParameters()) { parameters.Add(m_ViewController.AddVFXParameter(new Vector2(-400, 150 * cpt), param)); ++cpt; } return(parameters); }
public void LinkPositionOrVectorAndDirection([ValueSource("usePosition")] bool usePosition) { var crossDesc = VFXLibrary.GetOperators().FirstOrDefault(o => o.name.Contains("Cross")); var positionDesc = VFXLibrary.GetParameters().FirstOrDefault(o => o.name.Contains("Position")); var vectorDesc = VFXLibrary.GetParameters().FirstOrDefault(o => o.name == "Vector"); var directionDesc = VFXLibrary.GetParameters().FirstOrDefault(o => o.name.Contains("Direction")); var cross = m_ViewController.AddVFXOperator(new Vector2(1, 1), crossDesc); var position = m_ViewController.AddVFXParameter(new Vector2(2, 2), positionDesc); var vector = m_ViewController.AddVFXParameter(new Vector2(3, 3), vectorDesc); var direction = m_ViewController.AddVFXParameter(new Vector2(4, 4), directionDesc); (cross as IVFXOperatorUniform).SetOperandType(typeof(Vector3)); m_ViewController.ApplyChanges(); Func <IVFXSlotContainer, VFXNodeController> fnFindController = delegate(IVFXSlotContainer slotContainer) { var allController = m_ViewController.allChildren.OfType <VFXNodeController>(); return(allController.FirstOrDefault(o => o.slotContainer == slotContainer)); }; var controllerCross = fnFindController(cross); var vA = new Vector3(2, 3, 4); position.outputSlots[0].value = new Position() { position = vA }; vector.outputSlots[0].value = new Vector() { vector = vA }; var vB = new Vector3(5, 6, 7); direction.outputSlots[0].value = new DirectionType() { direction = vB }; var edgeControllerAppend_A = new VFXDataEdgeController(controllerCross.inputPorts.Where(o => o.portType == typeof(Vector3)).First(), fnFindController(usePosition ? position : vector).outputPorts.First()); m_ViewController.AddElement(edgeControllerAppend_A); (cross as IVFXOperatorUniform).SetOperandType(typeof(Vector3)); m_ViewController.ApplyChanges(); var edgeControllerAppend_B = new VFXDataEdgeController(controllerCross.inputPorts.Where(o => o.portType == typeof(Vector3)).Last(), fnFindController(direction).outputPorts.First()); m_ViewController.AddElement(edgeControllerAppend_B); (cross as IVFXOperatorUniform).SetOperandType(typeof(Vector3)); m_ViewController.ApplyChanges(); m_ViewController.ForceReload(); Assert.AreEqual(1, cross.inputSlots[0].LinkedSlots.Count()); Assert.AreEqual(1, cross.inputSlots[1].LinkedSlots.Count()); var context = new VFXExpression.Context(VFXExpressionContextOption.CPUEvaluation | VFXExpressionContextOption.ConstantFolding); var currentA = context.Compile(cross.inputSlots[0].GetExpression()).Get <Vector3>(); var currentB = context.Compile(cross.inputSlots[1].GetExpression()).Get <Vector3>(); var result = context.Compile(cross.outputSlots[0].GetExpression()).Get <Vector3>(); Assert.AreEqual((double)vA.x, (double)currentA.x, 0.001f); Assert.AreEqual((double)vA.y, (double)currentA.y, 0.001f); Assert.AreEqual((double)vA.z, (double)currentA.z, 0.001f); Assert.AreEqual((double)vB.normalized.x, (double)currentB.x, 0.001f); Assert.AreEqual((double)vB.normalized.y, (double)currentB.y, 0.001f); Assert.AreEqual((double)vB.normalized.z, (double)currentB.z, 0.001f); var expectedResult = Vector3.Cross(vA, vB.normalized); Assert.AreEqual((double)expectedResult.x, (double)result.x, 0.001f); Assert.AreEqual((double)expectedResult.y, (double)result.y, 0.001f); Assert.AreEqual((double)expectedResult.z, (double)result.z, 0.001f); }