summaryrefslogtreecommitdiff
path: root/Plugins/MonoGame.Extended/source/MonoGame.Extended.Particles/Modifiers/VortexModifier.cs
blob: 03a9999e8cacb7551d02928c04274df6c350ebe4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using Microsoft.Xna.Framework;

namespace MonoGame.Extended.Particles.Modifiers
{
    public unsafe class VortexModifier : Modifier
    {
        // Note: not the real-life one
        private const float _gravConst = 100000f;

        public Vector2 Position { get; set; }
        public float Mass { get; set; }
        public float MaxSpeed { get; set; }

        public override void Update(float elapsedSeconds, ParticleBuffer.ParticleIterator iterator)
        {
            while (iterator.HasNext)
            {
                var particle = iterator.Next();
                var diff = Position + particle->TriggerPos - particle->Position;

                var distance2 = diff.LengthSquared();

                var speedGain = _gravConst*Mass/distance2*elapsedSeconds;
                // normalize distances and multiply by speedGain
                diff.Normalize();
                particle->Velocity += diff*speedGain;
            }
        }
    }
}