//-----------------------------------------------------------------------
    void SphereSurfaceEmitter::_initParticleDirection(Particle* particle)
    {
		if (mAutoDirection)
		{
			// The value of the direction vector that has been set does not have a meaning for
			// the sphere surface emitter.
			Radian angle;
			_generateAngle(angle);
			if (angle != Radian(0))
			{
				particle->direction = mRandomVector.randomDeviant(angle, mUpVector);
				particle->originalDirection = particle->direction;
			}
			else
			{
				particle->direction = mRandomVector;
				particle->originalDirection = particle->direction;
			}
		}
		else
		{
			// Use the standard way
			ParticleEmitter::_initParticleDirection(particle);
		}
    }
	//-----------------------------------------------------------------------
    void CircleEmitter::_initParticleDirection(Particle* particle)
    {
		if (mAutoDirection)
		{
			// The value of the direction vector that has been set does not have a meaning for
			// the circle emitter.
			Radian angle;
			_generateAngle(angle);
			if (angle != Radian(0))
			{
				particle->direction = (mOrientation * Vector3(mX, 0, mZ) ).randomDeviant(angle, mUpVector);
				particle->originalDirection = particle->direction;
			}
			else
			{
				particle->direction = Vector3(mX, 0, mZ);
				particle->direction = mOrientation * Vector3(mX, 0, mZ);
			}
		}
		else
		{
			// Use the standard way
			ParticleEmitter::_initParticleDirection(particle);
		}
    }
	//-----------------------------------------------------------------------
    void ParticleEmitter::_initParticleDirection(Particle* particle)
    {
		// Use the default way of initialising the particle direction
		Radian angle;
		_generateAngle(angle);
		if (angle != Radian(0))
		{
			particle->direction = mParticleDirection.randomDeviant(angle, mUpVector);
		}
		else
		{
			particle->direction = mParticleDirection;
		}
		particle->originalDirection = particle->direction;
		particle->originalDirectionLength = particle->direction.length();
    }
	//-----------------------------------------------------------------------
    void LineEmitter::_initParticleDirection(Particle* particle)
    {
		if (mAutoDirection)
		{
			Radian angle;
			_generateAngle(angle);
			if (angle != Radian(0))
			{
				particle->direction = mPerpendicular.randomDeviant(angle, mUpVector);
				particle->originalDirection = particle->direction;
			}
			else
			{
				particle->direction = mPerpendicular;
				particle->originalDirection = particle->direction;
			}
		}
		else
		{
			// Use the standard way
			ParticleEmitter::_initParticleDirection(particle);
		}
    }