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 +}