libpsys

annotate src/psys_impl.h @ 1:874a942853ad

foobar
author John Tsiombikas <nuclear@mutantstargoat.com>
date Sat, 24 Sep 2011 20:44:42 +0300
parents 1c8eb90a6989
children 6e5342a2529a
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@1 53 quat_t cur_rot;
nuclear@0 54 float cur_rate, cur_life;
nuclear@0 55 vec3_t cur_dir;
nuclear@1 56 vec3_t cur_grav;
nuclear@0 57 };
nuclear@0 58
nuclear@0 59
nuclear@0 60 struct psys_particle {
nuclear@0 61 vec3_t pos, vel;
nuclear@1 62 float life, size;
nuclear@1 63
nuclear@1 64 struct psys_particle *next;
nuclear@0 65 };
nuclear@0 66
nuclear@0 67 void psys_gl_draw_start(struct psys_emitter *em, void *cls);
nuclear@0 68 void psys_gl_draw(struct psys_emitter *em, struct psys_particle *p, void *cls);
nuclear@0 69 void psys_gl_draw_end(struct psys_emitter *em, void *cls);
nuclear@0 70
nuclear@0 71 #endif /* PSYS_IMPL_H_ */