libpsys

annotate src/psys_impl.h @ 2:6e5342a2529a

more stuff done
author John Tsiombikas <nuclear@mutantstargoat.com>
date Sun, 25 Sep 2011 04:26:51 +0300
parents 874a942853ad
children
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@2 24 unsigned int tex;
nuclear@2 25
nuclear@0 26 struct anm_track rate;
nuclear@0 27 struct anm_track life;
nuclear@0 28 struct v3track dir;
nuclear@0 29 struct v3track grav;
nuclear@0 30
nuclear@0 31 float drag; /* I don't think this needs to animate */
nuclear@0 32
nuclear@0 33 /* list of active particles */
nuclear@0 34 struct psys_particle *plist;
nuclear@0 35
nuclear@0 36 /* list of collision planes */
nuclear@0 37 struct col_plane *planes;
nuclear@0 38
nuclear@0 39 /* custom spawn closure */
nuclear@0 40 void *spawn_cls;
nuclear@0 41 psys_spawn_func_t spawn;
nuclear@0 42
nuclear@0 43 /* custom particle update closure */
nuclear@0 44 void *upd_cls;
nuclear@0 45 psys_update_func_t update;
nuclear@0 46
nuclear@0 47 /* custom draw closure */
nuclear@0 48 void *draw_cls;
nuclear@0 49 psys_draw_func_t draw;
nuclear@0 50 psys_draw_start_func_t draw_start;
nuclear@0 51 psys_draw_end_func_t draw_end;
nuclear@0 52
nuclear@0 53 /* calculated on update */
nuclear@0 54 vec3_t cur_pos;
nuclear@1 55 quat_t cur_rot;
nuclear@0 56 float cur_rate, cur_life;
nuclear@0 57 vec3_t cur_dir;
nuclear@1 58 vec3_t cur_grav;
nuclear@2 59
nuclear@2 60 /* partial spawn accumulator */
nuclear@2 61 float spawn_acc;
nuclear@0 62 };
nuclear@0 63
nuclear@0 64
nuclear@0 65 struct psys_particle {
nuclear@0 66 vec3_t pos, vel;
nuclear@1 67 float life, size;
nuclear@1 68
nuclear@1 69 struct psys_particle *next;
nuclear@0 70 };
nuclear@0 71
nuclear@0 72 void psys_gl_draw_start(struct psys_emitter *em, void *cls);
nuclear@0 73 void psys_gl_draw(struct psys_emitter *em, struct psys_particle *p, void *cls);
nuclear@0 74 void psys_gl_draw_end(struct psys_emitter *em, void *cls);
nuclear@0 75
nuclear@0 76 #endif /* PSYS_IMPL_H_ */