diff options
Diffstat (limited to 'src/client/soundext.cc')
| -rw-r--r-- | src/client/soundext.cc | 54 | 
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);  	}  }  | 
