Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8894 in orxonox.OLD for trunk/src/world_entities/npcs


Ignore:
Timestamp:
Jun 29, 2006, 12:19:48 AM (18 years ago)
Author:
patrick
Message:

merged the branche single_player_map with the trunk

Location:
trunk/src/world_entities/npcs
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/world_entities/npcs/generic_npc.cc

    r8805 r8894  
    3838CREATE_FACTORY(GenericNPC, CL_GENERIC_NPC);
    3939
     40#include "script_class.h"
     41CREATE_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
    4058
    4159
     
    5270}
    5371
     72
     73GenericNPC::GenericNPC()
     74  : NPC(NULL)
     75{
     76
     77}
    5478
    5579/**
     
    7599  this->soundBuffer = (OrxSound::SoundBuffer*)ResourceManager::getInstance()->load("sound/rain.wav", WAV);
    76100
     101  time = 30.0f;
    77102  // collision reaction registration
    78103//   this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY);
     
    136161
    137162  // check if this is the current goal
    138   if( this->destCoor != destCoor && this->destDir != destDir)
     163  if( this->destCoor != destCoor || this->destDir != destDir)
    139164  {
    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;
    144169
    145170    if( this->currentAnim != NULL)
     
    147172
    148173    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);
    151182  }
    152183
     
    157188
    158189
     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 */
     199float 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}
    159207
    160208/**
     
    188236
    189237
     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 */
     251float 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 */
     295float 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 */
     308float 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 */
     326float 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 */
     369float 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 */
     383float 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 */
     392void 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 */
     409float GenericNPC::lookAt(WorldEntity* worldEntity)
     410{}
     411
     412
     413/**
     414 * turns to a given direction
     415 */
     416bool 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 */
     461float 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 */
     469void GenericNPC::shootAt(WorldEntity* entity)
     470{}
     471
     472
     473
     474
     475
     476
     477
     478
     479
     480
    190481/**
    191482 * tick this world entity
     
    196487  if( likely(this->getModel(0) != NULL))
    197488    ((InteractiveModel*)this->getModel(0))->tick(time);
     489
    198490}
    199491
  • trunk/src/world_entities/npcs/generic_npc.h

    r8802 r8894  
    2828{
    2929 public:
     30  GenericNPC();
    3031  GenericNPC(const TiXmlElement* root);
    3132  virtual ~GenericNPC ();
     
    3839  inline void setVolume(float vol) { this->soundVolume = vol; }
    3940
    40   void playAnimation(int animationIndex, int animPlaybackMode);
    4141
    42   void playSound(std::string filename);
    43   void playSound(int i);
     42  /* npc controlling functions */
    4443
    45   float lookAt(WorldEntity* worldEntity);
    46 
     44  /* walking functions */
    4745  float walkTo(const Vector& coordinate, const Quaternion& dir);
     46  float walkTo(float x, float y, float z);
    4847  float walkTo(float x, float y, float z, float qu, float qx, float qy, float qz);
    4948  float walkTo(float x, float y, float qu, float qx, float qy, float qz);
    5049
     50  /* running functions */
    5151  float runTo(const Vector& coordinate, const Quaternion& dir);
    5252  float runTo(float x, float y, float z, float qu, float qx, float qy, float qz);
    5353  float runTo(float x, float y, float qu, float qx, float qy, float qz);
    5454
     55  /* couching functinos */
    5556  float crouchTo(const Vector& coordinate, const Quaternion& dir);
    5657  float crouchTo(float x, float y, float z, float qu, float qx, float qy, float qz);
    5758  float crouchTo(float x, float y, float qu, float qx, float qy, float qz);
    5859
     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*/
    5968  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);
    6082
    6183
    6284  void destroy();
    63 
    64   virtual void tick (float time);
    6585
    6686
     
    7494
    7595   Animation3D*                            currentAnim;
     96   float                                   time;          //!< Duration of the action
    7697};
    7798
  • trunk/src/world_entities/npcs/npc.cc

    r8724 r8894  
    5050void NPC::loadParams(const TiXmlElement* root)
    5151{
    52   WorldEntity::loadParams(root);
     52  if(root != NULL)
     53   WorldEntity::loadParams(root);
    5354}
    5455
Note: See TracChangeset for help on using the changeset viewer.