Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/soundext.cc')
-rw-r--r--src/client/soundext.cc54
1 files changed, 26 insertions, 28 deletions
diff --git a/src/client/soundext.cc b/src/client/soundext.cc
index 40b9417..1ea0c94 100644
--- a/src/client/soundext.cc
+++ b/src/client/soundext.cc
@@ -35,18 +35,17 @@ SoundExt::SoundExt(core::Entity *entity) : core::Extension(core::Extension::Soun
state_engineeventsource = 0;
// load engine sound
- if (entity->type() == core::Entity::Controlable)
- {
+ if (entity->type() == core::Entity::Controlable) {
core::EntityControlable *entityco = static_cast<core::EntityControlable *>(entity);
unsigned int enginesoundset = 0;
unsigned int impulsesoundset = 0;
-
+
if (entityco->model()) {
enginesoundset = entityco->model()->enginesound();
impulsesoundset = entityco->model()->impulsesound();
}
-
-
+
+
std::stringstream soundname;
soundname << "engines/loop" << std::setfill('0') << std::setw(2) << enginesoundset;
state_thusterloopbuffer = audio::Buffers::load(soundname.str());
@@ -91,60 +90,59 @@ void SoundExt::clear()
void SoundExt::frame(float elapsed)
{
- if (entity()->type() == core::Entity::Controlable)
- {
+ if (entity()->type() == core::Entity::Controlable) {
core::EntityControlable *entity = static_cast<core::EntityControlable *>(this->entity());
-
+
float speed = entity->speed();
float pitch = 1.0f;
float gain = 0.0;
- float r = ( entity->model() ? entity->model()->maxbbox().x() : entity->radius());
+ float r = (entity->model() ? entity->model()->maxbbox().x() : entity->radius());
if (entity->state() == core::Entity::Impulse) {
pitch = 1.0f;
gain = 1.0f;
- } else if (entity->thrust() > 0 ) {
+ } else if (entity->thrust() > 0) {
pitch = 0.2f + entity->thrust() * 0.8f;
gain = 0.8f;
- }
-
- if (entity->state() == core::Entity::ImpulseInitiate ) {
-
+ }
+
+ if (entity->state() == core::Entity::ImpulseInitiate) {
+
if (state_engineeventbuffer != state_impulsestartbuffer) {
audio::update_source(state_engineeventsource,
- entity->location() - entity->axis().forward() * r ,
- entity->axis().forward() * speed);
-
+ entity->location() - entity->axis().forward() * r ,
+ entity->axis().forward() * speed);
+
state_engineeventbuffer = audio::play(state_engineeventsource, state_impulsestartbuffer);
}
} else if (entity->state() == core::Entity::Impulse) {
-
+
state_engineeventbuffer = state_impulseloopbuffer;
-
+
if (state_engineloopbuffer != state_impulseloopbuffer) {
state_engineloopbuffer = audio::loop(state_engineloopsource, state_impulseloopbuffer, pitch, 0);
}
pitch = 1.0f;
} else {
-
- if (state_engineeventbuffer == state_impulseloopbuffer) {
+
+ if (state_engineeventbuffer == state_impulseloopbuffer) {
audio::update_source(state_engineeventsource,
- entity->location() - entity->axis().forward() * r ,
- entity->axis().forward() * speed);
+ entity->location() - entity->axis().forward() * r ,
+ entity->axis().forward() * speed);
state_engineeventbuffer = audio::play(state_engineeventsource, state_impulsestopbuffer);
}
state_engineeventbuffer = 0;
-
+
if (state_engineloopbuffer != state_thusterloopbuffer) {
state_engineloopbuffer = audio::loop(state_engineloopsource, state_thusterloopbuffer, pitch, 0);
}
}
-
+
audio::update_source(state_engineloopsource,
- entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed, pitch, gain);
-
+ entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed, pitch, gain);
+
audio::update_source(state_engineeventsource,
- entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed);
+ entity->location() - entity->axis().forward() * r , entity->axis().forward() * speed);
}
}