public void CreateNewParticle(Vector3 partSysPos)
        {
            var part = particles.New();

            part.ResetParticle();
            part.Alive = true;

            part.Lifetime = Lifetime.GetRandomNumInRange();
            part.Position = partSysPos + EmitRadius.GetRandomNumInRange();

            var i = 0;

            // process any initial events
            foreach (var ev in Events)
            {
                if (ev.ActualTime == 0)
                {
                    ev.DoItToIt(ref part);
                    i++;
                }
            }

            part.CurEvent = i;
            totalParticleLives++;
        }
Exemplo n.º 2
0
        protected virtual void Emit(ParticleEmitter emitter, Particle particle)
        {
            Matrix transform = Matrix.CreateRotationZ(emitter.WorldRotation);

            // Generating spawn position.
            float emitAngle  = RandomHelper.Next(0, MathHelper.TwoPi);
            float emitRadius = EmitRadius.GetValue();

            Vector2 p = EmitPosition.GetValue() + new Polar2(emitRadius, emitAngle).ToVector2();

            // Generating initial velocity.
            float initialAngle    = EmitAngle.GetValue();
            float initialVelocity = InitialVelocity.GetValue();

            Vector2 v;

            if (InitialVelocityMode == InitialVelocityMode.AwayFromCenter && p != Vector2.Zero)
            {
                v = Vector2.Normalize(p) * initialVelocity;
            }
            else
            {
                v = new Polar2(initialVelocity, initialAngle).ToVector2();
            }

            particle.Position        = emitter.WorldPosition + Vector2.Transform(p, transform);
            particle.Rotation        = emitter.WorldRotation + InitialRotation.GetValue();
            particle.Velocity        = Vector2.Transform(v, transform);
            particle.AngularVelocity = InitialAngularVelocity.GetValue();
            particle.Duration        = Duration.GetValue();
            particle.Timer           = 0;
            particle.Scale           = InitialScale.GetValue();

            if (SpriteFrames != null)
            {
                particle.Data = RandomHelper.Next(0, SpriteFrames.Length);
            }

            if (ColorMode == ParticleColorMode.Random)
            {
                particle.Color = Colors[RandomHelper.Next(0, Colors.Length)].ToVector4();
            }
            else
            {
                particle.Color = Colors[0].ToVector4();
            }
        }