libpsys

annotate src/psys.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 LIBPSYS_H_
nuclear@0 2 #define LIBPSYS_H_
nuclear@0 3
nuclear@0 4 /* emitter properties:
nuclear@0 5 * - p/r/s (anim)
nuclear@0 6 * - spawn rate (anim)
nuclear@0 7 * - direction (anim)
nuclear@0 8 *
nuclear@0 9 * - collision planes
nuclear@0 10 */
nuclear@0 11
nuclear@0 12 struct psys_emitter;
nuclear@0 13 struct psys_particle;
nuclear@0 14
nuclear@0 15 typedef int (*psys_spawn_func_t)(struct psys_emitter*, struct psys_particle*, void*);
nuclear@0 16 typedef void (*psys_update_func_t)(struct psys_emitter*, struct psys_particle*, float, float, void*);
nuclear@0 17
nuclear@0 18 typedef void (*psys_draw_func_t)(struct psys_emitter*, struct psys_particle*, void*);
nuclear@0 19 typedef void (*psys_draw_start_func_t)(struct psys_emitter*, void*);
nuclear@0 20 typedef void (*psys_draw_end_func_t)(struct psys_emitter*, void*);
nuclear@0 21
nuclear@0 22
nuclear@0 23 struct psys_emitter *psys_create(void);
nuclear@0 24 void psys_free(struct psys_emitter *em);
nuclear@0 25
nuclear@0 26 int psys_init(struct psys_emitter *em);
nuclear@0 27 void psys_destroy(struct psys_emitter *em);
nuclear@0 28
nuclear@0 29 /* set properties */
nuclear@0 30
nuclear@0 31 void psys_set_pos(struct psys_emitter *em, vec3_t pos, float tm);
nuclear@0 32 void psys_set_rot(struct psys_emitter *em, quat_t rot, float tm);
nuclear@0 33 void psys_set_pivot(struct psys_emitter *em, vec3_t pivot);
nuclear@0 34
nuclear@0 35 void psys_set_rate(struct psys_emitter *em, float rate, float tm);
nuclear@1 36 void psys_set_life(struct psys_emitter *em, float life, float tm);
nuclear@0 37 void psys_set_dir(struct psys_emitter *em, vec3_t dir, float tm);
nuclear@1 38 void psys_set_grav(struct psys_emitter *em, vec3_t grav, float tm);
nuclear@0 39
nuclear@0 40 void psys_clear_collision_planes(struct psys_emitter *em);
nuclear@0 41 int psys_add_collision_plane(struct psys_emitter *em, plane_t plane, float elast);
nuclear@0 42
nuclear@0 43 void psys_add_particle(struct psys_emitter *em, struct psys_particle *p);
nuclear@0 44
nuclear@0 45 void psys_spawn_func(struct psys_emitter *em, psys_spawn_func_t func, void *cls);
nuclear@0 46 void psys_update_func(struct psys_emitter *em, psys_update_func_t func, void *cls);
nuclear@0 47 void psys_draw_func(struct psys_emitter *em, psys_draw_func_t draw,
nuclear@0 48 psys_draw_start_func_t start, psys_draw_end_func_t end, void *cls);
nuclear@0 49
nuclear@0 50
nuclear@0 51 /* query emitter state */
nuclear@0 52 vec3_t psys_get_pos(struct psys_emitter *em);
nuclear@0 53 quat_t psys_get_rot(struct psys_emitter *em);
nuclear@0 54 float psys_get_rate(struct psys_emitter *em);
nuclear@0 55 float psys_get_life(struct psys_emitter *em);
nuclear@0 56 vec3_t psys_get_dir(struct psys_emitter *em);
nuclear@1 57 vec3_t psys_get_grav(struct psys_emitter *em);
nuclear@0 58
nuclear@0 59 /* update and render */
nuclear@0 60
nuclear@0 61 void psys_update(struct psys_emitter *em, float tm);
nuclear@0 62 void psys_draw(struct psys_emitter *em);
nuclear@0 63
nuclear@0 64 #endif /* LIBPSYS_H_ */