dungeon_crawler
diff prototype/src/level.cc @ 49:303743485aba
pretty much implemented the positional torch sound sources
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Tue, 18 Sep 2012 00:34:29 +0300 |
parents | aa9e28670ae2 |
children | c40efa9cf844 |
line diff
1.1 --- a/prototype/src/level.cc Mon Sep 17 08:40:59 2012 +0300 1.2 +++ b/prototype/src/level.cc Tue Sep 18 00:34:29 2012 +0300 1.3 @@ -5,6 +5,7 @@ 1.4 #include "level.h" 1.5 #include "tile.h" 1.6 #include "tileset.h" 1.7 +#include "cfg.h" 1.8 1.9 Level::Level() 1.10 { 1.11 @@ -72,6 +73,15 @@ 1.12 GridCell *cell = new GridCell(deftile); 1.13 *grid_row = cell; 1.14 cell_list.push_back(*grid_row); 1.15 + 1.16 + // add any audio sources in this grid-cell to the level static audio manager 1.17 + std::list<Tile::AudioSourceDesc> asrc = cell->get_audio_sources(); 1.18 + for(auto sdesc : asrc) { 1.19 + AudioSource *s = new AudioSource; 1.20 + s->set_sample(sdesc.sample); 1.21 + s->set_position(sdesc.pos + get_cell_pos(i, y)); 1.22 + austatic.add_source(s); 1.23 + } 1.24 } 1.25 grid_row++; 1.26 } 1.27 @@ -133,11 +143,21 @@ 1.28 return dmask; 1.29 } 1.30 1.31 +void Level::set_player_position(const Vector3 &ppos) 1.32 +{ 1.33 + player_pos = ppos; 1.34 +} 1.35 + 1.36 void Level::update(unsigned long msec, float dt) 1.37 { 1.38 for(auto cell : cell_list) { 1.39 cell->update(msec, dt); 1.40 } 1.41 + 1.42 + // activate the closest audio sources 1.43 + if(cfg.sound) { 1.44 + austatic.active_range(player_pos, 2.0); 1.45 + } 1.46 } 1.47 1.48 void Level::draw() const 1.49 @@ -263,12 +283,12 @@ 1.50 tiles.push_back(tile); 1.51 1.52 /* instanciate any particle systems */ 1.53 - const struct psys_attributes * const *psattr = tile->get_unique_psys(); 1.54 int num_psattr = tile->get_unique_psys_count(); 1.55 1.56 for(int i=0; i<num_psattr; i++) { 1.57 + const struct psys_attributes *psattr = tile->get_unique_psys(i); 1.58 struct psys_emitter *emitter = psys_create(); 1.59 - emitter->attr = *psattr[i]; 1.60 + emitter->attr = *psattr; 1.61 psys.push_back(emitter); 1.62 } 1.63 } 1.64 @@ -314,3 +334,16 @@ 1.65 } 1.66 return 0; 1.67 } 1.68 + 1.69 +std::list<Tile::AudioSourceDesc> GridCell::get_audio_sources() const 1.70 +{ 1.71 + std::list<Tile::AudioSourceDesc> srclist; 1.72 + 1.73 + for(auto tile : tiles) { 1.74 + int num_src = tile->get_audio_source_count(); 1.75 + for(int i=0; i<num_src; i++) { 1.76 + srclist.push_back(tile->get_audio_source(i)); 1.77 + } 1.78 + } 1.79 + return srclist; 1.80 +}