/* client/soundext.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CLIENT_SOUNDEXT_H__ #define __INCLUDED_CLIENT_SOUNDEXT_H__ #include "core/extension.h" #include "core/cvar.h" #include #include namespace client { extern core::Cvar *snd_engines; extern core::Cvar *snd_doppler; extern core::Cvar *snd_volume; /// a sound playing class Sound { public: Sound(); Sound(const std::string & name); inline size_t buffer() const { return sound_buffer; } inline size_t source() const { return sound_source; } inline math::Vector3f const & location() { return sound_location; } inline math::Vector3f & get_location() { return sound_location; } inline void set_location(const math::Vector3f & location) { sound_location.assign(location); } inline void set_source(size_t source) { sound_source = source; } inline void set_buffer(size_t buffer) { sound_buffer = buffer; } private: size_t sound_buffer; size_t sound_source; math::Vector3f sound_location; }; /// the sound extension of an entity class SoundExt : public core::Extension { public: SoundExt(core::Entity *Entity); ~SoundExt(); virtual void frame(float elapsed); typedef std::list Sounds; private: void clear(); /// index of the audio buffer containing the thruster sound loop size_t state_thusterloopbuffer; /// index of the audio buffer containing the impulse sound loop size_t state_impulseloopbuffer; /// index of the audio buffer containing the impulse drive start sound size_t state_impulsestartbuffer; /// index of the audio buffer containing the impulse drive stop sound size_t state_impulsestopbuffer; /// index of the audio buffer currently looping in enginesource size_t state_engineloopbuffer; /// index of the audio source used to play the engine sound loop size_t state_engineloopsource; /// index of the audio last played on the event source size_t state_engineeventbuffer; /// index of the audio source used to play engine sound events size_t state_engineeventsource; Sounds state_soundlist; }; /// render listener sound void render_listener_sound(); /// render sound for a single entity void render_entity_sound(core::Entity *entity); } //namespace client // #endif // __INCLUDED_CLIENT_CLIENTEXT_H__