00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <weapons/WeaponSound.h>
00022 #include <engine/ActionController.h>
00023 #include <actions/SoundAction.h>
00024 #include <common/Defines.h>
00025 #include <stdlib.h>
00026
00027 REGISTER_ACCESSORY_SOURCE(WeaponSound);
00028
00029 WeaponSound::WeaponSound() :
00030 gain_(1), relative_(false),
00031 rolloff_(1), referenceDistance_(75)
00032 {
00033
00034 }
00035
00036 WeaponSound::~WeaponSound()
00037 {
00038
00039 }
00040
00041 const char *WeaponSound::getSound()
00042 {
00043 std::string &sound = sounds_[rand() % sounds_.size()];
00044 return sound.c_str();
00045 }
00046
00047 bool WeaponSound::parseXML(AccessoryCreateContext &context, XMLNode *accessoryNode)
00048 {
00049 if (!Weapon::parseXML(context, accessoryNode)) return false;
00050
00051 std::string sound;
00052 while (accessoryNode->getNamedChild("sound", sound, false))
00053 {
00054 if (!S3D::checkDataFile(sound.c_str())) return false;
00055 sounds_.push_back(sound);
00056 }
00057 accessoryNode->getNamedChild("gain", gain_, false);
00058 accessoryNode->getNamedChild("rolloff", rolloff_, false);
00059 accessoryNode->getNamedChild("referencedistance", referenceDistance_, false);
00060 accessoryNode->getNamedChild("relative", relative_, false);
00061 return true;
00062 }
00063
00064 void WeaponSound::fireWeapon(ScorchedContext &context,
00065 WeaponFireContext &weaponContext, FixedVector &position, FixedVector &velocity)
00066 {
00067 context.getActionController().addAction(
00068 new SoundAction(position, this));
00069 }