nuclear@1: #ifndef TILE_H_ nuclear@1: #define TILE_H_ nuclear@1: nuclear@2: #include nuclear@7: #include nuclear@7: #include nuclear@38: #include nuclear@2: #include "mesh.h" nuclear@4: #include "light.h" nuclear@48: #include "audio/sample.h" nuclear@49: #include "audio/source.h" nuclear@2: nuclear@3: enum { nuclear@3: TILE_NORTH = 1, nuclear@3: TILE_SOUTH = 2, nuclear@3: TILE_EAST = 4, nuclear@3: TILE_WEST = 8, nuclear@7: TILE_ALL = 0xffff nuclear@3: }; nuclear@3: nuclear@48: enum { nuclear@48: TILE_SAMPLE_WALK, nuclear@48: TILE_SAMPLE_RUN, nuclear@48: nuclear@48: MAX_TILE_SAMPLES nuclear@48: }; nuclear@48: nuclear@11: class TileSet; nuclear@11: nuclear@1: class Tile { nuclear@49: public: nuclear@49: struct AudioSourceDesc { nuclear@50: unsigned int dirmask; nuclear@49: Vector3 pos; nuclear@49: AudioSample *sample; nuclear@51: float volume; nuclear@51: float ref_dist; nuclear@49: }; nuclear@49: nuclear@2: private: nuclear@11: TileSet *tset; nuclear@11: nuclear@48: AudioSample *samples[MAX_TILE_SAMPLES]; nuclear@48: nuclear@2: std::vector meshes; nuclear@46: std::vector mesh_side, light_side, psys_side; nuclear@3: std::vector lights; nuclear@45: // attributes for gridcell-unique particle systems nuclear@38: std::vector psattr; nuclear@45: // global particle systems (simulated once, drawn for each tile instance). nuclear@45: std::vector psys_global; nuclear@46: long last_upd; nuclear@2: nuclear@49: // audio sources nuclear@49: std::vector ausrc; nuclear@49: nuclear@4: int load_lights(const aiScene *scn); nuclear@7: int load_meshes(const aiScene *scn, const std::map &nmap); nuclear@4: nuclear@1: public: nuclear@11: Tile(TileSet *tileset = 0); nuclear@38: ~Tile(); nuclear@11: nuclear@48: AudioSample *get_sample(int sidx) const; nuclear@48: nuclear@49: int get_audio_source_count() const; nuclear@49: const AudioSourceDesc &get_audio_source(int idx) const; nuclear@49: nuclear@45: int get_unique_psys_count() const; nuclear@49: struct psys_attributes *get_unique_psys(int idx); nuclear@49: const struct psys_attributes *get_unique_psys(int idx) const; nuclear@45: nuclear@1: bool load(const char *fname); nuclear@1: nuclear@38: void update(unsigned long msec, float dt); nuclear@38: nuclear@3: void draw(unsigned int drawmask) const; nuclear@23: void draw_lights(unsigned int drawmask) const; nuclear@46: void draw_post(unsigned int drawmask) const; nuclear@1: }; nuclear@1: nuclear@5: nuclear@1: #endif // TILE_H_