Changeset 6693 in orxonox.OLD for branches/network/src/world_entities/weapons
- Timestamp:
- Jan 25, 2006, 2:19:46 PM (19 years ago)
- Location:
- branches/network/src/world_entities/weapons
- Files:
-
- 12 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/network/src/world_entities/weapons/aim.cc
r6512 r6693 73 73 this->source = NULL; 74 74 75 this->range = 0; 76 this->angle = 0; 75 77 this->anim = new tAnimation<Aim>(this, &Aim::setSize); 76 78 this->anim->setInfinity(ANIM_INF_CONSTANT); … … 101 103 } 102 104 103 void Aim::searchTarget( float range)105 void Aim::searchTarget() 104 106 { 105 107 std::list<WorldEntity*>::iterator entity; 106 108 Vector diffVec(0.0, 0.0, 0.0); 109 diffVec = ( this->getAbsCoor() - this->source->getAbsCoor() ); 110 111 //only look for target if the aim hasn`t locked a target yet or if the actual target is out of range 112 if( this == PNode::getNullParent() || diffVec.len() > range || ( acos( (this->source->getAbsDirX()).dot(diffVec)/(diffVec.len() * (this->source->getAbsDirX()).len() ) ) > angle)) 107 113 for (entity = State::getObjectManager()->getObjectList(OM_GROUP_00).begin(); 108 114 entity != State::getObjectManager()->getObjectList(OM_GROUP_00).end(); 109 115 entity ++) 110 116 { 111 if (this->source->getAbsCoor().x < (*entity)->getAbsCoor().x && (this->source->getAbsCoor() - (*entity)->getAbsCoor()).len() < range) 117 diffVec = ( (*entity)->getAbsCoor() - this->source->getAbsCoor() ); 118 119 if ( diffVec.len() < range && acos( (this->source->getAbsDirX()).dot(diffVec)/(diffVec.len() * (this->source->getAbsDirX()).len() ) ) < angle) 112 120 { 113 121 if (this->getParent() != (*entity)) … … 119 127 } 120 128 } 121 } 122 129 //if no target found: 130 this->setParent(PNode::getNullParent()); 131 } 123 132 124 133 … … 155 164 156 165 157 if (this->source->getAbsCoor().x > this->getAbsCoor().x )158 this->searchTarget(1000);166 // if (this->source->getAbsCoor().x > this->getAbsCoor().x ) 167 this->searchTarget(); 159 168 // float z = 0.0f; 160 169 // glReadPixels ((int)this->getAbsCoor2D().x, -
branches/network/src/world_entities/weapons/aim.h
r6512 r6693 38 38 inline PNode* getTarget(PNode* target) { return this->getParent(); }; 39 39 40 void searchTarget(float range); 40 void searchTarget(); 41 42 void setRange(float range){this->range = range;}; 43 void setAngle(float angle){this->angle = angle;}; 41 44 42 45 void setSize(float size); … … 53 56 tAnimation<Aim>* anim; 54 57 58 float range; //!< 59 float angle; //!< 60 55 61 PNode* source; //!< Where this Shot has come from. 56 62 -
branches/network/src/world_entities/weapons/aiming_turret.cc
r6512 r6693 86 86 this->setStateDuration(WS_DEACTIVATING, .4); 87 87 88 this->set MaximumEnergy(10000, 50);88 this->setEnergyMax(10000); 89 89 this->increaseEnergy(100000); 90 90 … … 98 98 this->target = new Aim(this); 99 99 this->target->setVisibility(false); 100 this->target->setRange(100); 101 this->target->setAngle(M_PI); 100 102 } 101 103 … … 146 148 pj->setAbsDir(this->getAbsDir()); 147 149 pj->activate(); 148 this->target->searchTarget( 100);150 this->target->searchTarget(); 149 151 } 150 152 -
branches/network/src/world_entities/weapons/cannon.cc
r6517 r6693 81 81 this->setStateDuration(WS_DEACTIVATING, .4); 82 82 83 this->set MaximumEnergy(100, 20);83 this->setEnergyMax(100); 84 84 this->increaseEnergy(100); 85 85 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/targeting_turret.cc
r6675 r6693 81 81 this->setStateDuration(WS_DEACTIVATING, .4); 82 82 83 this->set MaximumEnergy(10000, 50);83 this->setEnergyMax(10000); 84 84 this->increaseEnergy(100000); 85 85 … … 93 93 this->target = new Aim(this); 94 94 this->target->setVisibility(false); 95 95 this->target->setRange(100); 96 this->target->setAngle(M_PI_4/2); 97 this->lockedTime = 0; 98 this->neededLockTime = 2; 99 this->lockedTarget->setParent(PNode::getNullParent()); 96 100 this->loadModel("models/guns/turret2.obj"); 97 101 … … 120 124 void TargetingTurret::tick(float dt) 121 125 { 126 if( lockedTime >= neededLockTime ) 127 { 128 lockedTarget = this->target->getParent(); 129 lockedTime = 0; 130 } 122 131 123 132 this->target->tick(dt); 133 134 if(this->target->getParent() == PNode::getNullParent()) 135 lockedTime = 0; 136 else 137 lockedTime += dt; 138 124 139 } 125 140 … … 138 153 pj->setAbsDir(this->getAbsDir()); 139 154 pj->activate(); 140 this->target->searchTarget( 100);155 this->target->searchTarget(); 141 156 } 142 157 -
branches/network/src/world_entities/weapons/targeting_turret.h
r6512 r6693 32 32 33 33 private: 34 Aim* target; 35 }; 34 Aim* target; 35 PNode* lockedTarget; 36 float lockedTime; 37 float neededLockTime; 38 }; 36 39 37 40 #endif /* _TARGETING_TURRET_H */ -
branches/network/src/world_entities/weapons/test_gun.cc
r6512 r6693 122 122 this->setStateDuration(WS_DEACTIVATING, .4); 123 123 124 this->set MaximumEnergy(1000, 100);124 this->setEnergyMax(1000); 125 125 this->increaseEnergy(1000); 126 126 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/turret.cc
r6589 r6693 86 86 this->setStateDuration(WS_DEACTIVATING, .4); 87 87 88 this->set MaximumEnergy(100, 5);88 this->setEnergyMax(100); 89 89 this->increaseEnergy(100); 90 90 //this->minCharge = 2; -
branches/network/src/world_entities/weapons/weapon.cc
r6674 r6693 95 95 this->maxCharge = 1.0; //< The maximum charge is also one unit. 96 96 97 this->energyLoaded = .0; //< How much energy is loaded in the Gun. (Weapons must be charged befor usage) 98 this->energyLoadedMax = 5.0; //< Each Weapon has a Maximum energy that can be charged onto it 99 this->energy = .0; //< The secondary Buffer (before we have to reload) 97 this->energy = 10; //< The secondary Buffer (before we have to reload) 100 98 this->energyMax = 10.0; //< How much energy can be carried 101 99 this->capability = WTYPE_ALL; //< The Weapon has all capabilities @see W_Capability. 102 100 103 101 this->energyWidget = NULL; 104 this->energyLoadedWidget = NULL;105 102 106 103 // set this object to be synchronized over network … … 291 288 } 292 289 293 294 GLGuiWidget* Weapon::getLoadedEnergyWidget()295 {296 if (this->energyLoadedWidget == NULL)297 {298 this->energyLoadedWidget = new GLGuiBar;299 //this->energyLoadedWidget->setParent2D(this->bar);300 this->energyLoadedWidget->setRelCoor2D(20,0);301 this->energyLoadedWidget->setSize2D(10,50);302 this->energyLoadedWidget->setMaximum(this->getLoadedEnergyMax());303 }304 return this->energyLoadedWidget;305 }306 307 290 void Weapon::updateWidgets() 308 291 { … … 311 294 this->energyWidget->setMaximum(this->energyMax); 312 295 this->energyWidget->setValue(this->energy); 313 }314 if (this->energyLoadedWidget != NULL)315 {316 this->energyLoadedWidget->setMaximum(this->energyLoadedMax);317 this->energyLoadedWidget->setValue(this->energyLoaded);318 296 } 319 297 } … … 395 373 switch (action) 396 374 { 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 375 case WA_SHOOT: 376 return this->fireW(); 377 break; 378 case WA_CHARGE: 379 return this->chargeW(); 380 break; 381 case WA_RELOAD: 382 return this->reloadW(); 383 break; 384 case WA_DEACTIVATE: 385 return this->deactivateW(); 386 break; 387 case WA_ACTIVATE: 388 return this->activateW(); 389 break; 412 390 } 413 391 } … … 457 435 bool Weapon::chargeW() 458 436 { 459 if ( this->currentState != WS_INACTIVE && this->energy Loaded>= this->minCharge)437 if ( this->currentState != WS_INACTIVE && this->energy >= this->minCharge) 460 438 { 461 439 // playing Sound … … 481 459 { 482 460 //if (likely(this->currentState != WS_INACTIVE)) 483 if (this->minCharge <= this->energy Loaded)461 if (this->minCharge <= this->energy) 484 462 { 485 463 // playing Sound … … 488 466 this->updateWidgets(); 489 467 // fire 490 this->energy Loaded-= this->minCharge;468 this->energy -= this->minCharge; 491 469 this->fire(); 492 470 // setting up for the next state … … 507 485 { 508 486 PRINTF(4)("Reloading Weapon %s\n", this->getName()); 509 if (unlikely(this->energy + this->energyLoaded < this->minCharge)) 487 if (this->ammoContainer.get() != NULL && 488 unlikely(this->energy + this->ammoContainer->getStoredEnergy() < this->minCharge)) 510 489 { 511 490 this->requestAction(WA_DEACTIVATE); … … 514 493 } 515 494 516 float chargeSize = this->energyLoadedMax - this->energyLoaded; //!< The energy to be charged517 495 518 496 if (this->soundBuffers[WA_RELOAD] != NULL) 519 497 this->soundSource->play(this->soundBuffers[WA_RELOAD]); 520 498 521 if (chargeSize > this->energy) 522 { 523 this->energyLoaded += this->energy; 524 this->energy = 0.0; 525 PRINT(5)("Energy depleted\n"); 526 } 527 else 528 { 529 PRINTF(5)("Loaded %f energy into the Guns Buffer\n", chargeSize); 530 this->energyLoaded += chargeSize; 531 this->energy -= chargeSize; 532 } 533 499 if (this->ammoContainer.get() != NULL) 500 this->ammoContainer->fillWeapon(this); 501 else 502 { 503 this->energy = this->energyMax; 504 } 534 505 this->updateWidgets(); 535 506 this->reload(); … … 617 588 { 618 589 PRINT(0)("Weapon-Debug %s, state: %s (duration: %fs), nextAction: %s\n", this->getName(), Weapon::stateToChar(this->currentState), this->stateDuration, Weapon::actionToChar(requestedAction)); 619 PRINT(0)("Energy: max: %f; current: %f; loadedMax: %f; loadedCurrent: %f;chargeMin: %f, chargeMax %f\n",620 this->energyMax, this->energy, this-> energyLoadedMax, this->energyLoaded, this->minCharge, this->maxCharge);590 PRINT(0)("Energy: max: %f; current: %f; chargeMin: %f, chargeMax %f\n", 591 this->energyMax, this->energy, this->minCharge, this->maxCharge); 621 592 622 593 … … 663 634 switch (action) 664 635 { 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 636 case WA_SHOOT: 637 return "shoot"; 638 break; 639 case WA_CHARGE: 640 return "charge"; 641 break; 642 case WA_RELOAD: 643 return "reload"; 644 break; 645 case WA_ACTIVATE: 646 return "activate"; 647 break; 648 case WA_DEACTIVATE: 649 return "deactivate"; 650 break; 651 case WA_SPECIAL1: 652 return "special1"; 653 break; 654 default: 655 return "none"; 656 break; 686 657 } 687 658 } … … 726 697 switch (state) 727 698 { 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 } 753 } 699 case WS_SHOOTING: 700 return "shooting"; 701 break; 702 case WS_CHARGING: 703 return "charging"; 704 break; 705 case WS_RELOADING: 706 return "reloading"; 707 break; 708 case WS_ACTIVATING: 709 return "activating"; 710 break; 711 case WS_DEACTIVATING: 712 return "deactivating"; 713 break; 714 case WS_IDLE: 715 return "idle"; 716 break; 717 case WS_INACTIVE: 718 return "inactive"; 719 break; 720 default: 721 return "none"; 722 break; 723 } 724 } -
branches/network/src/world_entities/weapons/weapon.h
r6512 r6693 16 16 17 17 #include "world_entity.h" 18 #include "count_pointer.h" 19 #include "ammo_container.h" 18 20 19 21 // FORWARD DECLARATION … … 105 107 inline void setCapability(long capabilities) { this->capability = capabilities; }; 106 108 /** @returns the Capabilities of this Weapon */ 107 inline long getCapability() { return this->capability; };109 inline long getCapability() const { return this->capability; }; 108 110 void setProjectileType(ClassID projectile); 109 111 void setProjectileType(const char* projectile); … … 135 137 inline WeaponState getCurrentState() const { return this->currentState; }; 136 138 137 /** @param energyMax the maximum energy the Weapon can have @param energyLoadedMax the maximum energy in the weapon buffers*/138 inline void set MaximumEnergy(float energyMax, float energyLoadedMax) { this->energyMax = energyMax; this->energyLoadedMax = energyLoadedMax; };139 inline float get LoadedEnergyMax() const { return this->energyLoadedMax; };139 /** @param energyMax the maximum energy the Weapon can have */ 140 inline void setEnergyMax(float energyMax) { this->energyMax = energyMax; }; 141 inline float getEnergy() const { return this->energy; }; 140 142 inline float getEnergyMax() const { return this->energyMax; }; 141 inline float getEnergy() const { return this->energy; }; 142 inline float getLoadedEnergy() const { return this->energyLoaded; }; 143 inline void setAmmoContainer(const CountPointer<AmmoContainer>& ammoContainer) { this->ammoContainer = ammoContainer;} 143 144 144 145 void setActionSound(WeaponAction action, const char* soundFile); … … 150 151 151 152 GLGuiWidget* getEnergyWidget(); 152 GLGuiWidget* getLoadedEnergyWidget();153 153 154 154 // FLOW … … 198 198 199 199 // it is all about energy 200 float energy; //!< The energy stored in the weapons secondary buffers (reserve) 201 float energyLoaded; //!< The energy stored in the weapons primary buffers (fire without reload) 200 float energy; //!< The energy stored in the weapons buffers 202 201 float energyMax; //!< The maximal energy that can be stored in the secondary buffers (reserveMax) 203 float energyLoadedMax; //!< The maximal energy that can be stored in the primary buffers202 CountPointer<AmmoContainer> ammoContainer; //!< Pointer to the AmmoContainer this weapon grabs Energy from. 204 203 //! @todo move this to projectile 205 204 float minCharge; //!< The minimal energy to be loaded onto one projectile if chargeable otherwise the power consumed by one projectile … … 207 206 208 207 GLGuiBar* energyWidget; 209 GLGuiBar* energyLoadedWidget;210 208 211 209 //////////// -
branches/network/src/world_entities/weapons/weapon_manager.cc
r6568 r6693 217 217 bool WeaponManager::addWeapon(Weapon* weapon, int configID, int slotID) 218 218 { 219 assert(weapon != NULL); 220 219 221 if (unlikely(configID >= WM_MAX_CONFIGS || slotID >= (int)this->slotCount)) 220 222 { 221 PRINTF(2)("Slot %d of config %d is not availiabe (max: %d)\n", slotID, configID, this->slotCount); 223 PRINTF(2)("Slot %d of config %d is not availiabe (max: %d) searching for suitable slot\n", slotID, configID, this->slotCount); 224 if (configID >= WM_MAX_CONFIGS) 225 configID = -1; 226 if (slotID >= (int)this->slotCount) 227 slotID = -1; 228 } 229 // if no ConfigID is supplied set to Current Config. 230 if (configID <= -1) 231 configID = this->currentConfigID; 232 // 233 if (configID > -1 && slotID == -1) 234 { 235 slotID = this->getNextFreeSlot(configID, weapon->getCapability()); 236 if (slotID == -1) 237 configID = -1; 238 } 239 240 if (configID > 0 && slotID > 0 && this->configs[configID][slotID] != NULL) 241 { 242 PRINTF(3)("Weapon-slot %d/%d of %s already poulated, remove weapon (%s::%s) first\n", configID, slotID, this->getName(), weapon->getClassName(), weapon->getName()); 222 243 return false; 223 244 } 224 245 225 if (this->configs[configID][slotID] != NULL && configID > 0 && slotID > 0) 226 PRINTF(3)("Weapon-slot %d/%d of %s already poulated, overwriting\n", configID, slotID, this->getName()); 227 228 if (slotID == -1) // WM_FREE_SLOT 246 if (slotID <= -1) // WM_FREE_SLOT 229 247 { 230 248 slotID = this->getNextFreeSlot(configID, weapon->getCapability()); … … 245 263 246 264 //! @todo check if the weapon is already assigned to another config in another slot 265 assert(this->configs[configID][slotID] == NULL); 266 247 267 this->configs[configID][slotID] = weapon; 268 weapon->setAmmoContainer(this->getAmmoContainer(weapon->getProjectileType())); 248 269 if (this->parent != NULL) 249 270 { 250 271 this->parent->addChild(weapon); 251 272 } 252 PRINTF(3)("Added a new Weapon to the WeaponManager: config %i/ slot %i\n", configID, slotID);273 PRINTF(3)("Added a new Weapon (%s::%s) to the WeaponManager: config %i/ slot %i\n", weapon->getClassName(), weapon->getName(), configID, slotID); 253 274 return true; 254 275 } … … 420 441 /** 421 442 * private gets the next free slot in a certain weaponconfig 422 * @param the selected weaponconfig 443 * @param the selected weaponconfig -1 if none found 423 444 */ 424 445 int WeaponManager::getNextFreeSlot(int configID, long capability) 425 446 { 426 for( int i = 0; i < this->slotCount; ++i) 427 { 428 if( this->configs[configID][i] == NULL && 429 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 430 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 431 return i; 447 if (configID == -1) 448 { 449 for (configID = 0; configID < WM_MAX_CONFIGS; configID++) 450 for( int i = 0; i < this->slotCount; ++i) 451 { 452 if( this->configs[configID][i] == NULL && 453 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 454 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 455 return i; 456 } 457 } 458 else 459 { 460 for( int i = 0; i < this->slotCount; ++i) 461 { 462 if( this->configs[configID][i] == NULL && 463 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLKINDS) && 464 (this->currentSlotConfig[i].capability & capability & WTYPE_ALLDIRS)) 465 return i; 466 } 432 467 } 433 468 return -1; 434 469 } 435 470 471 CountPointer<AmmoContainer>& WeaponManager::getAmmoContainer(ClassID projectileType) 472 { 473 for (unsigned int i = 0; i < this->ammo.size(); i++) 474 { 475 if (this->ammo[i]->getProjectileType() == projectileType) 476 return this->ammo[i]; 477 } 478 this->ammo.push_back(CountPointer<AmmoContainer>(new AmmoContainer(projectileType))); 479 return this->ammo.back(); 480 } 436 481 437 482 -
branches/network/src/world_entities/weapons/weapon_manager.h
r6561 r6693 17 17 #include "crosshair.h" 18 18 #include "weapon.h" 19 20 #include "count_pointer.h" 21 #include "ammo_container.h" 19 22 20 23 // FORWARD DECLARATION … … 71 74 PNode* getParent() const { return this->parent; }; 72 75 73 bool addWeapon(Weapon* weapon);74 76 bool addWeapon(Weapon* weapon, int configID = -1, int slotID = -1); 75 77 void removeWeapon(Weapon* weapon, int configID = -1); 78 76 79 Weapon* getWeapon(int slotID) const { return (slotID >= 0 && slotID < this->slotCount)? this->currentSlotConfig[slotID].nextWeapon: NULL; }; 77 80 … … 82 85 void previousWeaponConfig(); 83 86 void changeWeaponConfig(int weaponConfig); 87 88 float addAmmunition(ClassID projectileType, float ammo); 89 84 90 85 91 /** @returns a fixed target namely the Crosshair's 3D position */ … … 97 103 // private: 98 104 int getNextFreeSlot(int configID, long capability = WTYPE_ALL); 105 CountPointer<AmmoContainer>& getAmmoContainer(ClassID projectileType); 99 106 100 107 private: … … 112 119 Crosshair* crosshair; //!< an aim. 113 120 tAnimation<Crosshair>* crossHairSizeAnim; //!< An animation for the crosshair (scaling) 121 122 std::vector<CountPointer<AmmoContainer> > ammo; //!< Containers 114 123 }; 115 124
Note: See TracChangeset
for help on using the changeset viewer.