123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894 |
- using System;
- using System.Linq;
- using System.Runtime.CompilerServices;
- using UnityEngine;
- using UnityEngine.VFX;
- namespace UnityEditor.VFX
- {
- class VFXExpressionCos : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionCos() : this(VFXValue<float>.Default) { }
- public VFXExpressionCos(VFXExpression parent) : base(parent, VFXExpressionOperation.Cos)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("cos({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Cos(input);
- }
- }
- class VFXExpressionSin : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionSin() : this(VFXValue<float>.Default) { }
- public VFXExpressionSin(VFXExpression parent) : base(parent, VFXExpressionOperation.Sin)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("sin({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Sin(input);
- }
- }
- class VFXExpressionTan : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionTan() : this(VFXValue<float>.Default) { }
- public VFXExpressionTan(VFXExpression parent) : base(parent, VFXExpressionOperation.Tan)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("tan({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Tan(input);
- }
- }
- class VFXExpressionACos : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionACos() : this(VFXValue<float>.Default) { }
- public VFXExpressionACos(VFXExpression parent) : base(parent, VFXExpressionOperation.ACos)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("acos({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Acos(input);
- }
- }
- class VFXExpressionASin : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionASin() : this(VFXValue<float>.Default) { }
- public VFXExpressionASin(VFXExpression parent) : base(parent, VFXExpressionOperation.ASin)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("asin({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Asin(input);
- }
- }
- class VFXExpressionATan : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionATan() : this(VFXValue<float>.Default) { }
- public VFXExpressionATan(VFXExpression parent) : base(parent, VFXExpressionOperation.ATan)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("atan({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Atan(input);
- }
- }
- class VFXExpressionLog2 : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionLog2() : this(VFXValue<float>.Default) { }
- public VFXExpressionLog2(VFXExpression parent) : base(parent, VFXExpressionOperation.Log2)
- {
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("log2({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Log(input, 2.0f);
- }
- }
- class VFXExpressionAbs : VFXExpressionUnaryNumericOperation
- {
- public VFXExpressionAbs() : this(VFXValue<float>.Default) { }
- public VFXExpressionAbs(VFXExpression parent) : base(parent, VFXExpressionOperation.Abs)
- {
- if (parent.valueType == VFXValueType.Uint32)
- throw new NotImplementedException("Unexpected type for VFXExpressionAbs");
- }
- sealed protected override string GetUnaryOperationCode(string x, VFXValueType type)
- {
- if (type == VFXValueType.Uint32)
- throw new NotImplementedException("Unexpected type for VFXExpressionAbs");
- return string.Format("abs({0})", x);
- }
- protected override uint ProcessUnaryOperation(uint input)
- {
- throw new NotImplementedException();
- }
- protected override int ProcessUnaryOperation(int input)
- {
- return Mathf.Abs(input);
- }
- protected override bool ProcessUnaryOperation(bool input)
- {
- throw new NotImplementedException();
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Abs(input);
- }
- }
- class VFXExpressionSign : VFXExpressionUnaryNumericOperation
- {
- public VFXExpressionSign() : this(VFXValue<float>.Default) { }
- public VFXExpressionSign(VFXExpression parent) : base(parent, VFXExpressionOperation.Sign)
- {
- if (parent.valueType == VFXValueType.Uint32)
- throw new NotImplementedException("Unexpected type for VFXExpressionSign");
- }
- sealed protected override string GetUnaryOperationCode(string x, VFXValueType type)
- {
- if (type == VFXValueType.Uint32)
- throw new NotImplementedException("Unexpected type for VFXExpressionSign");
- return string.Format("sign({0})", x);
- }
- protected override uint ProcessUnaryOperation(uint input)
- {
- throw new NotImplementedException();
- }
- protected override int ProcessUnaryOperation(int input)
- {
- return (input > 0 ? 1 : 0) - (input < 0 ? 1 : 0);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return (input > 0.0f ? 1.0f : 0.0f) - (input < 0.0f ? 1.0f : 0.0f);
- }
- protected override bool ProcessUnaryOperation(bool input)
- {
- throw new NotImplementedException();
- }
- }
- class VFXExpressionSaturate : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionSaturate() : this(VFXValue<float>.Default) { }
- public VFXExpressionSaturate(VFXExpression parent) : base(parent, VFXExpressionOperation.Saturate)
- {
- if (!IsFloatValueType(parent.valueType))
- throw new InvalidOperationException("Unexpected VFXExpressionSaturate type with parent " + parent.valueType);
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("saturate({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Clamp01(input);
- }
- }
- class VFXExpressionCeil : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionCeil() : this(VFXValue<float>.Default) { }
- public VFXExpressionCeil(VFXExpression parent) : base(parent, VFXExpressionOperation.Ceil)
- {
- if (!IsFloatValueType(parent.valueType))
- throw new InvalidOperationException("Unexpected VFXExpressionCeil type with parent " + parent.valueType);
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("ceil({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Ceil(input);
- }
- }
- class VFXExpressionRound : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionRound() : this(VFXValue<float>.Default) { }
- public VFXExpressionRound(VFXExpression parent) : base(parent, VFXExpressionOperation.Round)
- {
- if (!IsFloatValueType(parent.valueType))
- throw new InvalidOperationException("Unexpected VFXExpressionRound type with parent " + parent.valueType);
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("round({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Round(input);
- }
- }
- class VFXExpressionFrac : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionFrac() : this(VFXValue<float>.Default) { }
- public VFXExpressionFrac(VFXExpression parent) : base(parent, VFXExpressionOperation.Frac)
- {
- if (!IsFloatValueType(parent.valueType))
- throw new InvalidOperationException("Unexpected VFXExpressionFrac type with parent " + parent.valueType);
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("frac({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Repeat(input, 1.0f);
- }
- }
- class VFXExpressionFloor : VFXExpressionUnaryFloatOperation
- {
- public VFXExpressionFloor() : this(VFXValue<float>.Default) { }
- public VFXExpressionFloor(VFXExpression parent) : base(parent, VFXExpressionOperation.Floor)
- {
- if (!IsFloatValueType(parent.valueType))
- throw new InvalidOperationException("Unexpected VFXExpressionFloor type with parent " + parent.valueType);
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("floor({0})", x);
- }
- sealed protected override float ProcessUnaryOperation(float input)
- {
- return Mathf.Floor(input);
- }
- }
- class VFXExpressionAdd : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionAdd() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionAdd(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Add)
- {
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- var zero = VFXOperatorUtility.ZeroExpression[reducedParents[0].valueType];
- if (zero.Equals(reducedParents[0]))
- return reducedParents[1];
- if (zero.Equals(reducedParents[1]))
- return reducedParents[0];
- return base.Reduce(reducedParents);
- }
- sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- return string.Format("{0} + {1}", left, right);
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return left + right;
- }
- sealed protected override int ProcessBinaryOperation(int left, int right)
- {
- return left + right;
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left + right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- throw new NotImplementedException();
- }
- }
- class VFXExpressionMul : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionMul() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionMul(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Mul)
- {
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- var zero = VFXOperatorUtility.ZeroExpression[reducedParents[0].valueType];
- if (zero.Equals(reducedParents[0]) || zero.Equals(reducedParents[1]))
- return zero;
- var one = VFXOperatorUtility.OneExpression[reducedParents[0].valueType];
- if (one.Equals(reducedParents[0]))
- return reducedParents[1];
- if (one.Equals(reducedParents[1]))
- return reducedParents[0];
- return base.Reduce(reducedParents);
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return left * right;
- }
- sealed protected override int ProcessBinaryOperation(int left, int right)
- {
- return left * right;
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left * right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- throw new NotImplementedException();
- }
- sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- return string.Format("{0} * {1}", left, right);
- }
- }
- class VFXExpressionDivide : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionDivide() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionDivide(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Divide)
- {
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- var zero = VFXOperatorUtility.ZeroExpression[reducedParents[0].valueType];
- if (zero.Equals(reducedParents[0]))
- return zero;
- var one = VFXOperatorUtility.OneExpression[reducedParents[0].valueType];
- if (one.Equals(reducedParents[1]))
- return reducedParents[0];
- return base.Reduce(reducedParents);
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return left / right;
- }
- sealed protected override int ProcessBinaryOperation(int left, int right)
- {
- if (right == 0)
- return 0;
- return left / right;
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- if (right == 0u)
- return 0u;
- return left / right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- throw new NotImplementedException();
- }
- sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- return string.Format("{0} / {1}", left, right);
- }
- }
- class VFXExpressionSubtract : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionSubtract() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionSubtract(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Subtract)
- {
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- var zero = VFXOperatorUtility.ZeroExpression[reducedParents[0].valueType];
- if (zero.Equals(reducedParents[1]))
- return reducedParents[0];
- return base.Reduce(reducedParents);
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return left - right;
- }
- sealed protected override int ProcessBinaryOperation(int left, int right)
- {
- return left - right;
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left - right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- throw new NotImplementedException();
- }
- sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- return string.Format("{0} - {1}", left, right);
- }
- }
- class VFXExpressionMin : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionMin() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionMin(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Min)
- {
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return Mathf.Min(left, right);
- }
- protected override int ProcessBinaryOperation(int left, int right)
- {
- return Mathf.Min(left, right);
- }
- protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left < right ? left : right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- return left ? right : left;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- if (type == VFXValueType.Uint32)
- return string.Format("{0} < {1} ? {0} : {1}", left, right);
- return string.Format("min({0}, {1})", left, right);
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- VFXExpression inputSaturateExpression = null;
- if (VFXExpressionMax.CanBeReducedToSaturate(this, reducedParents, out inputSaturateExpression))
- {
- return new VFXExpressionSaturate(inputSaturateExpression);
- }
- return base.Reduce(reducedParents);
- }
- }
- class VFXExpressionMax : VFXExpressionBinaryNumericOperation
- {
- public VFXExpressionMax() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionMax(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Max)
- {
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return Mathf.Max(left, right);
- }
- protected override int ProcessBinaryOperation(int left, int right)
- {
- return Mathf.Max(left, right);
- }
- protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left > right ? left : right;
- }
- protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- return left ? left : right;
- }
- protected override string GetBinaryOperationCode(string left, string right, VFXValueType type)
- {
- if (type == VFXValueType.Uint32)
- return string.Format("{0} > {1} ? {0} : {1}", left, right);
- return string.Format("max({0}, {1})", left, right);
- }
- static public bool CanBeReducedToSaturate(VFXExpression current, VFXExpression[] reducedParents, out VFXExpression inputValueRef)
- {
- inputValueRef = null;
- var valueType = current.valueType;
- if (reducedParents.Length != 2 || !VFXExpression.IsFloatValueType(valueType))
- return false;
- var one = VFXOperatorUtility.OneExpression[valueType];
- var zero = VFXOperatorUtility.ZeroExpression[valueType];
- Type searchInnerFunctionType = null;
- VFXExpression searchInnerValueFirstLevel = null;
- VFXExpression searchInnerValueSecondLevel = null;
- if (current is VFXExpressionMax)
- {
- searchInnerFunctionType = typeof(VFXExpressionMin);
- searchInnerValueFirstLevel = zero;
- searchInnerValueSecondLevel = one;
- }
- else if (current is VFXExpressionMin)
- {
- searchInnerFunctionType = typeof(VFXExpressionMax);
- searchInnerValueFirstLevel = one;
- searchInnerValueSecondLevel = zero;
- }
- else
- {
- return false;
- }
- var minReferenceExpected = reducedParents.FirstOrDefault(o => o.GetType() == searchInnerFunctionType);
- var firstValueExpected = reducedParents.FirstOrDefault(o => o == searchInnerValueFirstLevel);
- if (minReferenceExpected != null && firstValueExpected != null)
- {
- var indexOf = Array.IndexOf(minReferenceExpected.parents, searchInnerValueSecondLevel);
- if (indexOf != -1)
- {
- var otherIndexOf = (indexOf + 1) % 2;
- inputValueRef = minReferenceExpected.parents[otherIndexOf];
- return true;
- }
- }
- return false;
- }
- protected override VFXExpression Reduce(VFXExpression[] reducedParents)
- {
- VFXExpression inputSaturateExpression = null;
- if (CanBeReducedToSaturate(this, reducedParents, out inputSaturateExpression))
- {
- return new VFXExpressionSaturate(inputSaturateExpression);
- }
- return base.Reduce(reducedParents);
- }
- }
- class VFXExpressionPow : VFXExpressionBinaryFloatOperation
- {
- public VFXExpressionPow() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionPow(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.Pow)
- {
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return Mathf.Pow(left, right);
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("pow({0}, {1})", left, right);
- }
- }
- class VFXExpressionATan2 : VFXExpressionBinaryFloatOperation
- {
- public VFXExpressionATan2() : this(VFXValue<float>.Default, VFXValue<float>.Default)
- {
- }
- public VFXExpressionATan2(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.ATan2)
- {
- }
- sealed protected override float ProcessBinaryOperation(float left, float right)
- {
- return Mathf.Atan2(left, right);
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("atan2({0}, {1})", left, right);
- }
- }
- class VFXExpressionBitwiseLeftShift : VFXExpressionBinaryUIntOperation
- {
- public VFXExpressionBitwiseLeftShift()
- : this(VFXValue<uint>.Default, VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseLeftShift(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.BitwiseLeftShift)
- {
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left << (int)right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} << {1}", left, right);
- }
- }
- class VFXExpressionBitwiseRightShift : VFXExpressionBinaryUIntOperation
- {
- public VFXExpressionBitwiseRightShift() : this(VFXValue<uint>.Default, VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseRightShift(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.BitwiseRightShift)
- {
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left >> (int)right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} >> {1}", left, right);
- }
- }
- class VFXExpressionBitwiseOr : VFXExpressionBinaryUIntOperation
- {
- public VFXExpressionBitwiseOr() : this(VFXValue<uint>.Default, VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseOr(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.BitwiseOr)
- {
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left | right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} | {1}", left, right);
- }
- }
- class VFXExpressionBitwiseAnd : VFXExpressionBinaryUIntOperation
- {
- public VFXExpressionBitwiseAnd() : this(VFXValue<uint>.Default, VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseAnd(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.BitwiseAnd)
- {
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left & right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} & {1}", left, right);
- }
- }
- class VFXExpressionBitwiseXor : VFXExpressionBinaryUIntOperation
- {
- public VFXExpressionBitwiseXor() : this(VFXValue<uint>.Default, VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseXor(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.BitwiseXor)
- {
- }
- sealed protected override uint ProcessBinaryOperation(uint left, uint right)
- {
- return left ^ right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} ^ {1}", left, right);
- }
- }
- class VFXExpressionBitwiseComplement : VFXExpressionUnaryUIntOperation
- {
- public VFXExpressionBitwiseComplement() : this(VFXValue<uint>.Default)
- {
- }
- public VFXExpressionBitwiseComplement(VFXExpression parent) : base(parent, VFXExpressionOperation.BitwiseComplement)
- {
- }
- sealed protected override uint ProcessUnaryOperation(uint input)
- {
- return ~input;
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("~{0}", x);
- }
- }
- class VFXExpressionLogicalAnd : VFXExpressionBinaryBoolOperation
- {
- public VFXExpressionLogicalAnd() : this(VFXValue<bool>.Default, VFXValue<bool>.Default)
- {
- }
- public VFXExpressionLogicalAnd(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.LogicalAnd)
- {
- }
- sealed protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- return left && right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} && {1}", left, right);
- }
- }
- class VFXExpressionLogicalOr : VFXExpressionBinaryBoolOperation
- {
- public VFXExpressionLogicalOr() : this(VFXValue<bool>.Default, VFXValue<bool>.Default)
- {
- }
- public VFXExpressionLogicalOr(VFXExpression parentLeft, VFXExpression parentRight) : base(parentLeft, parentRight, VFXExpressionOperation.LogicalOr)
- {
- }
- sealed protected override bool ProcessBinaryOperation(bool left, bool right)
- {
- return left || right;
- }
- sealed protected override string GetBinaryOperationCode(string left, string right)
- {
- return string.Format("{0} || {1}", left, right);
- }
- }
- class VFXExpressionLogicalNot : VFXExpressionUnaryBoolOperation
- {
- public VFXExpressionLogicalNot() : this(VFXValue<bool>.Default)
- {
- }
- public VFXExpressionLogicalNot(VFXExpression parent) : base(parent, VFXExpressionOperation.LogicalNot)
- {
- }
- sealed protected override bool ProcessUnaryOperation(bool input)
- {
- return !input;
- }
- sealed protected override string GetUnaryOperationCode(string x)
- {
- return string.Format("!{0}", x);
- }
- }
- }
|