123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- //
- // ParticleSystemGradients.h
- // cocos2d_libs
- //
- // Created by 徐俊杰 on 2020/4/24.
- //
- #ifndef ParticleSystemGradients_h
- #define ParticleSystemGradients_h
- #include "rparticle/Macros/RParticleMacros.h"
- #include "rparticle/Math/Gradient.h"
- NS_RRP_BEGIN
- enum MinMaxGradientEvalMode
- {
- kGEMGradient,
- kGEMGradientMinMax,
- kGEMSlow,
- };
- enum MinMaxGradientState
- {
- kMMGColor = 0,
- kMMGGradient = 1,
- kMMGRandomBetweenTwoColors = 2,
- kMMGRandomBetweenTwoGradients = 3
- };
- struct OptimizedMinMaxGradient
- {
- OptimizedGradient max;
- OptimizedGradient min;
- };
- inline ColorRGBA32 EvaluateGradient (const OptimizedMinMaxGradient& g, float t)
- {
- return g.max.Evaluate(t);
- }
- inline ColorRGBA32 EvaluateRandomGradient (const OptimizedMinMaxGradient& g, float t, UInt32 factor)
- {
- return Lerp (g.min.Evaluate(t), g.max.Evaluate(t), factor);
- }
- struct MinMaxGradient
- {
- GradientNEW maxGradient;
- GradientNEW minGradient;
- ColorRGBA32 minColor; // we have the colors separate to prevent destroying the gradients
- ColorRGBA32 maxColor;
- short minMaxState; // see enum State
-
- MinMaxGradient();
-
- //TODO: Serialize
- // DEFINE_GET_TYPESTRING (MinMaxGradient)
-
- void InitializeOptimized(OptimizedMinMaxGradient& g);
-
- template<class TransferFunction>
- void Transfer (TransferFunction& transfer);
- };
- inline ColorRGBA32 EvaluateColor (const MinMaxGradient& gradient)
- {
- return gradient.maxColor;
- }
- inline ColorRGBA32 EvaluateGradient (const MinMaxGradient& gradient, float t)
- {
- return gradient.maxGradient.Evaluate(t);
- }
- inline ColorRGBA32 EvaluateRandomColor (const MinMaxGradient& gradient, UInt32 factor)
- {
- return Lerp (gradient.minColor, gradient.maxColor, factor);
- }
- inline ColorRGBA32 EvaluateRandomGradient (const MinMaxGradient& gradient, float t, UInt32 factor)
- {
- return Lerp (gradient.minGradient.Evaluate(t), gradient.maxGradient.Evaluate(t), factor);
- }
- inline ColorRGBA32 Evaluate (const MinMaxGradient& gradient, float t, UInt32 factor = 0xff)
- {
- if (gradient.minMaxState == kMMGColor)
- return EvaluateColor(gradient);
- else if (gradient.minMaxState == kMMGGradient)
- return EvaluateGradient(gradient, t);
- else if (gradient.minMaxState == kMMGRandomBetweenTwoColors)
- return EvaluateRandomColor(gradient, factor);
- else // gradient.minMaxState == kMMGRandomBetweenTwoGradients
- return EvaluateRandomGradient(gradient, t, factor);
- }
- NS_RRP_END
- #endif /* ParticleSystemGradients_h */
|