Esempio n. 1
0
        public IInterpolater[] interpolaters = { new LinearInterpolater() };         // default to using LERP for everything

        protected override sealed void effectParticle(SSParticle particle, float deltaT)
        {
            _timeSinceReset += deltaT;
            float timeElapsed = float.IsNaN(particleLifetime) ? _timeSinceReset
                : (1f - particle.life / particleLifetime);
            float lastKey = keyframes.Keys [keyframes.Count - 1];

            if (timeElapsed > lastKey)
            {
                applyValue(particle, keyframes [lastKey]);
            }
            else
            {
                float prevKey = keyframes.Keys [0];
                for (int i = 1; i < keyframes.Keys.Count; ++i)
                {
                    float key = keyframes.Keys [i];
                    if (timeElapsed < key)
                    {
                        IInterpolater interpolater =
                            i < interpolaters.Length ? interpolaters [i]
                                                                                                         : interpolaters[interpolaters.Length - 1];
                        float progression = (timeElapsed - prevKey) / (key - prevKey);
                        T     value       = computeValue(interpolater, keyframes [prevKey], keyframes [key], progression);
                        applyValue(particle, value);
                        break;
                    }
                    prevKey = key;
                }
            }
        }
Esempio n. 2
0
 protected override Color4 computeValue(IInterpolater interpolater, Color4 prevFrame, Color4 nextKeyframe, float ammount)
 {
     return(new Color4(
                interpolater.compute(prevFrame.R, nextKeyframe.R, ammount),
                interpolater.compute(prevFrame.G, nextKeyframe.G, ammount),
                interpolater.compute(prevFrame.B, nextKeyframe.B, ammount),
                interpolater.compute(prevFrame.A, nextKeyframe.A, ammount)));
 }
Esempio n. 3
0
 protected override Vector3 computeValue(IInterpolater interpolater,
                                         Vector3 prevKeyframe, Vector3 nextKeyframe, float ammount)
 {
     return(new Vector3(
                interpolater.compute(prevKeyframe.X, nextKeyframe.X, ammount),
                interpolater.compute(prevKeyframe.Y, nextKeyframe.Y, ammount),
                interpolater.compute(prevKeyframe.Z, nextKeyframe.Z, ammount)
                ));
 }
Esempio n. 4
0
 protected override float computeValue(IInterpolater interpolater,
                                       float prevKeyframe, float nextKeyframe, float ammount)
 {
     return(interpolater.compute(prevKeyframe, nextKeyframe, ammount));
 }
Esempio n. 5
0
 protected abstract T computeValue(IInterpolater interpolater,
                                   T prevFrame, T nextKeyframe, float ammount);