コード例 #1
0
        public void SpawnParticle(Point3D position, double speed, double size, double duration, Particle particle)
        {
            if (_particleList.Count > _maxParticleCount)
            {
                return;
            }
            particle.Position = position;
            particle.StartDuration = duration;
            particle.Duration = duration;
            particle.StartSize = size;
            particle.Size = size;

            // #FELO: -1 to 1 for x and -1 to 1 for y coordinate creates 360 degree spread.
            float x = DirectionX - (float)_random.NextDouble() * DirectionDistortionX;
            float z = DirectionY - (float)_random.NextDouble() * DirectionDistortionY;

            var vector3D = new Vector3D( x, z, 0.0 );
            vector3D.Normalize();
            vector3D *= ( InitialSpeedConst + (float)_random.NextDouble() ) * (float)speed;

            particle.Velocity = new Vector3D( vector3D.X, vector3D.Y, vector3D.Z);

            particle.Decay = DecayAmount;

            _particleList.Add(particle);
        }