Changeset 8724 in orxonox.OLD for trunk/src/world_entities
- Timestamp:
- Jun 22, 2006, 3:14:58 PM (19 years ago)
- Location:
- trunk/src/world_entities
- Files:
-
- 14 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/world_entities/WorldEntities.am
r8490 r8724 4 4 world_entities/npcs/npc_test.cc \ 5 5 world_entities/npcs/ground_turret.cc \ 6 world_entities/npcs/generic_npc.cc \ 6 7 \ 7 8 world_entities/environment.cc \ … … 41 42 world_entities/space_ships/collision_probe.cc \ 42 43 world_entities/creatures/md2_creature.cc \ 44 world_entities/creatures/fps_player.cc \ 43 45 world_entities/spectator.cc \ 44 46 \ … … 97 99 space_ships/collision_probe.cc \ 98 100 creatures/md2_creature.h \ 101 creatures/fps_player.h \ 99 102 spectator.h \ 100 103 \ -
trunk/src/world_entities/creatures/md2_creature.cc
r8490 r8724 63 63 64 64 this->loadParams(doc.RootElement()); 65 this->toList(OM_GROUP_01);66 65 } 67 66 … … 77 76 if (root != NULL) 78 77 this->loadParams(root); 78 } 79 80 81 /** 82 * initializes a MD2Creature 83 */ 84 void MD2Creature::init() 85 { 86 PRINTF(4)("MD2CREATURE INIT\n"); 87 // this->setRelDir(Quaternion(M_PI, Vector(1,0,0))); 88 this->setClassID(CL_MD2_CREATURE, "MD2Creature"); 89 90 this->toList(OM_GROUP_01); 79 91 80 92 //weapons: … … 87 99 cannon->setName("BFG"); 88 100 89 this->getWeaponManager().addWeapon(wpLeft, 1, 0); 90 this->getWeaponManager().addWeapon(wpRight,1 ,1); 91 // this->getWeaponManager().addWeapon(cannon, 0, 6); 92 93 //this->getWeaponManager().addWeapon(turret, 3, 0); 94 101 this->addWeapon(wpLeft, 1, 0); 102 this->addWeapon(wpRight,1 ,1); 95 103 this->getWeaponManager().changeWeaponConfig(0); 96 } 97 98 99 /** 100 * initializes a MD2Creature 101 */ 102 void MD2Creature::init() 103 { 104 // this->setRelDir(Quaternion(M_PI, Vector(1,0,0))); 105 this->setClassID(CL_MD2_CREATURE, "MD2Creature"); 106 107 PRINTF(4)("MD2CREATURE INIT\n"); 108 104 105 106 // pnode camera issue 107 this->cameraConnNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 108 this->cameraConnNode.addNodeFlags(PNODE_PROHIBIT_CHILD_DELETE); 109 this->cameraConnNode.setName("CameraConnectorNode"); 110 this->addChild(&this->cameraConnNode); 111 this->cameraConnNode.addChild(State::getCameraTargetNode()); 112 this->cameraConnNode.addChild(State::getCameraNode()); 113 State::getCameraTargetNode()->setRelCoor(10,0,0); 114 115 116 117 // control initialisation 109 118 this->mouseDirX *= Quaternion( M_PI * 0.75f, Vector(0,1,0)); 110 119 … … 116 125 cycle = 0.0; 117 126 118 this->cameraConnNode.addNodeFlags(PNODE_PROHIBIT_DELETE_WITH_PARENT); 119 this->cameraConnNode.setName("CameraConnectorNode"); 120 this->addChild(&this->cameraConnNode); 121 this->cameraConnNode.addChild(State::getCameraTargetNode()); 122 this->cameraConnNode.addChild(State::getCameraNode()); 123 State::getCameraTargetNode()->setRelCoor(10,0,0); 124 125 travelSpeed = 15.0; 127 travelSpeed =300.0; 126 128 this->velocity = Vector(0.0,0.0,0.0); 127 129 128 // GLGuiButton* button = new GLGuiPushButton();129 // button->show();130 // button->setLabel("orxonox");131 // button->setBindNode(this);132 130 133 131 //add events to the eventlist 134 this->registerEvent(SDLK_w); 135 this->registerEvent(SDLK_s); 136 this->registerEvent(SDLK_a); 137 this->registerEvent(SDLK_d); 132 //add events to the eventlist 133 registerEvent(KeyMapper::PEV_FORWARD); 134 registerEvent(KeyMapper::PEV_BACKWARD); 135 registerEvent(KeyMapper::PEV_LEFT); 136 registerEvent(KeyMapper::PEV_RIGHT); 137 registerEvent(KeyMapper::PEV_UP); 138 registerEvent(KeyMapper::PEV_DOWN); 139 registerEvent(KeyMapper::PEV_FIRE1); 140 registerEvent(KeyMapper::PEV_NEXT_WEAPON); 141 registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON); 142 registerEvent(EV_MOUSE_MOTION); 138 143 this->registerEvent(SDLK_SPACE); 139 this->registerEvent(SDLK_q);140 this->registerEvent(SDLK_e);141 this->registerEvent(KeyMapper::PEV_FIRE1);142 this->registerEvent(KeyMapper::PEV_NEXT_WEAPON);143 this->registerEvent(KeyMapper::PEV_PREVIOUS_WEAPON);144 this->registerEvent(EV_MOUSE_MOTION);145 144 146 145 … … 165 164 this->getWeaponManager().setSlotPosition(5, Vector(-1.5, -.5, -.5)); 166 165 this->getWeaponManager().setSlotDirection(5, Quaternion(+M_PI_4*.5-M_PI, Vector(1,0,0))); 167 //168 169 170 171 172 166 // 167 this->getWeaponManager().setSlotPosition(6, Vector(-1, 0.0, 0)); 168 this->getWeaponManager().setSlotCapability(6, WTYPE_ALLDIRS | WTYPE_DIRECTIONAL); 169 // 170 171 this->cameraConnNode.addChild(this->getWeaponManager().getFixedTarget()); 173 172 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false); 174 173 175 this->getWeaponManager().getFixedTarget()->setRelCoor(10,0,0); 176 177 } 178 179 180 void MD2Creature::enter() 181 { 182 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true); 183 this->attachCamera(); 184 185 } 186 187 void MD2Creature::leave() 188 { 189 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false); 190 191 192 } 174 this->getWeaponManager().getFixedTarget()->setRelCoor(0,0,0); 175 176 } 177 193 178 194 179 /** … … 202 187 203 188 189 void MD2Creature::enter() 190 { 191 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( true); 192 193 State::getCameraNode()->setParent(&this->cameraConnNode); 194 State::getCameraNode()->setRelCoor(0, 0,0); 195 State::getCameraTargetNode()->setParentSoft(&this->cameraConnNode); 196 197 } 198 199 void MD2Creature::leave() 200 { 201 dynamic_cast<Element2D*>(this->getWeaponManager().getFixedTarget())->setVisibility( false); 202 this->detachCamera(); 203 } 204 205 204 206 /** 205 207 * effect that occurs after the MD2Creature is spawned 206 208 */ 207 209 void MD2Creature::postSpawn () 208 { 209 //setCollision(new CollisionCluster(1.0, Vector(0,0,0))); 210 } 210 {} 211 211 212 212 /** … … 234 234 if (this->getCurrentPlayer() != NULL) 235 235 WorldEntity::draw(); 236 // this->cameraConnNode.debugDraw(0); 236 237 this->cameraConnNode.debugDraw(0); 237 238 } 238 239 … … 254 255 this->shiftCoor (move); 255 256 257 258 // handle animations differently 256 259 if( this->bJump && likely(this->getModel(0) != NULL)) 257 260 { … … 260 263 else if( this->bFire && likely(this->getModel(0) != NULL)) 261 264 { 262 if( ((MD2Model*)this->getModel(0))->getAnim() != ATTACK) ((MD2Model*)this->getModel(0))->setAnimation(ATTACK); 265 if( ((MD2Model*)this->getModel(0))->getAnimation() != ATTACK) 266 ((MD2Model*)this->getModel(0))->setAnimation(ATTACK); 263 267 } 264 268 else if( fabs(move.len()) > 0.0f && likely(this->getModel(0) != NULL)) 265 269 { 266 if( ((MD2Model*)this->getModel(0))->getAnim() != RUN) ((MD2Model*)this->getModel(0))->setAnimation(RUN); 270 if( ((MD2Model*)this->getModel(0))->getAnimation() != RUN) 271 ((MD2Model*)this->getModel(0))->setAnimation(RUN); 267 272 } 268 273 else if (likely(this->getModel(0) != NULL)) 269 274 { 270 if( ((MD2Model*)this->getModel(0))->getAnim() != STAND) ((MD2Model*)this->getModel(0))->setAnimation(STAND); 275 if( ((MD2Model*)this->getModel(0))->getAnimation() != STAND) 276 ((MD2Model*)this->getModel(0))->setAnimation(STAND); 271 277 } 272 278 273 279 274 280 //orient the MD2Creature in direction of the mouse 275 this->setAbsDir(mouseDirX); 281 // this->setAbsDir(mouseDirX); 282 // this->cameraConnNode.setRelDir(mouseDirY); 283 276 284 this->cameraConnNode.setRelDir(mouseDirY); 285 this->setAbsDir(this->mouseDirX); 277 286 } 278 287 … … 286 295 Vector accel(0.0, 0.0, 0.0); 287 296 /* 288 Vector rot(0.0, 0.0, 0.0); // wird ben ötigt für Helicopter297 Vector rot(0.0, 0.0, 0.0); // wird ben�igt fr Helicopter 289 298 */ 290 299 //float rotVal = 0.0; … … 292 301 /* calculate the direction in which the craft is heading */ 293 302 303 if( bMouseMotion) 304 { 305 this->mouseDirX *= Quaternion(-M_PI / 4.0f * this->xMouse*mouseSensitivity, Vector(0,1,0)); 306 this->mouseDirY *= Quaternion(-M_PI / 4.0f * this->yMouse*mouseSensitivity, Vector(0,0,1)); 307 this->bMouseMotion = false; 308 } 309 294 310 if( this->bUp ) 295 296 297 311 { 312 accel += (this->getAbsDirX())*2; 313 } 298 314 299 315 if( this->bDown ) 300 301 302 316 { 317 accel -= (this->getAbsDirX())*2; 318 } 303 319 304 320 if( this->bLeft/* > -this->getRelCoor().z*2*/) … … 329 345 } 330 346 331 velocity = accel * 20.0f;347 velocity = accel * 40.0f; 332 348 //rot.normalize(); 333 349 //this->setRelDirSoft(Quaternion(rotVal, rot), 5); … … 335 351 336 352 337 338 353 /** 339 354 * @todo switch statement ?? … … 342 357 { 343 358 Playable::process(event); 344 if( event.type == SDLK_a)345 346 else if( event.type == SDLK_d)347 348 else if( event.type == SDLK_w)349 this->bUp = event.bPressed; //this->shiftCoor(0,.1,0);350 else if( event.type == SDLK_s)351 this->bDown = event.bPressed; //this->shiftCoor(0,-.1,0);359 if( event.type == KeyMapper::PEV_LEFT) 360 this->bStrafeL = event.bPressed; 361 else if( event.type == KeyMapper::PEV_RIGHT) 362 this->bStrafeR = event.bPressed; 363 else if( event.type == KeyMapper::PEV_FORWARD) 364 this->bUp = event.bPressed; 365 else if( event.type == KeyMapper::PEV_BACKWARD) 366 this->bDown = event.bPressed; 352 367 else if( event.type == SDLK_SPACE) 353 368 this->bJump = event.bPressed; 354 369 else if( event.type == EV_MOUSE_MOTION) 355 370 { 371 this->bMouseMotion = true; 356 372 this->xMouse = event.xRel; 357 373 this->yMouse = event.yRel; 358 this->mouseDirX *= Quaternion(-M_PI/4*this->xMouse*mouseSensitivity, Vector(0,1,0)); 359 this->mouseDirY *= Quaternion(-M_PI/4*this->yMouse*mouseSensitivity, Vector(0,0,1)); 360 // if( xMouse*xMouse < 0.9) 361 // this->setAbsDir(mouseDir); 362 } 363 } 374 } 375 } -
trunk/src/world_entities/creatures/md2_creature.h
r7346 r8724 57 57 bool bStrafeR; //!< strafe to the rith side 58 58 bool bJump; //!< jump 59 bool bMouseMotion; //!< mouse motion evet 59 60 60 61 PNode cameraConnNode; //!< The Node the camera is connected to. -
trunk/src/world_entities/npcs/ground_turret.cc
r7954 r8724 39 39 */ 40 40 GroundTurret::GroundTurret(const TiXmlElement* root) 41 : NPC(root) 41 42 { 42 43 this->init(); -
trunk/src/world_entities/npcs/npc.cc
r7076 r8724 19 19 20 20 #include "npc.h" 21 #include "obb_tree.h"22 21 23 #include "state.h"24 #include "stdlibincl.h"25 #include "power_ups/turret_power_up.h"26 #include "power_ups/laser_power_up.h"27 22 28 23 using namespace std; 29 24 30 25 31 NPC::NPC( )26 NPC::NPC(const TiXmlElement* root) 32 27 { 33 28 this->setClassID(CL_NPC, "NPC"); 29 34 30 this->toList(OM_GROUP_00); 35 31 } … … 39 35 40 36 41 void NPC::collidesWith(WorldEntity* entity, const Vector& location)42 {43 37 44 if (entity == collider) 45 return; 46 collider = entity; 47 48 if (entity->isA(CL_PROJECTILE)) 49 { 50 this->decreaseHealth(entity->getHealth() *(float)rand()/(float)RAND_MAX); 51 // EXTREME HACK 52 if (this->getHealth() <= 0.0f) 53 { 54 this->destroy(); 55 } 56 } 38 /** 39 * adds an AI to this NPC 40 */ 41 void NPC::addAI(AI* ai) 42 {} 57 43 58 44 59 // // PRINTF(3)("collision %s vs %s @ (%f,%f,%f)\n", this->getName(), entity->getName(), location.x, location.y, location.z); 60 // // this->applyForce(Vector(0,0,0)-location*1000); 61 // if ((float)rand()/RAND_MAX < .3) 62 // { 63 // WorldEntity* powerUp = new TurretPowerUp(); 64 // powerUp->setAbsCoor(this->getAbsCoor()); 65 // // powerUp->toList(OM_COMMON); 66 // } 67 // else if ((float)rand()/RAND_MAX < .3) 68 // { 69 // WorldEntity* powerUp = new LaserPowerUp(); 70 // powerUp->setAbsCoor(this->getAbsCoor()); 71 // powerUp->toList(OM_COMMON); 72 // } 73 // this->toList(OM_DEAD); 74 // this->removeNode(); 75 // 76 // this->collider = entity; 77 // } 78 // // else if (entity->isA(CL_PLAYER)) 79 // // this->applyForce(Vector(0,0,0)-location*100); 80 // else if (entity->isA(CL_NPC)) 81 // { 82 // this->setVisibiliy(false); 83 // this->toList(OM_DEAD); 84 // this->removeNode(); 85 // } 45 46 /** 47 * loads the xml tags 48 * @param root: root xml tag for this element 49 */ 50 void NPC::loadParams(const TiXmlElement* root) 51 { 52 WorldEntity::loadParams(root); 86 53 } 54 -
trunk/src/world_entities/npcs/npc.h
r6981 r8724 4 4 5 5 #include "world_entity.h" 6 #include "physics_interface.h"7 6 8 7 class AI; … … 11 10 12 11 public: 13 NPC ();12 NPC (const TiXmlElement* root); 14 13 virtual ~NPC (); 15 14 15 virtual void loadParams(const TiXmlElement* root = NULL); 16 16 17 17 void addAI(AI* ai); 18 19 virtual void collidesWith (WorldEntity* entity, const Vector& location);20 18 21 19 22 20 private: 23 21 24 WorldEntity* collider;25 26 22 }; 27 23 -
trunk/src/world_entities/npcs/npc_test.cc
r6222 r8724 31 31 32 32 NPC2::NPC2() 33 : NPC(NULL) 33 34 { 34 35 this->setClassID(CL_NPC_TEST2, "NPC2"); -
trunk/src/world_entities/npcs/npc_test1.cc
r6222 r8724 29 29 30 30 NPCTest1::NPCTest1() 31 : NPC(NULL) 31 32 { 32 33 this->setClassID(CL_NPC_TEST1, "NPCTest1"); -
trunk/src/world_entities/playable.cc
r8490 r8724 65 65 66 66 this->bDead = false; 67 67 68 68 this->subscribeReaction(CREngine::CR_PHYSICS_GROUND_WALK, CL_BSP_ENTITY); 69 69 … … 376 376 if (this->getHealth() <= 0.0f) 377 377 { 378 this->die();378 // this->destory(); 379 379 380 380 if( State::getGameRules() != NULL) … … 411 411 412 412 413 void Playable::die() 413 414 void Playable::destroy() 414 415 { 415 416 Explosion::explode(dynamic_cast<PNode*>(this), Vector(1.0f, 1.0f, 1.0f)); -
trunk/src/world_entities/playable.h
r8055 r8724 76 76 77 77 // WorldEntity Extensions 78 virtual void d ie();78 virtual void destroy(); 79 79 virtual void respawn(); 80 80 virtual void collidesWith(WorldEntity* entity, const Vector& location); -
trunk/src/world_entities/space_ships/collision_probe.cc
r8490 r8724 67 67 this->loadModel("models/dr_freak.md2"); 68 68 69 this->localVelocity = Vector(0, -4,0);69 this->localVelocity = Vector(0,0,0); 70 70 } 71 71 -
trunk/src/world_entities/test_entity.h
r7113 r8724 15 15 class TestEntity : public WorldEntity, public PhysicsInterface 16 16 { 17 friend class World;18 19 17 public: 20 18 TestEntity (); -
trunk/src/world_entities/world_entity.cc
r8490 r8724 24 24 #include "md3/md3_model.h" 25 25 26 #include "aabb_tree_node.h" 27 26 28 #include "util/loading/resource_manager.h" 27 29 #include "util/loading/load_param.h" … … 60 62 61 63 this->obbTree = NULL; 64 this->aabbNode = NULL; 62 65 this->healthWidget = NULL; 63 66 this->healthMax = 1.0f; … … 201 204 this->buildObbTree(obbTreeDepth); 202 205 } 203 else if(fileName.find(".md3") != std::string::npos)206 else /*if(fileName.find(".md3") != std::string::npos)*/ 204 207 { 205 208 PRINTF(4)("fetching MD3 file: %s\n", fileName.c_str()); … … 240 243 241 244 this->models[modelNumber] = model; 242 243 244 // if (this->model != NULL)245 // this->buildObbTree(4);246 245 } 247 246 … … 257 256 258 257 if (this->models[0] != NULL) 259 {260 258 this->obbTree = new OBBTree(depth, models[0]->getModelInfo(), this); 261 return true;262 }263 259 else 264 260 { … … 267 263 return false; 268 264 } 265 266 267 // create the axis aligned bounding box 268 if( this->aabbNode != NULL) 269 { 270 delete this->aabbNode; 271 this->aabbNode = NULL; 272 } 273 274 if( this->models[0] != NULL) { 275 this->aabbNode = new AABBTreeNode(); 276 this->aabbNode->spawnBVTree(this->models[0]); 277 } 278 return true; 269 279 } 270 280 … … 604 614 this->models[0]->draw(); 605 615 } 616 617 if( this->aabbNode != NULL) 618 this->aabbNode->drawBV(0, DRAW_BV_POLYGON, Vector(1, 0.6, 0.2), true); 619 606 620 glPopMatrix(); 607 621 } … … 712 726 this->healthWidget->hide(); 713 727 } 728 729 730 /** 731 * hit the world entity with 732 * @param damage damage to be dealt 733 */ 734 void WorldEntity::hit(float damage) 735 { 736 this->decreaseHealth(damage); 737 738 if( this->getHealth() > 0) 739 { 740 // any small explosion animaitions 741 } 742 else 743 { 744 this->destroy(); 745 746 // if( State::getGameRules() != NULL) 747 // State::getGameRules()->registerKill(Kill(NULL, this)); 748 } 749 } 750 714 751 715 752 /** -
trunk/src/world_entities/world_entity.h
r8490 r8724 16 16 #include <vector> 17 17 18 #include "aabb_tree_node.h" 19 18 20 #include "physics_interface.h" 19 21 … … 26 28 class BVTree; 27 29 class BoundingVolume; 30 class AABBTreeNode; 28 31 class Model; 29 32 class CollisionHandle; … … 58 61 virtual void postSpawn (); 59 62 virtual void leaveWorld (); 60 virtual void destroy() {};61 63 62 64 virtual void tick (float time); … … 73 75 inline BVTree* getOBBTree() const { return this->obbTree; }; 74 76 void drawBVTree(int depth, int drawMode) const; 77 inline AABB* getModelAABB() { return (this->aabbNode)?this->aabbNode->getAABB():NULL;} 75 78 76 79 /* --- Collision Reaction Block --- */ … … 90 93 91 94 CollisionHandle* getCollisionHandle(CREngine::CRType type) const { return this->collisionHandles[type]; } 95 96 virtual void hit(float damage); 97 virtual void destroy() {}; 92 98 93 99 … … 109 115 /** @returns a Reference to the Iterator */ 110 116 ObjectManager::EntityList::iterator& getEntityIterator() { return this->objectListIterator; } 111 112 /* --- Network Block --- */113 int writeState(const byte* data, int length, int sender);114 int readState(byte* data, int maxLength );115 117 116 118 /* --- Character Attribute Block --- */ … … 167 169 std::string modelLODName; //!< the name of the model lod file 168 170 BVTree* obbTree; //!< this is the obb tree reference needed for collision detection 171 AABBTreeNode* aabbNode; //!< the tree node of the first level of a axis aligned bounding boxes tree: model dimension 169 172 170 173 bool bCollide; //!< If it should be considered for the collisiontest.
Note: See TracChangeset
for help on using the changeset viewer.