libpsys

annotate src/psys_impl.h @ 0:1c8eb90a6989

initial commit
author John Tsiombikas <nuclear@mutantstargoat.com>
date Sat, 24 Sep 2011 07:22:07 +0300
parents
children 874a942853ad
rev   line source
nuclear@0 1 #ifndef PSYS_IMPL_H_
nuclear@0 2 #define PSYS_IMPL_H_
nuclear@0 3
nuclear@0 4 #include <anim/anim.h>
nuclear@0 5 #include "psys.h"
nuclear@0 6
nuclear@0 7 struct v3track {
nuclear@0 8 struct anm_track x, y, z;
nuclear@0 9 };
nuclear@0 10
nuclear@0 11 struct col_plane {
nuclear@0 12 plane_t p;
nuclear@0 13 float elasticity;
nuclear@0 14 struct col_plane *next;
nuclear@0 15 };
nuclear@0 16
nuclear@0 17 struct psys_particle;
nuclear@0 18
nuclear@0 19 struct psys_emitter {
nuclear@0 20 float last_update;
nuclear@0 21
nuclear@0 22 struct anm_node prs;
nuclear@0 23
nuclear@0 24 struct anm_track rate;
nuclear@0 25 struct anm_track life;
nuclear@0 26 struct v3track dir;
nuclear@0 27 struct v3track grav;
nuclear@0 28
nuclear@0 29 float drag; /* I don't think this needs to animate */
nuclear@0 30
nuclear@0 31 /* list of active particles */
nuclear@0 32 struct psys_particle *plist;
nuclear@0 33
nuclear@0 34 /* list of collision planes */
nuclear@0 35 struct col_plane *planes;
nuclear@0 36
nuclear@0 37 /* custom spawn closure */
nuclear@0 38 void *spawn_cls;
nuclear@0 39 psys_spawn_func_t spawn;
nuclear@0 40
nuclear@0 41 /* custom particle update closure */
nuclear@0 42 void *upd_cls;
nuclear@0 43 psys_update_func_t update;
nuclear@0 44
nuclear@0 45 /* custom draw closure */
nuclear@0 46 void *draw_cls;
nuclear@0 47 psys_draw_func_t draw;
nuclear@0 48 psys_draw_start_func_t draw_start;
nuclear@0 49 psys_draw_end_func_t draw_end;
nuclear@0 50
nuclear@0 51 /* calculated on update */
nuclear@0 52 vec3_t cur_pos;
nuclear@0 53 qut_t cur_rot;
nuclear@0 54 float cur_rate, cur_life;
nuclear@0 55 vec3_t cur_dir;
nuclear@0 56 };
nuclear@0 57
nuclear@0 58
nuclear@0 59 struct psys_particle {
nuclear@0 60 vec3_t pos, vel;
nuclear@0 61 float life, size, mass;
nuclear@0 62 };
nuclear@0 63
nuclear@0 64 void psys_gl_draw_start(struct psys_emitter *em, void *cls);
nuclear@0 65 void psys_gl_draw(struct psys_emitter *em, struct psys_particle *p, void *cls);
nuclear@0 66 void psys_gl_draw_end(struct psys_emitter *em, void *cls);
nuclear@0 67
nuclear@0 68 #endif /* PSYS_IMPL_H_ */