nuclear@0: #ifndef PSYSPP_H_ nuclear@0: #define PSYSPP_H_ nuclear@0: nuclear@0: #include "xform_node.h" nuclear@0: #include "texture.h" nuclear@0: #include nuclear@0: nuclear@0: class ParticleSystemAttributes { nuclear@0: private: nuclear@0: Texture *tex; nuclear@0: psys_attributes *psattr; nuclear@0: bool own_psattr; nuclear@0: nuclear@0: public: nuclear@0: ParticleSystemAttributes(); nuclear@0: ParticleSystemAttributes(psys_attributes *psattr); nuclear@0: ~ParticleSystemAttributes(); nuclear@0: nuclear@0: ParticleSystemAttributes(const ParticleSystemAttributes &rhs); nuclear@0: ParticleSystemAttributes &operator =(const ParticleSystemAttributes &rhs); nuclear@0: nuclear@0: bool load(const char *fname); nuclear@0: bool load(FILE *fp); nuclear@0: bool save(const char *fname) const; nuclear@0: bool save(FILE *fp) const; nuclear@0: nuclear@0: // particle attributes nuclear@0: void set_part_color(const Vector3 &color, float t = 0); nuclear@0: void set_part_alpha(float alpha, float t = 0); nuclear@0: void set_part_scale(float size, float t = 0); nuclear@0: nuclear@0: // emmiter attributes nuclear@0: void set_texture(Texture *tex); nuclear@0: Texture *get_texture() const; nuclear@0: nuclear@0: void set_spawn_range(const Vector3 &range, long tm = 0); nuclear@0: nuclear@0: void set_spawn_rate(float rate, long tm = 0); nuclear@0: float get_spawn_rate(long tm = 0) const; nuclear@0: nuclear@0: void set_life(float life, float range = 0.0, long tm = 0); nuclear@0: void set_size(float sz, float range = 0.0, long tm = 0); nuclear@0: void set_spawn_dir(const Vector3 &dir, const Vector3 &range = Vector3(0, 0, 0), long tm = 0); nuclear@0: nuclear@0: void set_gravity(const Vector3 &grav, long tm = 0); nuclear@0: void set_drag(float drag); nuclear@0: nuclear@0: void set_particle_limit(int lim); nuclear@0: }; nuclear@0: nuclear@0: class ParticleSystem : public XFormNode { nuclear@0: private: nuclear@0: psys_emitter psys; nuclear@0: ParticleSystemAttributes attr; nuclear@0: nuclear@0: long start_time; // subtracted from all time calculations nuclear@0: long last_upd_time; nuclear@0: nuclear@0: public: nuclear@0: ParticleSystem(); nuclear@0: ~ParticleSystem(); nuclear@0: nuclear@0: void set_start_time(long tm); nuclear@0: nuclear@0: bool is_active() const; nuclear@0: nuclear@0: ParticleSystemAttributes *get_attr(); nuclear@0: const ParticleSystemAttributes *get_attr() const; nuclear@0: nuclear@0: void set_attr(const ParticleSystemAttributes &pattr); nuclear@0: nuclear@0: bool load(const char *fname); nuclear@0: bool save(const char *fname) const; nuclear@0: nuclear@0: void update(long tm); nuclear@0: void draw() const; nuclear@0: }; nuclear@0: nuclear@0: #endif // PSYSPP_H_