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