Changeset 9061 in orxonox.OLD for trunk/src/world_entities/npcs
- Timestamp:
- Jul 3, 2006, 6:39:10 PM (18 years ago)
- Location:
- trunk/src/world_entities/npcs
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/world_entities/npcs/generic_npc.cc
r9027 r9061 40 40 ->addMethod("turnTo", ExecutorLua1<GenericNPC,float>(&GenericNPC::turnTo)) 41 41 ->addMethod("finalGoalReached", ExecutorLua0ret<GenericNPC,bool>(&GenericNPC::finalGoalReached)) 42 ->addMethod("stop", ExecutorLua0<GenericNPC>(&GenericNPC::stop)) 43 ->addMethod("resume", ExecutorLua0<GenericNPC>(&GenericNPC::resume)) 44 ->addMethod("playAnimation", ExecutorLua2<GenericNPC,int,int>(&GenericNPC::playAnimation)) 42 45 // Display 43 46 ->addMethod("hide", ExecutorLua0<WorldEntity>(&WorldEntity::hide)) … … 49 52 ->addMethod("setAbsCoor", ExecutorLua3<PNode,float,float,float>(&PNode::setAbsCoor)) 50 53 ->addMethod("setAbsDir", ExecutorLua4<PNode,float,float,float,float>(&PNode::setAbsDir)) 51 52 54 ); 53 55 … … 88 90 time = 30.0f; 89 91 92 this->behaviourList = new std::list<GenericNPC::Anim>; 93 90 94 // collision reaction registration 91 95 // this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY); … … 170 174 * @param filename: name of the file 171 175 */ 172 void GenericNPC::playSound( std::stringfilename)176 void GenericNPC::playSound(const std::string& filename) 173 177 {} 174 178 … … 179 183 */ 180 184 void GenericNPC::stop() 181 {} 182 183 184 185 { 186 this->animationStack.push(this->behaviourList); 187 this->behaviourList = new std::list<GenericNPC::Anim>; 188 } 189 190 191 /** 192 * continue the generic animation 193 */ 194 void GenericNPC::resume() 195 { 196 //if() 197 delete this->behaviourList; 198 this->behaviourList = this->animationStack.top(); 199 this->animationStack.pop(); 200 } 201 202 203 /** 204 * each animation has to be initialized here 205 */ 185 206 void GenericNPC::initNPC() 186 207 { 187 188 this->unsubscribeReaction(); 189 190 if (!this->behaviourList.empty()) 191 { 192 GenericNPC::Anim currentAnimation = this->behaviourList.front(); 193 194 switch(this->behaviourList.front().type) 208 if (!this->behaviourList->empty()) 209 { 210 GenericNPC::Anim currentAnimation = this->behaviourList->front(); 211 212 switch(this->behaviourList->front().type) 195 213 { 196 214 case Walk: … … 213 231 214 232 Vector dir = (currentAnimation.v - this->getAbsCoor()).getNormalized(); 233 dir.y = 0.0f; 234 dir.getNormalized(); 215 235 this->setAbsDir(Quaternion(dir, Vector(0.0, 1.0, 0.0)) * Quaternion(-M_PI_2, Vector(0.0, 1.0, 0.0))); 216 236 … … 224 244 225 245 Vector dir = (currentAnimation.v - this->getAbsCoor()).getNormalized(); 246 dir.y = 0.0f; 247 dir.getNormalized(); 226 248 this->setAbsDir(Quaternion(dir, Vector(0.0, 1.0, 0.0)) * Quaternion(-M_PI_2, Vector(0.0, 1.0, 0.0))); 227 249 … … 250 272 void GenericNPC::nextStep() 251 273 { 252 if (!this->behaviourList .empty())253 this->behaviourList .pop_front();274 if (!this->behaviourList->empty()) 275 this->behaviourList->pop_front(); 254 276 else 255 277 return; 256 278 257 279 258 if (!this->behaviourList .empty())259 { 260 GenericNPC::Anim currentAnimation = this->behaviourList .front();280 if (!this->behaviourList->empty()) 281 { 282 GenericNPC::Anim currentAnimation = this->behaviourList->front(); 261 283 262 284 switch( currentAnimation.type) … … 266 288 if( this->getAnimation() != RUN) 267 289 this->setAnimation(RUN, MD2_ANIM_LOOP); 290 268 291 269 292 Vector dir = (currentAnimation.v - this->getAbsCoor()); … … 281 304 282 305 Vector dir = (currentAnimation.v - this->getAbsCoor()).getNormalized(); 306 dir.y = 0.0f; 307 dir.getNormalized(); 283 308 this->setAbsDirSoft(Quaternion(dir, Vector(0.0, 1.0, 0.0)) * Quaternion(-M_PI_2, Vector(0.0, 1.0, 0.0)), 4.0); 284 309 … … 292 317 293 318 Vector dir = (currentAnimation.v - this->getAbsCoor()).getNormalized(); 319 dir.y = 0.0f; 320 dir.getNormalized(); 294 321 this->setAbsDirSoft(Quaternion(dir, Vector(0.0, 1.0, 0.0)) * Quaternion(-M_PI_2, Vector(0.0, 1.0, 0.0)), 4.0); 295 322 … … 332 359 anim.speed = 30.0f; 333 360 334 if( this->behaviourList .empty())335 { 336 this->behaviourList .push_back(anim);361 if( this->behaviourList->empty()) 362 { 363 this->behaviourList->push_back(anim); 337 364 this->initNPC(); 338 365 } 339 366 else 340 this->behaviourList .push_back(anim);367 this->behaviourList->push_back(anim); 341 368 } 342 369 … … 356 383 anim.speed = 60.0f; 357 384 358 if( this->behaviourList .empty())359 { 360 this->behaviourList .push_back(anim);385 if( this->behaviourList->empty()) 386 { 387 this->behaviourList->push_back(anim); 361 388 this->initNPC(); 362 389 } 363 390 else 364 this->behaviourList .push_back(anim);391 this->behaviourList->push_back(anim); 365 392 } 366 393 … … 377 404 anim.type = Crouch; 378 405 379 if( this->behaviourList .empty())380 { 381 this->behaviourList .push_back(anim);406 if( this->behaviourList->empty()) 407 { 408 this->behaviourList->push_back(anim); 382 409 this->initNPC(); 383 410 } 384 411 else 385 this->behaviourList .push_back(anim);412 this->behaviourList->push_back(anim); 386 413 } 387 414 void GenericNPC::crouchTo(float x, float y, float z) … … 398 425 anim.type = TurnTo; 399 426 400 if( this->behaviourList .empty())401 { 402 this->behaviourList .push_back(anim);427 if( this->behaviourList->empty()) 428 { 429 this->behaviourList->push_back(anim); 403 430 this->initNPC(); 404 431 } 405 432 else 406 this->behaviourList .push_back(anim);433 this->behaviourList->push_back(anim); 407 434 } 408 435 … … 419 446 anim.type = LookAt; 420 447 421 if( this->behaviourList .empty())422 { 423 this->behaviourList .push_back(anim);448 if( this->behaviourList->empty()) 449 { 450 this->behaviourList->push_back(anim); 424 451 this->initNPC(); 425 452 } 426 453 else 427 this->behaviourList .push_back(anim);454 this->behaviourList->push_back(anim); 428 455 } 429 456 … … 466 493 467 494 468 if (!this->behaviourList .empty())469 { 470 GenericNPC::Anim currentAnimation = this->behaviourList .front();495 if (!this->behaviourList->empty()) 496 { 497 GenericNPC::Anim currentAnimation = this->behaviourList->front(); 471 498 472 499 switch( currentAnimation.type) … … 475 502 { 476 503 Vector dest = currentAnimation.v - this->getAbsCoor(); 504 dest.y = 0.0f; 477 505 if (dest.len() < .5) 478 506 { … … 481 509 else 482 510 { 483 dest.y = 0.0f;484 this->shiftCoor( dest.getNormalized() * currentAnimation.speed * dt);511 Vector move = dest.getNormalized() * currentAnimation.speed * dt; 512 this->shiftCoor(move); 485 513 } 486 514 } … … 528 556 529 557 // physical falling of the player 530 // if( !this->isOnGround()) 531 // { 532 // this->fallVelocity += 300.0f * dt; 533 // velocity -= Vector(0.0, 1.0, 0.0) * this->fallVelocity; 534 // // PRINTF(0)("%s is not on ground\n", this->getName()); 535 // this->shiftCoor(Vector(0, -this->fallVelocity * dt,0)); 536 // } 537 // else 538 // { 539 // this->fallVelocity = 0.0f; 540 // } 541 542 558 if( !this->isOnGround()) 559 { 560 this->fallVelocity += 300.0f * dt; 561 //velocity -= Vector(0.0, 1.0, 0.0) * this->fallVelocity; 562 // PRINTF(0)("%s is not on ground\n", this->getName()); 563 this->shiftCoor(Vector(0, -this->fallVelocity * dt,0)); 564 565 } 566 else 567 { 568 this->fallVelocity = 0.0f; 569 } 543 570 544 571 } -
trunk/src/world_entities/npcs/generic_npc.h
r9003 r9061 12 12 13 13 #include "sound_source.h" 14 15 #include <stack> 16 14 17 15 18 namespace OrxSound{ class SoundSource; } … … 35 38 36 39 37 bool finalGoalReached() { return this->behaviourList .empty(); };40 bool finalGoalReached() { return this->behaviourList->empty(); }; 38 41 39 42 /* npc controlling functions to be Queued */ … … 52 55 /* stopping the movement */ 53 56 void stop(); 57 void resume(); 54 58 void nextStep(); 55 59 … … 68 72 /* some generic control funtions */ 69 73 void playAnimation(int animationIndex, int animPlaybackMode); 70 void playSound(std::string filename); 71 void playSound(int i); 74 void playSound(const std::string& filename); 72 75 73 76 virtual void tick (float time); … … 123 126 float soundVolume; 124 127 125 std::list<GenericNPC::Anim> behaviourList; 128 std::list<GenericNPC::Anim>* behaviourList; 129 std::stack<std::list<GenericNPC::Anim>*> animationStack; 126 130 Vector destCoor; 127 131 Quaternion destDir;
Note: See TracChangeset
for help on using the changeset viewer.