3 #include "../generic/identifiable.h"
4 #include "../generic/managed.h"
6 #include "../loadable.h"
13 PARTICLE_EMITTER_POINT,
18 EmitterType type = PARTICLE_EMITTER_POINT;
19 Vec3 relative_position;
20 Vec3 direction = Vec3::up();
21 Vec3 dimensions =
Vec3(100, 100, 100);
23 std::pair<float, float> duration_range = std::make_pair(0.0f, 0.0f);
24 std::pair<float, float> repeat_delay_range = std::make_pair(0.0f, 0.0f);
25 std::pair<float, float> velocity_range = std::make_pair(1.0f, 1.0f);
26 std::pair<float, float> ttl_range = std::make_pair(5.0f, 5.0f);
29 std::vector<Color> colors = {Color::white()};
31 float emission_rate = 10.0f;
42 particle_script_(script) {}
47 do_manipulate(system, particles, particle_count, dt);
50 virtual void set_linear_curve(
float rate);
52 virtual void set_bell_curve(
float peak,
float deviation);
56 virtual void do_manipulate(
ParticleSystem* system,
Particle* particles, std::size_t particle_count,
float dt)
const = 0;
59 typedef std::function<float (
float,
float,
float)> CurveFunc;
64 typedef std::shared_ptr<Manipulator> ManipulatorPtr;
74 const static int MAX_EMITTER_COUNT = 8;
77 static const std::string FIRE;
83 std::size_t emitter_count()
const;
84 const Emitter* emitter(std::size_t i)
const;
87 Emitter* mutable_emitter(std::size_t i);
89 std::size_t manipulator_count()
const;
90 const Manipulator* manipulator(std::size_t i)
const;
92 std::size_t quota()
const;
95 float particle_width()
const;
96 float particle_height()
const;
98 bool cull_each()
const;
99 MaterialPtr material()
const;
100 bool has_repeating_emitters()
const;
102 void add_manipulator(std::shared_ptr<Manipulator> manipulator);
103 void clear_manipulators();
105 void push_emitter(
const Emitter& emitter);
106 void clear_emitters();
108 void set_quota(std::size_t quota);
110 void set_particle_width(
float w);
111 void set_particle_height(
float h);
112 void set_cull_each(
bool v);
113 void set_material(MaterialPtr material);
118 std::size_t quota_ = 0;
119 float particle_width_ = 100.0f;
120 float particle_height_ = 100.0f;
121 bool cull_each_ =
false;
123 std::array<Emitter, ParticleScript::MAX_EMITTER_COUNT> emitters_;
124 uint16_t emitter_count_ = 0;
126 std::vector<ManipulatorPtr> manipulators_;
127 MaterialPtr material_;