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(); }