nuclear@0: #ifndef LIBPSYS_H_ nuclear@0: #define LIBPSYS_H_ nuclear@0: nuclear@0: /* emitter properties: nuclear@0: * - p/r/s (anim) nuclear@0: * - spawn rate (anim) nuclear@0: * - direction (anim) nuclear@0: * nuclear@0: * - collision planes nuclear@0: */ nuclear@0: nuclear@0: struct psys_emitter; nuclear@0: struct psys_particle; nuclear@0: nuclear@0: typedef int (*psys_spawn_func_t)(struct psys_emitter*, struct psys_particle*, void*); nuclear@0: typedef void (*psys_update_func_t)(struct psys_emitter*, struct psys_particle*, float, float, void*); nuclear@0: nuclear@0: typedef void (*psys_draw_func_t)(struct psys_emitter*, struct psys_particle*, void*); nuclear@0: typedef void (*psys_draw_start_func_t)(struct psys_emitter*, void*); nuclear@0: typedef void (*psys_draw_end_func_t)(struct psys_emitter*, void*); nuclear@0: nuclear@0: nuclear@0: struct psys_emitter *psys_create(void); nuclear@0: void psys_free(struct psys_emitter *em); nuclear@0: nuclear@0: int psys_init(struct psys_emitter *em); nuclear@0: void psys_destroy(struct psys_emitter *em); nuclear@0: nuclear@0: /* set properties */ nuclear@0: nuclear@0: void psys_set_pos(struct psys_emitter *em, vec3_t pos, float tm); nuclear@0: void psys_set_rot(struct psys_emitter *em, quat_t rot, float tm); nuclear@0: void psys_set_pivot(struct psys_emitter *em, vec3_t pivot); nuclear@0: nuclear@0: void psys_set_rate(struct psys_emitter *em, float rate, float tm); nuclear@0: void psys_set_dir(struct psys_emitter *em, vec3_t dir, float tm); nuclear@0: nuclear@0: void psys_clear_collision_planes(struct psys_emitter *em); nuclear@0: int psys_add_collision_plane(struct psys_emitter *em, plane_t plane, float elast); nuclear@0: nuclear@0: void psys_add_particle(struct psys_emitter *em, struct psys_particle *p); nuclear@0: nuclear@0: void psys_spawn_func(struct psys_emitter *em, psys_spawn_func_t func, void *cls); nuclear@0: void psys_update_func(struct psys_emitter *em, psys_update_func_t func, void *cls); nuclear@0: void psys_draw_func(struct psys_emitter *em, psys_draw_func_t draw, nuclear@0: psys_draw_start_func_t start, psys_draw_end_func_t end, void *cls); nuclear@0: nuclear@0: nuclear@0: /* query emitter state */ nuclear@0: vec3_t psys_get_pos(struct psys_emitter *em); nuclear@0: quat_t psys_get_rot(struct psys_emitter *em); nuclear@0: float psys_get_rate(struct psys_emitter *em); nuclear@0: float psys_get_life(struct psys_emitter *em); nuclear@0: vec3_t psys_get_dir(struct psys_emitter *em); nuclear@0: nuclear@0: /* update and render */ nuclear@0: nuclear@0: void psys_update(struct psys_emitter *em, float tm); nuclear@0: void psys_draw(struct psys_emitter *em); nuclear@0: nuclear@0: #endif /* LIBPSYS_H_ */