dungeon_crawler
diff prototype/src/tile.cc @ 46:f3030df27110
debugging the particles
author | John Tsiombikas <nuclear@mutantstargoat.com> |
---|---|
date | Thu, 13 Sep 2012 06:33:51 +0300 |
parents | dfd3a413ef9e |
children | aa9e28670ae2 |
line diff
1.1 --- a/prototype/src/tile.cc Wed Sep 12 06:04:20 2012 +0300 1.2 +++ b/prototype/src/tile.cc Thu Sep 13 06:33:51 2012 +0300 1.3 @@ -1,4 +1,5 @@ 1.4 #include <stdio.h> 1.5 +#include <ctype.h> 1.6 #include <map> 1.7 #include "opengl.h" 1.8 #include <assimp/cimport.h> 1.9 @@ -7,6 +8,7 @@ 1.10 #include "tile.h" 1.11 #include "tileset.h" 1.12 #include "renderer.h" 1.13 +#include "datapath.h" 1.14 1.15 using std::map; 1.16 1.17 @@ -18,6 +20,7 @@ 1.18 Tile::Tile(TileSet *tileset) 1.19 { 1.20 tset = tileset; 1.21 + last_upd = LONG_MIN; 1.22 } 1.23 1.24 Tile::~Tile() 1.25 @@ -28,18 +31,20 @@ 1.26 for(auto lt : lights) { 1.27 delete lt; 1.28 } 1.29 - for(auto ps : psattr) { 1.30 - psys_destroy_attr(ps); 1.31 - delete ps; 1.32 + for(auto psa : psattr) { 1.33 + psys_free_attr(psa); 1.34 + } 1.35 + for(auto ps : psys_global) { 1.36 + psys_free(ps); 1.37 } 1.38 } 1.39 1.40 -const struct psys_attributes **get_unique_psys() const 1.41 +const struct psys_attributes * const *Tile::get_unique_psys() const 1.42 { 1.43 return &psattr[0]; 1.44 } 1.45 1.46 -int get_unique_psys_count() const 1.47 +int Tile::get_unique_psys_count() const 1.48 { 1.49 return (int)psattr.size(); 1.50 } 1.51 @@ -85,7 +90,10 @@ 1.52 1.53 void Tile::update(unsigned long msec, float dt) 1.54 { 1.55 - // TODO particle system update 1.56 + // update particle systems 1.57 + for(auto ps : psys_global) { 1.58 + psys_update(ps, (float)msec / 1000.0f); 1.59 + } 1.60 } 1.61 1.62 void Tile::draw(unsigned int draw_mask) const 1.63 @@ -106,6 +114,16 @@ 1.64 } 1.65 } 1.66 1.67 +void Tile::draw_post(unsigned int draw_mask) const 1.68 +{ 1.69 + // draw global particle systems (simulated once) 1.70 + for(size_t i=0; i<psys_global.size(); i++) { 1.71 + if(psys_side[i] & draw_mask) { 1.72 + psys_draw(psys_global[i]); 1.73 + } 1.74 + } 1.75 +} 1.76 + 1.77 /* 1.78 int Tile::load_lights(const aiScene *scn) 1.79 { 1.80 @@ -214,6 +232,17 @@ 1.81 } 1.82 delete mesh; 1.83 1.84 + // ... ALSO add a fire particle system :) save me jebus 1.85 + struct psys_emitter *ps = psys_create(); 1.86 + if(ps && psys_load_attr(&ps->attr, datafile_path("fire.psys")) == 0) { 1.87 + Vector3 lpos = lt->get_position(); 1.88 + psys_set_pos(ps, v3_cons(lpos.x, lpos.y, lpos.z), 0); 1.89 + psys_global.push_back(ps); 1.90 + psys_side.push_back(side); 1.91 + } else { 1.92 + fprintf(stderr, "failed to create global particle system\n"); 1.93 + } 1.94 + 1.95 } else { 1.96 meshes.push_back(mesh); 1.97 mesh_side.push_back(side);