Changeset 6417 for code/trunk/src/orxonox/weaponsystem
- Timestamp:
- Dec 25, 2009, 10:23:58 PM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/orxonox/weaponsystem/WeaponMode.cc
r5929 r6417 32 32 #include "core/CoreIncludes.h" 33 33 #include "core/XMLPort.h" 34 #include "controllers/Controller.h" 35 #include "worldentities/pawns/Pawn.h" 34 36 35 37 #include "Munition.h" … … 37 39 #include "WeaponPack.h" 38 40 #include "WeaponSystem.h" 41 #include "WeaponSlot.h" 42 43 #include "sound/WorldSound.h" 39 44 40 45 namespace orxonox … … 61 66 62 67 this->damage_ = 0; 68 63 69 this->muzzleOffset_ = Vector3::ZERO; 70 this->muzzlePosition_ = Vector3::ZERO; 71 this->muzzleOrientation_ = Quaternion::IDENTITY; 72 73 if( GameMode::isMaster() ) 74 { 75 this->defSndWpnFire_ = new WorldSound(this); 76 this->defSndWpnFire_->setLooping(false); 77 this->bSoundAttached_ = false; 78 } 79 else 80 this->defSndWpnFire_ = 0; 64 81 } 65 82 66 83 WeaponMode::~WeaponMode() 67 84 { 85 if (this->isInitialized()) 86 { 87 if (this->defSndWpnFire_) 88 this->defSndWpnFire_->destroy(); 89 } 68 90 } 69 91 … … 90 112 { 91 113 (*reloadTime) = this->reloadTime_; 114 if( !this->bSoundAttached_ && GameMode::isMaster() ) 115 { 116 assert(this->getWeapon()); 117 this->getWeapon()->attach(this->defSndWpnFire_); 118 this->bSoundAttached_ = true; 119 } 92 120 93 121 if (!this->bReloading_ && this->munition_ && this->munition_->takeMunition(this->munitionPerShot_, this)) … … 108 136 this->reloadTimer_.startTimer(); 109 137 138 if( this->defSndWpnFire_ && !(this->defSndWpnFire_->isPlaying())) 139 { 140 this->defSndWpnFire_->play(); 141 } 142 110 143 this->fire(); 111 144 … … 145 178 { 146 179 this->munitionname_ = munitionname; 147 this->munitiontype_ = ClassByString(this->munitionname_); 180 Identifier* identifier = ClassByString(this->munitionname_); 181 if (identifier) 182 this->munitiontype_ = identifier; 183 else 184 COUT(2) << "Warning: No munition class defined in WeaponMode " << this->getName() << std::endl; 148 185 this->updateMunition(); 149 186 } … … 191 228 void WeaponMode::reloaded() 192 229 { 230 if( this->defSndWpnFire_ && this->defSndWpnFire_->isPlaying()) 231 { 232 this->defSndWpnFire_->stop(); 233 } 193 234 this->bReloading_ = false; 194 235 } 195 236 196 Vector3 WeaponMode::getMuzzlePosition() const237 void WeaponMode::computeMuzzleParameters(const Vector3& target) 197 238 { 198 239 if (this->weapon_) 199 return (this->weapon_->getWorldPosition() + this->weapon_->getWorldOrientation() * this->muzzleOffset_); 200 else 201 return this->muzzleOffset_; 202 } 203 204 const Quaternion& WeaponMode::getMuzzleOrientation() const 240 { 241 this->muzzlePosition_ = this->weapon_->getWorldPosition() + this->weapon_->getWorldOrientation() * this->muzzleOffset_; 242 243 Vector3 muzzleDirection; 244 muzzleDirection = target - this->muzzlePosition_; 245 // COUT(0) << "muzzleDirection " << muzzleDirection << endl; 246 this->muzzleOrientation_ = (this->weapon_->getWorldOrientation() * WorldEntity::FRONT).getRotationTo(muzzleDirection) * this->weapon_->getWorldOrientation(); 247 } 248 else 249 { 250 this->muzzlePosition_ = this->muzzleOffset_; 251 this->muzzleOrientation_ = Quaternion::IDENTITY; 252 } 253 } 254 255 Vector3 WeaponMode::getMuzzleDirection() const 205 256 { 206 257 if (this->weapon_) 207 return this->weapon_->getWorldOrientation(); 208 else 209 return Quaternion::IDENTITY; 210 } 211 212 Vector3 WeaponMode::getMuzzleDirection() const 213 { 214 if (this->weapon_) 215 return (this->weapon_->getWorldOrientation() * WorldEntity::FRONT); 258 return (this->getMuzzleOrientation() * WorldEntity::FRONT); 216 259 else 217 260 return WorldEntity::FRONT; 218 261 } 262 263 void WeaponMode::setDefaultSound(const std::string& soundPath) 264 { 265 if( this->defSndWpnFire_ ) 266 this->defSndWpnFire_->setSource(soundPath); 267 } 268 269 const std::string& WeaponMode::getDefaultSound() 270 { 271 if( this->defSndWpnFire_ ) 272 return this->defSndWpnFire_->getSource(); 273 else 274 return BLANKSTRING; 275 } 219 276 } -
code/trunk/src/orxonox/weaponsystem/WeaponMode.h
r5929 r6417 51 51 bool fire(float* reloadTime); 52 52 bool reload(); 53 54 // Interacting with the default Firing sound 55 void setDefaultSound(const std::string& soundPath); 56 const std::string& getDefaultSound(); 53 57 54 58 … … 109 113 { return this->muzzleOffset_; } 110 114 111 Vector3 getMuzzlePosition() const; 112 const Quaternion& getMuzzleOrientation() const; 115 void computeMuzzleParameters(const Vector3& target); 116 const Vector3& getMuzzlePosition() const 117 { return this->muzzlePosition_; } 118 const Quaternion& getMuzzleOrientation() const 119 { return this->muzzleOrientation_; } 113 120 Vector3 getMuzzleDirection() const; 114 121 … … 124 131 inline unsigned int getMode() const 125 132 { return this->mode_; } 133 134 Vector3 getTarget(); 126 135 127 136 protected: … … 152 161 Timer reloadTimer_; 153 162 bool bReloading_; 163 164 Vector3 muzzlePosition_; 165 Quaternion muzzleOrientation_; 166 167 WorldSound* defSndWpnFire_; 168 bool bSoundAttached_; 154 169 }; 155 170 } -
code/trunk/src/orxonox/weaponsystem/WeaponPack.cc
r5929 r6417 49 49 WeaponPack::~WeaponPack() 50 50 { 51 if (this->isInitialized() && this->weaponSystem_)51 if (this->isInitialized()) 52 52 { 53 this->weaponSystem_->removeWeaponPack(this); 53 if( this->weaponSystem_ ) 54 this->weaponSystem_->removeWeaponPack(this); 54 55 55 56 while (!this->weapons_.empty()) … … 71 72 void WeaponPack::fire(unsigned int weaponmode) 72 73 { 73 for (std:: set<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)74 for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it) 74 75 (*it)->fire(weaponmode); 75 76 } … … 77 78 void WeaponPack::reload() 78 79 { 79 for (std:: set<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)80 for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it) 80 81 (*it)->reload(); 81 82 } … … 86 87 return; 87 88 88 this->weapons_. insert(weapon);89 this->weapons_.push_back(weapon); 89 90 weapon->setWeaponPack(this); 90 91 } … … 95 96 return; 96 97 97 this->weapons_.erase(weapon); 98 std::vector<Weapon*>::iterator it = std::find(this->weapons_.begin(), this->weapons_.end(), weapon); 99 assert(it != this->weapons_.end()); 100 this->weapons_.erase(it); 98 101 weapon->setWeaponPack(0); 99 102 } … … 103 106 unsigned int i = 0; 104 107 105 for (std:: set<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)108 for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it) 106 109 { 107 110 if (i == index) … … 142 145 void WeaponPack::notifyWeapons() 143 146 { 144 for (std:: set<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)147 for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it) 145 148 (*it)->setWeaponPack(this); 146 149 } -
code/trunk/src/orxonox/weaponsystem/WeaponPack.h
r5781 r6417 69 69 void notifyWeapons(); 70 70 71 std:: set<Weapon *> weapons_;71 std::vector<Weapon *> weapons_; 72 72 std::set<DefaultWeaponmodeLink *> links_; 73 73 WeaponSystem * weaponSystem_; -
code/trunk/src/orxonox/weaponsystem/WeaponSystem.cc
r5929 r6417 202 202 } 203 203 204 this->weaponPacks_. insert(wPack);204 this->weaponPacks_.push_back(wPack); 205 205 wPack->setWeaponSystem(this); 206 206 … … 221 221 222 222 // Remove the WeaponPack from the WeaponSystem 223 this->weaponPacks_.erase(wPack); 223 std::vector<WeaponPack*>::iterator it = std::find(this->weaponPacks_.begin(),this->weaponPacks_.end(), wPack); 224 assert(it !=this->weaponPacks_.end()); 225 this->weaponPacks_.erase(it); 224 226 } 225 227 … … 227 229 { 228 230 unsigned int i = 0; 229 for (std:: set<WeaponPack*>::const_iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it)231 for (std::vector<WeaponPack*>::const_iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it) 230 232 { 231 233 ++i; … … 258 260 259 261 // Check if the WeaponPack belongs to this WeaponSystem 260 std:: set<WeaponPack *>::iterator it1 = this->weaponPacks_.find(wPack);262 std::vector<WeaponPack *>::iterator it1 = std::find( this->weaponPacks_.begin(), this->weaponPacks_.end(), wPack ); 261 263 if (it1 == this->weaponPacks_.end()) 262 264 return; -
code/trunk/src/orxonox/weaponsystem/WeaponSystem.h
r5781 r6417 92 92 std::map<unsigned int, WeaponSet *> weaponSets_; 93 93 std::vector<WeaponSlot *> weaponSlots_; 94 std:: set<WeaponPack *> weaponPacks_;94 std::vector<WeaponPack *> weaponPacks_; 95 95 std::map<Identifier *, Munition *> munitions_; 96 96 Pawn * pawn_;
Note: See TracChangeset
for help on using the changeset viewer.