nuclear@6: #ifndef PATTR_H_ nuclear@6: #define PATTR_H_ nuclear@6: nuclear@6: #include "pstrack.h" nuclear@6: #include "rndval.h" nuclear@6: nuclear@9: /* the particle attributes vary from 0 to 1 during its lifetime */ nuclear@9: struct psys_particle_attributes { nuclear@9: struct psys_track3 color; nuclear@9: struct psys_track alpha; nuclear@9: struct psys_track size; nuclear@9: }; nuclear@9: nuclear@6: struct psys_attributes { nuclear@6: unsigned int tex; /* OpenGL texture to use for the billboard */ nuclear@6: nuclear@6: struct psys_track3 spawn_range; /* radius of emmiter */ nuclear@6: struct psys_track rate; /* spawn rate particles per sec */ nuclear@6: struct psys_anm_rnd life; /* particle life in seconds */ nuclear@6: struct psys_anm_rnd size; /* base particle size */ nuclear@6: struct psys_anm_rnd3 dir; /* particle shoot direction */ nuclear@6: nuclear@6: struct psys_track3 grav; /* external force (usually gravity) */ nuclear@9: float drag; /* I don't think this needs to animate */ nuclear@6: nuclear@9: /* particle attributes */ nuclear@9: struct psys_particle_attributes part_attr; nuclear@6: nuclear@6: /* limits */ nuclear@6: int max_particles; nuclear@6: }; nuclear@6: nuclear@11: #ifdef __cplusplus nuclear@11: extern "C" { nuclear@11: #endif nuclear@11: nuclear@6: void psys_texture_loader(unsigned int (*load)(const char*, void*), void (*unload)(unsigned int, void*), void *cls); nuclear@6: nuclear@18: struct psys_attributes *psys_create_attr(void); nuclear@18: void psys_free_attr(struct psys_attributes *attr); nuclear@18: nuclear@6: int psys_init_attr(struct psys_attributes *attr); nuclear@6: void psys_destroy_attr(struct psys_attributes *attr); nuclear@6: nuclear@6: void psys_eval_attr(struct psys_attributes *attr, anm_time_t tm); nuclear@6: nuclear@6: int psys_load_attr(struct psys_attributes *attr, const char *fname); nuclear@6: int psys_load_attr_stream(struct psys_attributes *attr, FILE *fp); nuclear@6: nuclear@6: int psys_save_attr(struct psys_attributes *attr, const char *fname); nuclear@6: int psys_save_attr_stream(struct psys_attributes *attr, FILE *fp); nuclear@6: nuclear@11: #ifdef __cplusplus nuclear@11: } nuclear@6: #endif nuclear@11: nuclear@11: #endif /* PATTR_H_ */