rev |
line source |
nuclear@0
|
1 #ifndef PSYSPP_H_
|
nuclear@0
|
2 #define PSYSPP_H_
|
nuclear@0
|
3
|
nuclear@0
|
4 #include "xform_node.h"
|
nuclear@0
|
5 #include "texture.h"
|
nuclear@0
|
6 #include <psys/psys.h>
|
nuclear@0
|
7
|
nuclear@15
|
8 namespace goatgfx {
|
nuclear@15
|
9
|
nuclear@0
|
10 class ParticleSystemAttributes {
|
nuclear@0
|
11 private:
|
nuclear@0
|
12 Texture *tex;
|
nuclear@0
|
13 psys_attributes *psattr;
|
nuclear@0
|
14 bool own_psattr;
|
nuclear@0
|
15
|
nuclear@0
|
16 public:
|
nuclear@0
|
17 ParticleSystemAttributes();
|
nuclear@0
|
18 ParticleSystemAttributes(psys_attributes *psattr);
|
nuclear@0
|
19 ~ParticleSystemAttributes();
|
nuclear@0
|
20
|
nuclear@0
|
21 ParticleSystemAttributes(const ParticleSystemAttributes &rhs);
|
nuclear@0
|
22 ParticleSystemAttributes &operator =(const ParticleSystemAttributes &rhs);
|
nuclear@0
|
23
|
nuclear@0
|
24 bool load(const char *fname);
|
nuclear@0
|
25 bool load(FILE *fp);
|
nuclear@0
|
26 bool save(const char *fname) const;
|
nuclear@0
|
27 bool save(FILE *fp) const;
|
nuclear@0
|
28
|
nuclear@0
|
29 // particle attributes
|
nuclear@0
|
30 void set_part_color(const Vector3 &color, float t = 0);
|
nuclear@0
|
31 void set_part_alpha(float alpha, float t = 0);
|
nuclear@0
|
32 void set_part_scale(float size, float t = 0);
|
nuclear@0
|
33
|
nuclear@0
|
34 // emmiter attributes
|
nuclear@0
|
35 void set_texture(Texture *tex);
|
nuclear@0
|
36 Texture *get_texture() const;
|
nuclear@0
|
37
|
nuclear@0
|
38 void set_spawn_range(const Vector3 &range, long tm = 0);
|
nuclear@0
|
39
|
nuclear@0
|
40 void set_spawn_rate(float rate, long tm = 0);
|
nuclear@0
|
41 float get_spawn_rate(long tm = 0) const;
|
nuclear@0
|
42
|
nuclear@0
|
43 void set_life(float life, float range = 0.0, long tm = 0);
|
nuclear@0
|
44 void set_size(float sz, float range = 0.0, long tm = 0);
|
nuclear@0
|
45 void set_spawn_dir(const Vector3 &dir, const Vector3 &range = Vector3(0, 0, 0), long tm = 0);
|
nuclear@0
|
46
|
nuclear@0
|
47 void set_gravity(const Vector3 &grav, long tm = 0);
|
nuclear@0
|
48 void set_drag(float drag);
|
nuclear@0
|
49
|
nuclear@0
|
50 void set_particle_limit(int lim);
|
nuclear@0
|
51 };
|
nuclear@0
|
52
|
nuclear@0
|
53 class ParticleSystem : public XFormNode {
|
nuclear@0
|
54 private:
|
nuclear@0
|
55 psys_emitter psys;
|
nuclear@0
|
56 ParticleSystemAttributes attr;
|
nuclear@0
|
57
|
nuclear@0
|
58 long start_time; // subtracted from all time calculations
|
nuclear@0
|
59 long last_upd_time;
|
nuclear@0
|
60
|
nuclear@0
|
61 public:
|
nuclear@0
|
62 ParticleSystem();
|
nuclear@0
|
63 ~ParticleSystem();
|
nuclear@0
|
64
|
nuclear@0
|
65 void set_start_time(long tm);
|
nuclear@0
|
66
|
nuclear@0
|
67 bool is_active() const;
|
nuclear@0
|
68
|
nuclear@0
|
69 ParticleSystemAttributes *get_attr();
|
nuclear@0
|
70 const ParticleSystemAttributes *get_attr() const;
|
nuclear@0
|
71
|
nuclear@0
|
72 void set_attr(const ParticleSystemAttributes &pattr);
|
nuclear@0
|
73
|
nuclear@0
|
74 bool load(const char *fname);
|
nuclear@0
|
75 bool save(const char *fname) const;
|
nuclear@0
|
76
|
nuclear@0
|
77 void update(long tm);
|
nuclear@0
|
78 void draw() const;
|
nuclear@0
|
79 };
|
nuclear@0
|
80
|
nuclear@15
|
81 } // namespace goatgfx
|
nuclear@15
|
82
|
nuclear@0
|
83 #endif // PSYSPP_H_
|