Changeset 8894 in orxonox.OLD for trunk/src/world_entities/npcs
- Timestamp:
- Jun 29, 2006, 12:19:48 AM (18 years ago)
- Location:
- trunk/src/world_entities/npcs
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/world_entities/npcs/generic_npc.cc
r8805 r8894 38 38 CREATE_FACTORY(GenericNPC, CL_GENERIC_NPC); 39 39 40 #include "script_class.h" 41 CREATE_SCRIPTABLE_CLASS(GenericNPC, CL_GENERIC_NPC, 42 // Move 43 addMethod("walkTo", ExecutorLua3ret<GenericNPC,float,float,float,float>(&GenericNPC::walkTo)) 44 ->addMethod("setTime", ExecutorLua1<GenericNPC,float>(&GenericNPC::setTime)) 45 ->addMethod("turnTo", ExecutorLua4ret<GenericNPC,bool,float,float,float,float>(&GenericNPC::turnTo)) 46 // Display 47 ->addMethod("hide", ExecutorLua0<WorldEntity>(&WorldEntity::hide)) 48 ->addMethod("unhide", ExecutorLua0<WorldEntity>(&WorldEntity::unhide)) 49 // Coordinates 50 ->addMethod("getAbsCoorX", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorX)) 51 ->addMethod("getAbsCoorY", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorY)) 52 ->addMethod("getAbsCoorZ", ExecutorLua0ret<PNode, float>(&PNode::getAbsCoorZ)) 53 ->addMethod("setAbsCoor", ExecutorLua3<PNode,float,float,float>(&PNode::setAbsCoor)) 54 ->addMethod("setAbsDir", ExecutorLua4<PNode,float,float,float,float>(&PNode::setAbsDir)) 55 56 ); 57 40 58 41 59 … … 52 70 } 53 71 72 73 GenericNPC::GenericNPC() 74 : NPC(NULL) 75 { 76 77 } 54 78 55 79 /** … … 75 99 this->soundBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load("sound/rain.wav", WAV); 76 100 101 time = 30.0f; 77 102 // collision reaction registration 78 103 // this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY); … … 136 161 137 162 // check if this is the current goal 138 if( this->destCoor != destCoor &&this->destDir != destDir)163 if( this->destCoor != destCoor || this->destDir != destDir) 139 164 { 140 this->destCoor = Vector(x, y, 0.0f);141 this->destDir = Quaternion(Vector(qx, qy, qz), qu);142 143 float time = 5.0f;165 this->destCoor = destCoor; 166 this->destDir = destDir; 167 168 //float time = 100.0f; 144 169 145 170 if( this->currentAnim != NULL) … … 147 172 148 173 this->currentAnim = new Animation3D(this); 149 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), 0.0f); 150 this->currentAnim->addKeyFrame(this->destCoor, this->destDir, time); 174 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), 0.0f, ANIM_LINEAR, ANIM_LINEAR); 175 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR); 176 this->currentAnim->addKeyFrame(this->destCoor, this->destDir, time, ANIM_LINEAR, ANIM_LINEAR); 177 178 this->currentAnim->setInfinity(ANIM_INF_CONSTANT); 179 this->currentAnim->play(); 180 181 this->setAnimation(RUN, MD2_ANIM_LOOP); 151 182 } 152 183 … … 157 188 158 189 190 /** 191 * walk to a specific place with direction 192 * 193 * @param x: x coordinate to go to 194 * @param y: y coordinate to go to 195 * @param z: z coordinate to go to 196 * 197 * without turning itself 198 */ 199 float GenericNPC::walkTo(float x, float y, float z) 200 { 201 Quaternion q = this->getAbsDir(); 202 203 //printf("%s moving to %f, %f, %f \n",this->getName(),x,y,z); 204 205 return this->walkTo(x, y, z, q.w, q.v.x, q.v.y, q.v.z); 206 } 159 207 160 208 /** … … 188 236 189 237 238 239 /** 240 * run to a specific place with direction 241 * 242 * @param x: x coordinate to go to 243 * @param y: y coordinate to go to 244 * @param z: z coordinate to go to 245 * @param qu: angle to rotate 246 * @param qx: x coordinate of rotation vector 247 * @param qy: y coordinate of rotation vector 248 * @param qz: z coordinate of rotation vector 249 * 250 */ 251 float GenericNPC::runTo(float x, float y, float z, float qu, float qx, float qy, float qz) 252 { 253 Vector destCoor = Vector(x, y, z); 254 Quaternion destDir = Quaternion(Vector(qx, qy, qz), qu); 255 256 // check if this is the current goal 257 if( this->destCoor != destCoor || this->destDir != destDir) 258 { 259 this->destCoor = destCoor; 260 this->destDir = destDir; 261 262 float time = 5.0f; 263 264 if( this->currentAnim != NULL) 265 delete this->currentAnim; 266 267 this->currentAnim = new Animation3D(this); 268 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR); 269 this->currentAnim->addKeyFrame(this->destCoor, this->destDir, time, ANIM_LINEAR, ANIM_LINEAR); 270 271 272 this->currentAnim->setInfinity(ANIM_INF_CONSTANT); 273 this->currentAnim->play(); 274 275 this->setAnimation(RUN, MD2_ANIM_LOOP); 276 } 277 278 // calculate the distance 279 Vector distance = this->getAbsCoor() - this->destCoor; 280 return distance.len(); 281 } 282 283 284 /** 285 * run to a specific place with direction 286 * 287 * @param x: x coordinate to go to 288 * @param y: y coordinate to go to 289 * @param qu: angle to rotate 290 * @param qx: x coordinate of rotation vector 291 * @param qy: y coordinate of rotation vector 292 * @param qz: z coordinate of rotation vector 293 * 294 */ 295 float GenericNPC::runTo(float x, float y, float qu, float qx, float qy, float qz) 296 { 297 this->runTo(x, y, 0.0f, qu, qx, qy, qz); 298 } 299 300 301 /** 302 * run to a specific place with direction 303 * 304 * @param coor: vector place 305 * @param dir: direction 306 * 307 */ 308 float GenericNPC::runTo(const Vector& coordinate, const Quaternion& dir) 309 { 310 this->runTo(coordinate.x, coordinate.y, coordinate.z, dir.w, dir.v.x, dir.v.y, dir.v.z); 311 } 312 313 314 /** 315 * crouch to a specific place with direction 316 * 317 * @param x: x coordinate to go to 318 * @param y: y coordinate to go to 319 * @param z: z coordinate to go to 320 * @param qu: angle to rotate 321 * @param qx: x coordinate of rotation vector 322 * @param qy: y coordinate of rotation vector 323 * @param qz: z coordinate of rotation vector 324 * 325 */ 326 float GenericNPC::crouchTo(float x, float y, float z, float qu, float qx, float qy, float qz) 327 { 328 Vector destCoor = Vector(x, y, z); 329 Quaternion destDir = Quaternion(Vector(qx, qy, qz), qu); 330 331 // check if this is the current goal 332 if( this->destCoor != destCoor || this->destDir != destDir) 333 { 334 this->destCoor = destCoor; 335 this->destDir = destDir; 336 337 338 if( this->currentAnim != NULL) 339 delete this->currentAnim; 340 341 this->currentAnim = new Animation3D(this); 342 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR); 343 this->currentAnim->addKeyFrame(this->destCoor, this->destDir, time, ANIM_LINEAR, ANIM_LINEAR); 344 345 346 this->currentAnim->setInfinity(ANIM_INF_CONSTANT); 347 this->currentAnim->play(); 348 349 this->setAnimation(CROUCH_WALK, MD2_ANIM_LOOP); 350 } 351 352 // calculate the distance 353 Vector distance = this->getAbsCoor() - this->destCoor; 354 return distance.len(); 355 } 356 357 358 /** 359 * couch to a specific place with direction 360 * 361 * @param x: x coordinate to go to 362 * @param y: y coordinate to go to 363 * @param qu: angle to rotate 364 * @param qx: x coordinate of rotation vector 365 * @param qy: y coordinate of rotation vector 366 * @param qz: z coordinate of rotation vector 367 * 368 */ 369 float GenericNPC::crouchTo(float x, float y, float qu, float qx, float qy, float qz) 370 { 371 this->crouchTo(x, y, 0.0f, qu, qx, qy, qz); 372 } 373 374 375 376 /** 377 * crouch to a specific place with direction 378 * 379 * @param coor: vector place 380 * @param dir: direction 381 * 382 */ 383 float GenericNPC::crouchTo(const Vector& coordinate, const Quaternion& dir) 384 { 385 this->crouchTo(coordinate.x, coordinate.y, coordinate.z, dir.w, dir.v.x, dir.v.y, dir.v.z); 386 } 387 388 389 /** 390 * stops the generic animation 391 */ 392 void GenericNPC::stop() 393 { 394 if( this->currentAnim != NULL) 395 { 396 this->currentAnim->stop(); 397 delete this->currentAnim; 398 this->currentAnim = NULL; 399 400 this->setAnimation(STAND, MD2_ANIM_LOOP); 401 } 402 } 403 404 405 /** 406 * lookat a world entity 407 * @param worldEntity: the worldentity to look at 408 */ 409 float GenericNPC::lookAt(WorldEntity* worldEntity) 410 {} 411 412 413 /** 414 * turns to a given direction 415 */ 416 bool GenericNPC::turnTo(float qu, float qx, float qy, float qz) 417 { 418 Quaternion destDir = Quaternion(Vector(qx, qy, qz).getNormalized(), qu); 419 420 printf("Turning: %f, %f, %f, %f \n",qu,qx,qy,qz); 421 // check if this is the current goal 422 if( this->destDir != destDir) 423 { 424 // if( this->currentAnim != NULL) 425 // this->currentAnim->stop(); 426 // 427 PRINTF(0)("SET ANIMATION\n"); 428 this->destDir = destDir; 429 // 430 431 432 if( this->currentAnim != NULL) 433 delete this->currentAnim; 434 435 this->setAbsDir(destDir); 436 /* 437 this->currentAnim = new Animation3D(this); 438 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), 0.0f, ANIM_LINEAR, ANIM_LINEAR); 439 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->getAbsDir(), time, ANIM_LINEAR, ANIM_LINEAR); 440 this->currentAnim->addKeyFrame(this->getAbsCoor(), this->destDir, time, ANIM_LINEAR, ANIM_LINEAR); 441 442 443 this->currentAnim->setInfinity(ANIM_INF_CONSTANT); 444 this->currentAnim->play();*/ 445 446 this->setAnimation(STAND, MD2_ANIM_LOOP); 447 } 448 449 // calculate the distance 450 Vector distance = this->getAbsCoor() - this->destCoor; 451 return distance.len(); 452 } 453 454 455 456 /** 457 * talk to a world entity and play a sound/music/voice 458 * @param worldEntity: entity 459 * @param dialogNr: sound nr to be played (from the xml load tags) 460 */ 461 float GenericNPC::talkTo(WorldEntity* worldEntity, int dialogNr) 462 {} 463 464 465 /** 466 * world entity to shoot at if there is any weapon on the npc 467 * @param entity: entity to shoot entity 468 */ 469 void GenericNPC::shootAt(WorldEntity* entity) 470 {} 471 472 473 474 475 476 477 478 479 480 190 481 /** 191 482 * tick this world entity … … 196 487 if( likely(this->getModel(0) != NULL)) 197 488 ((InteractiveModel*)this->getModel(0))->tick(time); 489 198 490 } 199 491 -
trunk/src/world_entities/npcs/generic_npc.h
r8802 r8894 28 28 { 29 29 public: 30 GenericNPC(); 30 31 GenericNPC(const TiXmlElement* root); 31 32 virtual ~GenericNPC (); … … 38 39 inline void setVolume(float vol) { this->soundVolume = vol; } 39 40 40 void playAnimation(int animationIndex, int animPlaybackMode);41 41 42 void playSound(std::string filename); 43 void playSound(int i); 42 /* npc controlling functions */ 44 43 45 float lookAt(WorldEntity* worldEntity); 46 44 /* walking functions */ 47 45 float walkTo(const Vector& coordinate, const Quaternion& dir); 46 float walkTo(float x, float y, float z); 48 47 float walkTo(float x, float y, float z, float qu, float qx, float qy, float qz); 49 48 float walkTo(float x, float y, float qu, float qx, float qy, float qz); 50 49 50 /* running functions */ 51 51 float runTo(const Vector& coordinate, const Quaternion& dir); 52 52 float runTo(float x, float y, float z, float qu, float qx, float qy, float qz); 53 53 float runTo(float x, float y, float qu, float qx, float qy, float qz); 54 54 55 /* couching functinos */ 55 56 float crouchTo(const Vector& coordinate, const Quaternion& dir); 56 57 float crouchTo(float x, float y, float z, float qu, float qx, float qy, float qz); 57 58 float crouchTo(float x, float y, float qu, float qx, float qy, float qz); 58 59 60 /* stopping the movement */ 61 void stop(); 62 63 /* some oriantation functions */ 64 float lookAt(WorldEntity* worldEntity); 65 bool turnTo(float qu, float qx, float qy, float qz); 66 67 /* talking funcitons*/ 59 68 float talkTo(WorldEntity* worldEntity, int dialogNr); 69 70 /* shooting functions */ 71 void shootAt(WorldEntity* entity); 72 73 74 /* some generic control funtions */ 75 void playAnimation(int animationIndex, int animPlaybackMode); 76 void playSound(std::string filename); 77 void playSound(int i); 78 79 void setTime(float newTime){ this->time = newTime; }; 80 81 virtual void tick (float time); 60 82 61 83 62 84 void destroy(); 63 64 virtual void tick (float time);65 85 66 86 … … 74 94 75 95 Animation3D* currentAnim; 96 float time; //!< Duration of the action 76 97 }; 77 98 -
trunk/src/world_entities/npcs/npc.cc
r8724 r8894 50 50 void NPC::loadParams(const TiXmlElement* root) 51 51 { 52 WorldEntity::loadParams(root); 52 if(root != NULL) 53 WorldEntity::loadParams(root); 53 54 } 54 55
Note: See TracChangeset
for help on using the changeset viewer.