# HG changeset patch # User John Tsiombikas # Date 1347950456 -10800 # Node ID d57df51f6b501bf0c1d12e09f2da6d2d54bd084e # Parent c40efa9cf8441d9bd7c1e688121aa058b13976c7 - fixed audio panning (listener direction) - particles had no fog - sound sources were not destroyed properly diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/audio/audio.cc --- a/prototype/src/audio/audio.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/audio/audio.cc Tue Sep 18 09:40:56 2012 +0300 @@ -44,7 +44,7 @@ orient[0] = xform[0][2]; orient[1] = xform[1][2]; - orient[2] = xform[2][2]; + orient[2] = -xform[2][2]; orient[3] = xform[0][1]; orient[4] = xform[1][1]; diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/audio/auman.cc --- a/prototype/src/audio/auman.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/audio/auman.cc Tue Sep 18 09:40:56 2012 +0300 @@ -8,6 +8,7 @@ fprintf(stderr, "failed to create kd tree\n"); throw std::bad_alloc(); } + kd_data_destructor(sources, [](void *s) { delete (AudioSource*)s; }); } AudioManager::~AudioManager() @@ -17,12 +18,12 @@ void AudioManager::clear() { - kd_clear(sources); - for(auto s : active_set) { s->stop(); } active_set.clear(); + + kd_clear(sources); } void AudioManager::add_source(AudioSource *s) diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/audio/source.cc --- a/prototype/src/audio/source.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/audio/source.cc Tue Sep 18 09:40:56 2012 +0300 @@ -51,6 +51,30 @@ return Vector3(pos[0], pos[1], pos[2]); } +void AudioSource::set_volume(float vol) +{ + alSourcef(alsrc, AL_GAIN, vol); +} + +float AudioSource::get_volume() const +{ + float vol; + alGetSourcef(alsrc, AL_GAIN, &vol); + return vol; +} + +void AudioSource::set_reference_dist(float rdist) +{ + alSourcef(alsrc, AL_REFERENCE_DISTANCE, rdist); +} + +float AudioSource::get_reference_dist() const +{ + float res; + alGetSourcef(alsrc, AL_REFERENCE_DISTANCE, &res); + return res; +} + bool AudioSource::is_playing() const { int state; diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/audio/source.h --- a/prototype/src/audio/source.h Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/audio/source.h Tue Sep 18 09:40:56 2012 +0300 @@ -19,6 +19,12 @@ void set_position(const Vector3 &pos, bool viewspace = false); Vector3 get_position() const; + void set_volume(float vol); + float get_volume() const; + + void set_reference_dist(float rdist); + float get_reference_dist() const; + bool is_playing() const; void play(); void stop(); diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/level.cc --- a/prototype/src/level.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/level.cc Tue Sep 18 09:40:56 2012 +0300 @@ -98,9 +98,14 @@ std::list asrc = cell->get_audio_sources(); for(auto sdesc : asrc) { if(sdesc.dirmask & adjmask) { + Vector3 pos = sdesc.pos + get_cell_pos(j, i); + AudioSource *s = new AudioSource; s->set_sample(sdesc.sample); - s->set_position(sdesc.pos + get_cell_pos(i, y)); + s->set_position(pos); + s->set_volume(sdesc.volume); + s->set_reference_dist(sdesc.ref_dist); + //s->set_rolloff(1.0); austatic.add_source(s); } } diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/main.cc --- a/prototype/src/main.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/main.cc Tue Sep 18 09:40:56 2012 +0300 @@ -143,16 +143,16 @@ void cleanup() { - if(cfg.sound) { - delete move_sound; - destroy_audio(); - } - delete level; delete tileset; delete rend; cleanup_cmdcon(); + + if(cfg.sound) { + delete move_sound; + destroy_audio(); + } } void idle() diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/renderer.cc --- a/prototype/src/renderer.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/renderer.cc Tue Sep 18 09:40:56 2012 +0300 @@ -85,9 +85,14 @@ void FwdRenderer::render(const Level *level) const { glPushAttrib(GL_ENABLE_BIT); + glEnable(GL_LIGHTING); + glEnable(GL_FOG); + glFogi(GL_FOG_MODE, GL_LINEAR); + glFogf(GL_FOG_START, 3.0f); + glFogf(GL_FOG_END, 6.0f); + glUseProgram(sdrprog); - glEnable(GL_LIGHTING); level->draw(); glUseProgram(0); diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/tile.cc --- a/prototype/src/tile.cc Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/tile.cc Tue Sep 18 09:40:56 2012 +0300 @@ -291,7 +291,7 @@ SampleSet *sampleset = tset->get_samples(); AudioSample *sample = sampleset->get("fire.ogg"); if(sample) { - AudioSourceDesc adesc = {side, lt->get_position(), sample}; + AudioSourceDesc adesc = {side, lt->get_position(), sample, 1.0, 0.1}; ausrc.push_back(adesc); } } diff -r c40efa9cf844 -r d57df51f6b50 prototype/src/tile.h --- a/prototype/src/tile.h Tue Sep 18 04:45:46 2012 +0300 +++ b/prototype/src/tile.h Tue Sep 18 09:40:56 2012 +0300 @@ -33,6 +33,8 @@ unsigned int dirmask; Vector3 pos; AudioSample *sample; + float volume; + float ref_dist; }; private: