1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- using System;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using UnityEngine;
- using UnityEngine.VFX;
- namespace UnityEditor.VFX
- {
- class VFXExpressionCombine : VFXExpressionNumericOperation
- {
- public VFXExpressionCombine() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- { }
- public VFXExpressionCombine(params VFXExpression[] parents)
- : base(parents)
- {
- if (parents.Length <= 1 || parents.Length > 4 || parents.Any(o => !IsFloatValueType(o.valueType)))
- {
- throw new ArgumentException("Incorrect VFXExpressionCombine");
- }
- switch (parents.Length)
- {
- case 2:
- m_Operation = VFXExpressionOperation.Combine2f;
- break;
- case 3:
- m_Operation = VFXExpressionOperation.Combine3f;
- break;
- case 4:
- m_Operation = VFXExpressionOperation.Combine4f;
- break;
- }
- }
- sealed protected override VFXExpression Evaluate(VFXExpression[] reducedParents)
- {
- var constParentFloat = reducedParents.Cast<VFXValue<float>>().Select(o => o.Get()).ToArray();
- if (constParentFloat.Length != parents.Length)
- {
- throw new ArgumentException("Incorrect VFXExpressionCombine.ExecuteConstantOperation");
- }
- switch (parents.Length)
- {
- case 2: return VFXValue.Constant(new Vector2(constParentFloat[0], constParentFloat[1]));
- case 3: return VFXValue.Constant(new Vector3(constParentFloat[0], constParentFloat[1], constParentFloat[2]));
- case 4: return VFXValue.Constant(new Vector4(constParentFloat[0], constParentFloat[1], constParentFloat[2], constParentFloat[3]));
- }
- return null;
- }
- sealed public override string GetCodeString(string[] parents)
- {
- return string.Format("{0}({1})", TypeToCode(valueType), parents.Aggregate((a, b) => string.Format("{0}, {1}", a, b)));
- }
- }
- }
|