int MovementComponent::turnTowards(float targetPosX, float targetPosY, float targetPosZ, float speed, bool putInQueue, const char* animName)
{	
	Vec3f target(targetPosX, targetPosY, targetPosZ);

	//if we don't want a queue, we must erase all existent movement nodes
	if(!putInQueue)
		clear();
	if(speed < 0)
		speed = m_speed; //use agent default

	//orient towards the target
	Orientation* o = new Orientation( m_eID, target, speed, false );
	o->setAnimation( (animName == 0) ? m_orientAnimName : animName );
	m_movementNodes.push_back( o );

	return o->getID();
}
int MovementComponent::rotate(float targetRotX, float targetRotY, float targetRotZ, float speed, bool putInQueue, const char* animName)
{	
	Vec3f target(targetRotX, targetRotY, targetRotZ);

	//if we don't want a queue, we must erase all existent movement nodes
	if(!putInQueue)
		clear();
	if(speed < 0)
		speed = m_speed; //use agent default

	//rotate until we reach the target rotation
	Orientation* o = new Orientation( m_eID, target, speed, true );
	o->setAnimation( (animName == 0) ? m_orientAnimName : animName );
	m_movementNodes.push_back( o );

	return o->getID();
}
int MovementComponent::goTo(float targetX, float targetY, float targetZ, float speed, bool putInQueue, const char* orientAnimName, const char* walkAnimName)
{	
	Vec3f target(targetX, targetY, targetZ);

	//if we don't want a queue, we must erase all existent movement nodes
	if(!putInQueue)
		clear();
	if(speed < 0)
		speed = m_speed; //use agent default

	//orient towards the target
	Orientation* o = new Orientation( m_eID, target, speed );
	o->setAnimation( (orientAnimName == 0) ? m_orientAnimName : orientAnimName );
	m_movementNodes.push_back( o );
	//move to the target position
	Locomotion* l =  new Locomotion( m_eID, target, speed );
	l->setAnimation( (walkAnimName == 0) ? m_walkAnimName : walkAnimName );
	m_movementNodes.push_back( l );

	return l->getID();
}