summaryrefslogtreecommitdiff
path: root/scene/2d/particles_2d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/2d/particles_2d.cpp')
-rw-r--r--scene/2d/particles_2d.cpp814
1 files changed, 377 insertions, 437 deletions
diff --git a/scene/2d/particles_2d.cpp b/scene/2d/particles_2d.cpp
index 77ace0348a..c9d5bebe56 100644
--- a/scene/2d/particles_2d.cpp
+++ b/scene/2d/particles_2d.cpp
@@ -29,11 +29,9 @@
#include "particles_2d.h"
#include "scene/scene_string_names.h"
-
-
void ParticleAttractor2D::_notification(int p_what) {
- switch(p_what) {
+ switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
@@ -46,16 +44,16 @@ void ParticleAttractor2D::_notification(int p_what) {
return;
Vector2 pv;
- float dr = MIN(disable_radius,radius);
- for(int i=0;i<=32;i++) {
- Vector2 v(Math::sin(i/32.0*Math_PI*2),Math::cos(i/32.0*Math_PI*2));
- if (i>0) {
- draw_line(pv*radius,v*radius,Color(0,0,0.5,0.9));
- if (dr>0) {
- draw_line(pv*dr,v*dr,Color(0.5,0,0.0,0.9));
+ float dr = MIN(disable_radius, radius);
+ for (int i = 0; i <= 32; i++) {
+ Vector2 v(Math::sin(i / 32.0 * Math_PI * 2), Math::cos(i / 32.0 * Math_PI * 2));
+ if (i > 0) {
+ draw_line(pv * radius, v * radius, Color(0, 0, 0.5, 0.9));
+ if (dr > 0) {
+ draw_line(pv * dr, v * dr, Color(0.5, 0, 0.0, 0.9));
}
}
- pv=v;
+ pv = v;
}
} break;
@@ -72,7 +70,7 @@ void ParticleAttractor2D::_owner_exited() {
ERR_FAIL_COND(!owner);
owner->attractors.erase(this);
- owner=NULL;
+ owner = NULL;
}
void ParticleAttractor2D::_update_owner() {
@@ -93,63 +91,59 @@ void ParticleAttractor2D::_update_owner() {
_set_owner(pn);
}
-void ParticleAttractor2D::_set_owner(Particles2D* p_owner) {
+void ParticleAttractor2D::_set_owner(Particles2D *p_owner) {
- if (owner==p_owner)
+ if (owner == p_owner)
return;
if (owner) {
- owner->disconnect("tree_exited",this,"_owner_exited");
+ owner->disconnect("tree_exited", this, "_owner_exited");
owner->attractors.erase(this);
- owner=NULL;
+ owner = NULL;
}
- owner=p_owner;
+ owner = p_owner;
if (owner) {
- owner->connect("tree_exited",this,"_owner_exited",varray(),CONNECT_ONESHOT);
+ owner->connect("tree_exited", this, "_owner_exited", varray(), CONNECT_ONESHOT);
owner->attractors.insert(this);
}
}
void ParticleAttractor2D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_enabled","enabled"),&ParticleAttractor2D::set_enabled);
- ClassDB::bind_method(D_METHOD("is_enabled"),&ParticleAttractor2D::is_enabled);
-
- ClassDB::bind_method(D_METHOD("set_radius","radius"),&ParticleAttractor2D::set_radius);
- ClassDB::bind_method(D_METHOD("get_radius"),&ParticleAttractor2D::get_radius);
-
- ClassDB::bind_method(D_METHOD("set_disable_radius","radius"),&ParticleAttractor2D::set_disable_radius);
- ClassDB::bind_method(D_METHOD("get_disable_radius"),&ParticleAttractor2D::get_disable_radius);
+ ClassDB::bind_method(D_METHOD("set_enabled", "enabled"), &ParticleAttractor2D::set_enabled);
+ ClassDB::bind_method(D_METHOD("is_enabled"), &ParticleAttractor2D::is_enabled);
- ClassDB::bind_method(D_METHOD("set_gravity","gravity"),&ParticleAttractor2D::set_gravity);
- ClassDB::bind_method(D_METHOD("get_gravity"),&ParticleAttractor2D::get_gravity);
+ ClassDB::bind_method(D_METHOD("set_radius", "radius"), &ParticleAttractor2D::set_radius);
+ ClassDB::bind_method(D_METHOD("get_radius"), &ParticleAttractor2D::get_radius);
- ClassDB::bind_method(D_METHOD("set_absorption","absorption"),&ParticleAttractor2D::set_absorption);
- ClassDB::bind_method(D_METHOD("get_absorption"),&ParticleAttractor2D::get_absorption);
+ ClassDB::bind_method(D_METHOD("set_disable_radius", "radius"), &ParticleAttractor2D::set_disable_radius);
+ ClassDB::bind_method(D_METHOD("get_disable_radius"), &ParticleAttractor2D::get_disable_radius);
- ClassDB::bind_method(D_METHOD("set_particles_path","path"),&ParticleAttractor2D::set_particles_path);
- ClassDB::bind_method(D_METHOD("get_particles_path"),&ParticleAttractor2D::get_particles_path);
-
- ADD_PROPERTY(PropertyInfo(Variant::BOOL,"enabled"),"set_enabled","is_enabled");
- ADD_PROPERTY(PropertyInfo(Variant::REAL,"radius",PROPERTY_HINT_RANGE,"0.1,16000,0.1"),"set_radius","get_radius");
- ADD_PROPERTY(PropertyInfo(Variant::REAL,"disable_radius",PROPERTY_HINT_RANGE,"0.1,16000,0.1"),"set_disable_radius","get_disable_radius");
- ADD_PROPERTY(PropertyInfo(Variant::REAL,"gravity",PROPERTY_HINT_RANGE,"-512,512,0.01"),"set_gravity","get_gravity");
- ADD_PROPERTY(PropertyInfo(Variant::REAL,"absorption",PROPERTY_HINT_RANGE,"0,512,0.01"),"set_absorption","get_absorption");
- ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"particles_path",PROPERTY_HINT_RESOURCE_TYPE,"Particles2D"),"set_particles_path","get_particles_path");
+ ClassDB::bind_method(D_METHOD("set_gravity", "gravity"), &ParticleAttractor2D::set_gravity);
+ ClassDB::bind_method(D_METHOD("get_gravity"), &ParticleAttractor2D::get_gravity);
+ ClassDB::bind_method(D_METHOD("set_absorption", "absorption"), &ParticleAttractor2D::set_absorption);
+ ClassDB::bind_method(D_METHOD("get_absorption"), &ParticleAttractor2D::get_absorption);
+ ClassDB::bind_method(D_METHOD("set_particles_path", "path"), &ParticleAttractor2D::set_particles_path);
+ ClassDB::bind_method(D_METHOD("get_particles_path"), &ParticleAttractor2D::get_particles_path);
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "enabled"), "set_enabled", "is_enabled");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "radius", PROPERTY_HINT_RANGE, "0.1,16000,0.1"), "set_radius", "get_radius");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "disable_radius", PROPERTY_HINT_RANGE, "0.1,16000,0.1"), "set_disable_radius", "get_disable_radius");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "gravity", PROPERTY_HINT_RANGE, "-512,512,0.01"), "set_gravity", "get_gravity");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "absorption", PROPERTY_HINT_RANGE, "0,512,0.01"), "set_absorption", "get_absorption");
+ ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "particles_path", PROPERTY_HINT_RESOURCE_TYPE, "Particles2D"), "set_particles_path", "get_particles_path");
}
-
void ParticleAttractor2D::set_enabled(bool p_enabled) {
- enabled=p_enabled;
+ enabled = p_enabled;
}
-bool ParticleAttractor2D::is_enabled() const{
+bool ParticleAttractor2D::is_enabled() const {
return enabled;
}
@@ -177,8 +171,7 @@ float ParticleAttractor2D::get_disable_radius() const {
void ParticleAttractor2D::set_gravity(float p_gravity) {
- gravity=p_gravity;
-
+ gravity = p_gravity;
}
float ParticleAttractor2D::get_gravity() const {
@@ -187,8 +180,7 @@ float ParticleAttractor2D::get_gravity() const {
void ParticleAttractor2D::set_absorption(float p_absorption) {
- absorption=p_absorption;
-
+ absorption = p_absorption;
}
float ParticleAttractor2D::get_absorption() const {
@@ -197,7 +189,7 @@ float ParticleAttractor2D::get_absorption() const {
void ParticleAttractor2D::set_particles_path(NodePath p_path) {
- path=p_path;
+ path = p_path;
_update_owner();
update_configuration_warning();
}
@@ -217,13 +209,13 @@ String ParticleAttractor2D::get_configuration_warning() const {
ParticleAttractor2D::ParticleAttractor2D() {
- owner=NULL;
- radius=50;
- disable_radius=0;
- gravity=100;
- absorption=0;
- path=String("..");
- enabled=true;
+ owner = NULL;
+ radius = 50;
+ disable_radius = 0;
+ gravity = 100;
+ absorption = 0;
+ path = String("..");
+ enabled = true;
}
/****************************************/
@@ -236,12 +228,12 @@ _FORCE_INLINE_ static float _rand_from_seed(uint64_t *seed) {
void Particles2D::_process_particles(float p_delta) {
- if (particles.size()==0 || lifetime==0)
+ if (particles.size() == 0 || lifetime == 0)
return;
- p_delta*=time_scale;
+ p_delta *= time_scale;
- float frame_time=p_delta;
+ float frame_time = p_delta;
if (emit_timeout > 0) {
time_to_live -= frame_time;
@@ -252,114 +244,110 @@ void Particles2D::_process_particles(float p_delta) {
};
};
- float next_time = time+frame_time;
+ float next_time = time + frame_time;
if (next_time > lifetime)
- next_time=Math::fmod(next_time,lifetime);
-
+ next_time = Math::fmod(next_time, lifetime);
- Particle *pdata=&particles[0];
- int particle_count=particles.size();
+ Particle *pdata = &particles[0];
+ int particle_count = particles.size();
Transform2D xform;
if (!local_space)
- xform=get_global_transform();
+ xform = get_global_transform();
- active_count=0;
+ active_count = 0;
PoolVector<Point2>::Read r;
- int emission_point_count=0;
+ int emission_point_count = 0;
if (emission_points.size()) {
- emission_point_count=emission_points.size();
- r=emission_points.read();
+ emission_point_count = emission_points.size();
+ r = emission_points.read();
}
- int attractor_count=0;
- AttractorCache *attractor_ptr=NULL;
+ int attractor_count = 0;
+ AttractorCache *attractor_ptr = NULL;
if (attractors.size()) {
- if (attractors.size()!=attractor_cache.size()) {
+ if (attractors.size() != attractor_cache.size()) {
attractor_cache.resize(attractors.size());
}
- int idx=0;
+ int idx = 0;
Transform2D m;
if (local_space) {
- m= get_global_transform().affine_inverse();
+ m = get_global_transform().affine_inverse();
}
- for (Set<ParticleAttractor2D*>::Element *E=attractors.front();E;E=E->next()) {
+ for (Set<ParticleAttractor2D *>::Element *E = attractors.front(); E; E = E->next()) {
- attractor_cache[idx].pos=m.xform( E->get()->get_global_position() );
- attractor_cache[idx].attractor=E->get();
+ attractor_cache[idx].pos = m.xform(E->get()->get_global_position());
+ attractor_cache[idx].attractor = E->get();
idx++;
}
- attractor_ptr=attractor_cache.ptr();
- attractor_count=attractor_cache.size();
+ attractor_ptr = attractor_cache.ptr();
+ attractor_count = attractor_cache.size();
}
- for(int i=0;i<particle_count;i++) {
+ for (int i = 0; i < particle_count; i++) {
- Particle &p=pdata[i];
+ Particle &p = pdata[i];
float restart_time = (i * lifetime / particle_count) * explosiveness;
- bool restart=false;
+ bool restart = false;
- if ( next_time < time ) {
+ if (next_time < time) {
- if (restart_time > time || restart_time < next_time )
- restart=true;
+ if (restart_time > time || restart_time < next_time)
+ restart = true;
- } else if (restart_time > time && restart_time < next_time ) {
- restart=true;
+ } else if (restart_time > time && restart_time < next_time) {
+ restart = true;
}
if (restart) {
-
if (emitting) {
- p.pos=emissor_offset;
+ p.pos = emissor_offset;
if (emission_point_count) {
-
- Vector2 ep = r[Math::rand()%emission_point_count];
+ Vector2 ep = r[Math::rand() % emission_point_count];
if (!local_space) {
- p.pos=xform.xform(p.pos+ep*extents);
+ p.pos = xform.xform(p.pos + ep * extents);
} else {
- p.pos+=ep*extents;
+ p.pos += ep * extents;
}
} else {
if (!local_space) {
- p.pos=xform.xform(p.pos+Vector2(Math::random(-extents.x,extents.x),Math::random(-extents.y,extents.y)));
+ p.pos = xform.xform(p.pos + Vector2(Math::random(-extents.x, extents.x), Math::random(-extents.y, extents.y)));
} else {
- p.pos+=Vector2(Math::random(-extents.x,extents.x),Math::random(-extents.y,extents.y));
+ p.pos += Vector2(Math::random(-extents.x, extents.x), Math::random(-extents.y, extents.y));
}
}
- p.seed=Math::rand() % 12345678;
- uint64_t rand_seed=p.seed*(i+1);
+ p.seed = Math::rand() % 12345678;
+ uint64_t rand_seed = p.seed * (i + 1);
- float angle = Math::deg2rad(param[PARAM_DIRECTION]+_rand_from_seed(&rand_seed)*param[PARAM_SPREAD]);
+ float angle = Math::deg2rad(param[PARAM_DIRECTION] + _rand_from_seed(&rand_seed) * param[PARAM_SPREAD]);
- p.velocity=Vector2( Math::sin(angle), Math::cos(angle) );
+ p.velocity = Vector2(Math::sin(angle), Math::cos(angle));
if (!local_space) {
p.velocity = xform.basis_xform(p.velocity).normalized();
}
- p.velocity*=param[PARAM_LINEAR_VELOCITY]+param[PARAM_LINEAR_VELOCITY]*_rand_from_seed(&rand_seed)*randomness[PARAM_LINEAR_VELOCITY];
- p.velocity+=initial_velocity;
- p.active=true;
- p.rot=Math::deg2rad(param[PARAM_INITIAL_ANGLE]+param[PARAM_INITIAL_ANGLE]*randomness[PARAM_INITIAL_ANGLE]*_rand_from_seed(&rand_seed));
+ p.velocity *= param[PARAM_LINEAR_VELOCITY] + param[PARAM_LINEAR_VELOCITY] * _rand_from_seed(&rand_seed) * randomness[PARAM_LINEAR_VELOCITY];
+ p.velocity += initial_velocity;
+ p.active = true;
+ p.rot = Math::deg2rad(param[PARAM_INITIAL_ANGLE] + param[PARAM_INITIAL_ANGLE] * randomness[PARAM_INITIAL_ANGLE] * _rand_from_seed(&rand_seed));
active_count++;
- p.frame=Math::fmod(param[PARAM_ANIM_INITIAL_POS]+randomness[PARAM_ANIM_INITIAL_POS]*_rand_from_seed(&rand_seed),1.0f);
-
+ p.frame = Math::fmod(param[PARAM_ANIM_INITIAL_POS] + randomness[PARAM_ANIM_INITIAL_POS] * _rand_from_seed(&rand_seed), 1.0f);
} else {
- p.active=false;
+ p.active = false;
}
} else {
@@ -367,136 +355,122 @@ void Particles2D::_process_particles(float p_delta) {
if (!p.active)
continue;
- uint64_t rand_seed=p.seed*(i+1);
+ uint64_t rand_seed = p.seed * (i + 1);
Vector2 force;
//apply gravity
- float gravity_dir = Math::deg2rad( param[PARAM_GRAVITY_DIRECTION]+180*randomness[PARAM_GRAVITY_DIRECTION]*_rand_from_seed(&rand_seed));
- force+=Vector2( Math::sin(gravity_dir), Math::cos(gravity_dir) ) * (param[PARAM_GRAVITY_STRENGTH]+param[PARAM_GRAVITY_STRENGTH]*randomness[PARAM_GRAVITY_STRENGTH]*_rand_from_seed(&rand_seed));
+ float gravity_dir = Math::deg2rad(param[PARAM_GRAVITY_DIRECTION] + 180 * randomness[PARAM_GRAVITY_DIRECTION] * _rand_from_seed(&rand_seed));
+ force += Vector2(Math::sin(gravity_dir), Math::cos(gravity_dir)) * (param[PARAM_GRAVITY_STRENGTH] + param[PARAM_GRAVITY_STRENGTH] * randomness[PARAM_GRAVITY_STRENGTH] * _rand_from_seed(&rand_seed));
//apply radial
Vector2 rvec = (p.pos - emissor_offset).normalized();
- force+=rvec*(param[PARAM_RADIAL_ACCEL]+param[PARAM_RADIAL_ACCEL]*randomness[PARAM_RADIAL_ACCEL]*_rand_from_seed(&rand_seed));
+ force += rvec * (param[PARAM_RADIAL_ACCEL] + param[PARAM_RADIAL_ACCEL] * randomness[PARAM_RADIAL_ACCEL] * _rand_from_seed(&rand_seed));
//apply orbit
- float orbitvel = (param[PARAM_ORBIT_VELOCITY]+param[PARAM_ORBIT_VELOCITY]*randomness[PARAM_ORBIT_VELOCITY]*_rand_from_seed(&rand_seed));
- if (orbitvel!=0) {
+ float orbitvel = (param[PARAM_ORBIT_VELOCITY] + param[PARAM_ORBIT_VELOCITY] * randomness[PARAM_ORBIT_VELOCITY] * _rand_from_seed(&rand_seed));
+ if (orbitvel != 0) {
Vector2 rel = p.pos - xform.elements[2];
- Transform2D rot(orbitvel*frame_time,Vector2());
+ Transform2D rot(orbitvel * frame_time, Vector2());
p.pos = rot.xform(rel) + xform.elements[2];
-
}
- Vector2 tvec=rvec.tangent();
- force+=tvec*(param[PARAM_TANGENTIAL_ACCEL]+param[PARAM_TANGENTIAL_ACCEL]*randomness[PARAM_TANGENTIAL_ACCEL]*_rand_from_seed(&rand_seed));
+ Vector2 tvec = rvec.tangent();
+ force += tvec * (param[PARAM_TANGENTIAL_ACCEL] + param[PARAM_TANGENTIAL_ACCEL] * randomness[PARAM_TANGENTIAL_ACCEL] * _rand_from_seed(&rand_seed));
- for(int j=0;j<attractor_count;j++) {
+ for (int j = 0; j < attractor_count; j++) {
Vector2 vec = (attractor_ptr[j].pos - p.pos);
float vl = vec.length();
- if (!attractor_ptr[j].attractor->enabled || vl==0 || vl > attractor_ptr[j].attractor->radius)
+ if (!attractor_ptr[j].attractor->enabled || vl == 0 || vl > attractor_ptr[j].attractor->radius)
continue;
-
-
- force+=vec*attractor_ptr[j].attractor->gravity;
+ force += vec * attractor_ptr[j].attractor->gravity;
float fvl = p.velocity.length();
if (fvl && attractor_ptr[j].attractor->absorption) {
Vector2 target = vec.normalized();
- p.velocity = p.velocity.normalized().linear_interpolate(target,MIN(frame_time*attractor_ptr[j].attractor->absorption,1))*fvl;
+ p.velocity = p.velocity.normalized().linear_interpolate(target, MIN(frame_time * attractor_ptr[j].attractor->absorption, 1)) * fvl;
}
if (attractor_ptr[j].attractor->disable_radius && vl < attractor_ptr[j].attractor->disable_radius) {
- p.active=false;
+ p.active = false;
}
}
- p.velocity+=force*frame_time;
+ p.velocity += force * frame_time;
if (param[PARAM_DAMPING]) {
- float dmp = param[PARAM_DAMPING]+param[PARAM_DAMPING]*randomness[PARAM_DAMPING]*_rand_from_seed(&rand_seed);
+ float dmp = param[PARAM_DAMPING] + param[PARAM_DAMPING] * randomness[PARAM_DAMPING] * _rand_from_seed(&rand_seed);
float v = p.velocity.length();
v -= dmp * frame_time;
- if (v<=0) {
- p.velocity=Vector2();
+ if (v <= 0) {
+ p.velocity = Vector2();
} else {
- p.velocity=p.velocity.normalized() * v;
+ p.velocity = p.velocity.normalized() * v;
}
-
}
- p.pos+=p.velocity*frame_time;
- p.rot+=Math::lerp(param[PARAM_SPIN_VELOCITY],param[PARAM_SPIN_VELOCITY]*randomness[PARAM_SPIN_VELOCITY]*_rand_from_seed(&rand_seed),randomness[PARAM_SPIN_VELOCITY])*frame_time;
- float anim_spd=param[PARAM_ANIM_SPEED_SCALE]+param[PARAM_ANIM_SPEED_SCALE]*randomness[PARAM_ANIM_SPEED_SCALE]*_rand_from_seed(&rand_seed);
- p.frame=Math::fposmod(p.frame+(frame_time/lifetime)*anim_spd,1.0f);
+ p.pos += p.velocity * frame_time;
+ p.rot += Math::lerp(param[PARAM_SPIN_VELOCITY], param[PARAM_SPIN_VELOCITY] * randomness[PARAM_SPIN_VELOCITY] * _rand_from_seed(&rand_seed), randomness[PARAM_SPIN_VELOCITY]) * frame_time;
+ float anim_spd = param[PARAM_ANIM_SPEED_SCALE] + param[PARAM_ANIM_SPEED_SCALE] * randomness[PARAM_ANIM_SPEED_SCALE] * _rand_from_seed(&rand_seed);
+ p.frame = Math::fposmod(p.frame + (frame_time / lifetime) * anim_spd, 1.0f);
active_count++;
-
}
-
-
}
-
-
- time=Math::fmod( time+frame_time, lifetime );
- if (!emitting && active_count==0) {
+ time = Math::fmod(time + frame_time, lifetime);
+ if (!emitting && active_count == 0) {
emit_signal(SceneStringNames::get_singleton()->emission_finished);
set_process(false);
set_fixed_process(false);
}
update();
-
-
}
-
void Particles2D::_notification(int p_what) {
- switch(p_what) {
+ switch (p_what) {
case NOTIFICATION_PROCESS: {
- _process_particles( get_process_delta_time() );
+ _process_particles(get_process_delta_time());
} break;
case NOTIFICATION_FIXED_PROCESS: {
- _process_particles( get_fixed_process_delta_time() );
+ _process_particles(get_fixed_process_delta_time());
} break;
case NOTIFICATION_ENTER_TREE: {
- float ppt=preprocess;
- while(ppt>0) {
+ float ppt = preprocess;
+ while (ppt > 0) {
_process_particles(0.1);
- ppt-=0.1;
+ ppt -= 0.1;
}
} break;
case NOTIFICATION_DRAW: {
-
- if (particles.size()==0 || lifetime==0)
+ if (particles.size() == 0 || lifetime == 0)
return;
- RID ci=get_canvas_item();
- Size2 size(1,1);
+ RID ci = get_canvas_item();
+ Size2 size(1, 1);
Point2 center;
- int total_frames=1;
+ int total_frames = 1;
if (!texture.is_null()) {
- size=texture->get_size();
- size.x/=h_frames;
- size.y/=v_frames;
- total_frames=h_frames*v_frames;
+ size = texture->get_size();
+ size.x /= h_frames;
+ size.y /= v_frames;
+ total_frames = h_frames * v_frames;
}
+ float time_pos = (time / lifetime);
- float time_pos=(time/lifetime);
-
- Particle *pdata=&particles[0];
- int particle_count=particles.size();
+ Particle *pdata = &particles[0];
+ int particle_count = particles.size();
RID texrid;
@@ -505,64 +479,61 @@ void Particles2D::_notification(int p_what) {
Transform2D invxform;
if (!local_space)
- invxform=get_global_transform().affine_inverse();
+ invxform = get_global_transform().affine_inverse();
int start_particle = (int)(time * (float)particle_count / lifetime);
- for (int id=0;id<particle_count;++id) {
+ for (int id = 0; id < particle_count; ++id) {
int i = start_particle + id;
if (i >= particle_count) {
i -= particle_count;
}
- Particle &p=pdata[i];
+ Particle &p = pdata[i];
if (!p.active)
continue;
- float ptime = ((float)i / particle_count)*explosiveness;
+ float ptime = ((float)i / particle_count) * explosiveness;
- if (ptime<time_pos)
- ptime=time_pos-ptime;
+ if (ptime < time_pos)
+ ptime = time_pos - ptime;
else
- ptime=(1.0-ptime)+time_pos;
+ ptime = (1.0 - ptime) + time_pos;
- uint64_t rand_seed=p.seed*(i+1);
+ uint64_t rand_seed = p.seed * (i + 1);
Color color;
- if(color_ramp.is_valid())
- {
+ if (color_ramp.is_valid()) {
color = color_ramp->get_color_at_offset(ptime);
- } else
- {
+ } else {
color = default_color;
}
-
{
- float huerand=_rand_from_seed(&rand_seed);
+ float huerand = _rand_from_seed(&rand_seed);
float huerot = param[PARAM_HUE_VARIATION] + randomness[PARAM_HUE_VARIATION] * huerand;
if (Math::abs(huerot) > CMP_EPSILON) {
- float h=color.get_h();
- float s=color.get_s();
- float v=color.get_v();
- float a=color.a;
+ float h = color.get_h();
+ float s = color.get_s();
+ float v = color.get_v();
+ float a = color.a;
//float preh=h;
- h+=huerot;
- h=Math::abs(Math::fposmod(h,1.0f));
+ h += huerot;
+ h = Math::abs(Math::fposmod(h, 1.0f));
//print_line("rand: "+rtos(randomness[PARAM_HUE_VARIATION])+" rand: "+rtos(huerand));
//print_line(itos(i)+":hue: "+rtos(preh)+" + "+rtos(huerot)+" = "+rtos(h));
- color.set_hsv(h,s,v);
- color.a=a;
+ color.set_hsv(h, s, v);
+ color.a = a;
}
}
- float initial_size = param[PARAM_INITIAL_SIZE]+param[PARAM_INITIAL_SIZE]*_rand_from_seed(&rand_seed)*randomness[PARAM_INITIAL_SIZE];
- float final_size = param[PARAM_FINAL_SIZE]+param[PARAM_FINAL_SIZE]*_rand_from_seed(&rand_seed)*randomness[PARAM_FINAL_SIZE];
+ float initial_size = param[PARAM_INITIAL_SIZE] + param[PARAM_INITIAL_SIZE] * _rand_from_seed(&rand_seed) * randomness[PARAM_INITIAL_SIZE];
+ float final_size = param[PARAM_FINAL_SIZE] + param[PARAM_FINAL_SIZE] * _rand_from_seed(&rand_seed) * randomness[PARAM_FINAL_SIZE];
- float size_mult=initial_size*(1.0-ptime) + final_size*ptime;
+ float size_mult = initial_size * (1.0 - ptime) + final_size * ptime;
//Size2 rectsize=size * size_mult;
//rectsize=rectsize.floor();
@@ -574,57 +545,49 @@ void Particles2D::_notification(int p_what) {
if (p.rot) {
xform.set_rotation(p.rot);
- xform.translate(-size*size_mult/2.0);
- xform.elements[2]+=p.pos;
+ xform.translate(-size * size_mult / 2.0);
+ xform.elements[2] += p.pos;
} else {
- xform.elements[2]=-size*size_mult/2.0;
- xform.elements[2]+=p.pos;
+ xform.elements[2] = -size * size_mult / 2.0;
+ xform.elements[2] += p.pos;
}
if (!local_space) {
xform = invxform * xform;
}
+ xform.scale_basis(Size2(size_mult, size_mult));
- xform.scale_basis(Size2(size_mult,size_mult));
-
-
- VisualServer::get_singleton()->canvas_item_add_set_transform(ci,xform);
-
+ VisualServer::get_singleton()->canvas_item_add_set_transform(ci, xform);
if (texrid.is_valid()) {
Rect2 src_rect;
- src_rect.size=size;
+ src_rect.size = size;
- if (total_frames>1) {
- int frame = Math::fast_ftoi(Math::floor(p.frame*total_frames)) % total_frames;
- src_rect.pos.x = size.x * (frame%h_frames);
- src_rect.pos.y = size.y * (frame/h_frames);
+ if (total_frames > 1) {
+ int frame = Math::fast_ftoi(Math::floor(p.frame * total_frames)) % total_frames;
+ src_rect.pos.x = size.x * (frame % h_frames);
+ src_rect.pos.y = size.y * (frame / h_frames);
}
if (flip_h)
- src_rect.size.x=-src_rect.size.x;
+ src_rect.size.x = -src_rect.size.x;
if (flip_v)
- src_rect.size.y=-src_rect.size.y;
+ src_rect.size.y = -src_rect.size.y;
- texture->draw_rect_region(ci,Rect2(Point2(),size),src_rect,color);
+ texture->draw_rect_region(ci, Rect2(Point2(), size), src_rect, color);
//VisualServer::get_singleton()->canvas_item_add_texture_rect(ci,r,texrid,false,color);
} else {
- VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2(),size),color);
-
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(), size), color);
}
-
}
-
} break;
-
}
-
}
-static const char* _particlesframe_property_names[Particles2D::PARAM_MAX]={
+static const char *_particlesframe_property_names[Particles2D::PARAM_MAX] = {
"params/direction",
"params/spread",
"params/linear_velocity",
@@ -643,7 +606,7 @@ static const char* _particlesframe_property_names[Particles2D::PARAM_MAX]={
"params/anim_initial_pos",
};
-static const char* _particlesframe_property_rnames[Particles2D::PARAM_MAX]={
+static const char *_particlesframe_property_rnames[Particles2D::PARAM_MAX] = {
"randomness/direction",
"randomness/spread",
"randomness/linear_velocity",
@@ -662,7 +625,7 @@ static const char* _particlesframe_property_rnames[Particles2D::PARAM_MAX]={
"randomness/anim_initial_pos",
};
-static const char* _particlesframe_property_ranges[Particles2D::PARAM_MAX]={
+static const char *_particlesframe_property_ranges[Particles2D::PARAM_MAX] = {
"0,360,0.01",
"0,180,0.01",
"-1024,1024,0.01",
@@ -681,21 +644,20 @@ static const char* _particlesframe_property_ranges[Particles2D::PARAM_MAX]={
"0,1,0.01",
};
-
void Particles2D::set_emitting(bool p_emitting) {
- if (emitting==p_emitting)
+ if (emitting == p_emitting)
return;
if (p_emitting) {
- if (active_count==0)
- time=0;
- set_process(process_mode==PROCESS_IDLE);
- set_fixed_process(process_mode==PROCESS_FIXED);
+ if (active_count == 0)
+ time = 0;
+ set_process(process_mode == PROCESS_IDLE);
+ set_fixed_process(process_mode == PROCESS_FIXED);
time_to_live = emit_timeout;
};
- emitting=p_emitting;
+ emitting = p_emitting;
_change_notify("config/emitting");
}
@@ -706,10 +668,10 @@ bool Particles2D::is_emitting() const {
void Particles2D::set_process_mode(ProcessMode p_mode) {
- process_mode=p_mode;
- const bool should_process=emitting || active_count!=0;
- set_process(should_process && process_mode==PROCESS_IDLE);
- set_fixed_process(should_process && process_mode==PROCESS_FIXED);
+ process_mode = p_mode;
+ const bool should_process = emitting || active_count != 0;
+ set_process(should_process && process_mode == PROCESS_IDLE);
+ set_fixed_process(should_process && process_mode == PROCESS_FIXED);
}
Particles2D::ProcessMode Particles2D::get_process_mode() const {
@@ -719,7 +681,7 @@ Particles2D::ProcessMode Particles2D::get_process_mode() const {
void Particles2D::set_amount(int p_amount) {
- ERR_FAIL_INDEX(p_amount,1024+1);
+ ERR_FAIL_INDEX(p_amount, 1024 + 1);
particles.resize(p_amount);
}
@@ -741,9 +703,9 @@ float Particles2D::get_emit_timeout() const {
void Particles2D::set_lifetime(float p_lifetime) {
- ERR_FAIL_INDEX(p_lifetime,3600+1);
+ ERR_FAIL_INDEX(p_lifetime, 3600 + 1);
- lifetime=p_lifetime;
+ lifetime = p_lifetime;
}
float Particles2D::get_lifetime() const {
@@ -752,7 +714,7 @@ float Particles2D::get_lifetime() const {
void Particles2D::set_time_scale(float p_time_scale) {
- time_scale=p_time_scale;
+ time_scale = p_time_scale;
}
float Particles2D::get_time_scale() const {
@@ -761,42 +723,39 @@ float Particles2D::get_time_scale() const {
void Particles2D::set_pre_process_time(float p_pre_process_time) {
- preprocess=p_pre_process_time;
+ preprocess = p_pre_process_time;
}
-float Particles2D::get_pre_process_time() const{
+float Particles2D::get_pre_process_time() const {
return preprocess;
}
-
void Particles2D::set_param(Parameter p_param, float p_value) {
- ERR_FAIL_INDEX(p_param,PARAM_MAX);
- param[p_param]=p_value;
+ ERR_FAIL_INDEX(p_param, PARAM_MAX);
+ param[p_param] = p_value;
}
float Particles2D::get_param(Parameter p_param) const {
- ERR_FAIL_INDEX_V(p_param,PARAM_MAX,0);
+ ERR_FAIL_INDEX_V(p_param, PARAM_MAX, 0);
return param[p_param];
}
void Particles2D::set_randomness(Parameter p_param, float p_value) {
- ERR_FAIL_INDEX(p_param,PARAM_MAX);
- randomness[p_param]=p_value;
-
+ ERR_FAIL_INDEX(p_param, PARAM_MAX);
+ randomness[p_param] = p_value;
}
-float Particles2D::get_randomness(Parameter p_param) const {
+float Particles2D::get_randomness(Parameter p_param) const {
- ERR_FAIL_INDEX_V(p_param,PARAM_MAX,0);
+ ERR_FAIL_INDEX_V(p_param, PARAM_MAX, 0);
return randomness[p_param];
-
}
-void Particles2D::set_texture(const Ref<Texture>& p_texture) {
+void Particles2D::set_texture(const Ref<Texture> &p_texture) {
- texture=p_texture;
+ texture = p_texture;
}
Ref<Texture> Particles2D::get_texture() const {
@@ -804,7 +763,7 @@ Ref<Texture> Particles2D::get_texture() const {
return texture;
}
-void Particles2D::set_color(const Color& p_color) {
+void Particles2D::set_color(const Color &p_color) {
default_color = p_color;
}
@@ -814,10 +773,9 @@ Color Particles2D::get_color() const {
return default_color;
}
+void Particles2D::set_color_ramp(const Ref<ColorRamp> &p_color_ramp) {
-void Particles2D::set_color_ramp(const Ref<ColorRamp>& p_color_ramp) {
-
- color_ramp=p_color_ramp;
+ color_ramp = p_color_ramp;
}
Ref<ColorRamp> Particles2D::get_color_ramp() const {
@@ -825,9 +783,9 @@ Ref<ColorRamp> Particles2D::get_color_ramp() const {
return color_ramp;
}
-void Particles2D::set_emissor_offset(const Point2& p_offset) {
+void Particles2D::set_emissor_offset(const Point2 &p_offset) {
- emissor_offset=p_offset;
+ emissor_offset = p_offset;
}
Point2 Particles2D::get_emissor_offset() const {
@@ -835,10 +793,9 @@ Point2 Particles2D::get_emissor_offset() const {
return emissor_offset;
}
-
void Particles2D::set_use_local_space(bool p_use) {
- local_space=p_use;
+ local_space = p_use;
}
bool Particles2D::is_using_local_space() const {
@@ -851,12 +808,10 @@ void Particles2D::set_color_phases(int p_phases) {
//Create color ramp if we have 2 or more phases.
//Otherwise first phase phase will be assigned to default color.
- if(p_phases > 1 && color_ramp.is_null())
- {
- color_ramp = Ref<ColorRamp>(memnew (ColorRamp()));
+ if (p_phases > 1 && color_ramp.is_null()) {
+ color_ramp = Ref<ColorRamp>(memnew(ColorRamp()));
}
- if(color_ramp.is_valid())
- {
+ if (color_ramp.is_valid()) {
color_ramp->get_points().resize(p_phases);
}
}
@@ -864,24 +819,21 @@ void Particles2D::set_color_phases(int p_phases) {
//Deprecated.
int Particles2D::get_color_phases() const {
- if(color_ramp.is_valid())
- {
+ if (color_ramp.is_valid()) {
return color_ramp->get_points_count();
}
return 0;
}
//Deprecated. Converts color phases to color ramp
-void Particles2D::set_color_phase_color(int p_phase,const Color& p_color) {
+void Particles2D::set_color_phase_color(int p_phase, const Color &p_color) {
- ERR_FAIL_INDEX(p_phase,MAX_COLOR_PHASES);
- if(color_ramp.is_valid())
- {
- if(color_ramp->get_points_count() > p_phase)
+ ERR_FAIL_INDEX(p_phase, MAX_COLOR_PHASES);
+ if (color_ramp.is_valid()) {
+ if (color_ramp->get_points_count() > p_phase)
color_ramp->set_color(p_phase, p_color);
- } else
- {
- if(p_phase == 0)
+ } else {
+ if (p_phase == 0)
default_color = p_color;
}
}
@@ -889,20 +841,18 @@ void Particles2D::set_color_phase_color(int p_phase,const Color& p_color) {
//Deprecated.
Color Particles2D::get_color_phase_color(int p_phase) const {
- ERR_FAIL_INDEX_V(p_phase,MAX_COLOR_PHASES,Color());
- if(color_ramp.is_valid())
- {
+ ERR_FAIL_INDEX_V(p_phase, MAX_COLOR_PHASES, Color());
+ if (color_ramp.is_valid()) {
return color_ramp->get_color(p_phase);
}
- return Color(0,0,0,1);
+ return Color(0, 0, 0, 1);
}
//Deprecated. Converts color phases to color ramp
-void Particles2D::set_color_phase_pos(int p_phase,float p_pos) {
- ERR_FAIL_INDEX(p_phase,MAX_COLOR_PHASES);
- ERR_FAIL_COND(p_pos<0.0 || p_pos>1.0);
- if(color_ramp.is_valid() && color_ramp->get_points_count() > p_phase)
- {
+void Particles2D::set_color_phase_pos(int p_phase, float p_pos) {
+ ERR_FAIL_INDEX(p_phase, MAX_COLOR_PHASES);
+ ERR_FAIL_COND(p_pos < 0.0 || p_pos > 1.0);
+ if (color_ramp.is_valid() && color_ramp->get_points_count() > p_phase) {
return color_ramp->set_offset(p_phase, p_pos);
}
}
@@ -910,17 +860,16 @@ void Particles2D::set_color_phase_pos(int p_phase,float p_pos) {
//Deprecated.
float Particles2D::get_color_phase_pos(int p_phase) const {
- ERR_FAIL_INDEX_V(p_phase,MAX_COLOR_PHASES,0);
- if(color_ramp.is_valid())
- {
+ ERR_FAIL_INDEX_V(p_phase, MAX_COLOR_PHASES, 0);
+ if (color_ramp.is_valid()) {
return color_ramp->get_offset(p_phase);
}
return 0;
}
-void Particles2D::set_emission_half_extents(const Vector2& p_extents) {
+void Particles2D::set_emission_half_extents(const Vector2 &p_extents) {
- extents=p_extents;
+ extents = p_extents;
}
Vector2 Particles2D::get_emission_half_extents() const {
@@ -928,278 +877,269 @@ Vector2 Particles2D::get_emission_half_extents() const {
return extents;
}
-void Particles2D::set_initial_velocity(const Vector2& p_velocity) {
-
+void Particles2D::set_initial_velocity(const Vector2 &p_velocity) {
- initial_velocity=p_velocity;
+ initial_velocity = p_velocity;
}
-Vector2 Particles2D::get_initial_velocity() const{
+Vector2 Particles2D::get_initial_velocity() const {
return initial_velocity;
}
-
void Particles2D::pre_process(float p_delta) {
_process_particles(p_delta);
}
-
void Particles2D::set_explosiveness(float p_value) {
- explosiveness=p_value;
+ explosiveness = p_value;
}
-float Particles2D::get_explosiveness() const{
+float Particles2D::get_explosiveness() const {
return explosiveness;
}
void Particles2D::set_flip_h(bool p_flip) {
- flip_h=p_flip;
+ flip_h = p_flip;
}
-bool Particles2D::is_flipped_h() const{
+bool Particles2D::is_flipped_h() const {
return flip_h;
}
-void Particles2D::set_flip_v(bool p_flip){
+void Particles2D::set_flip_v(bool p_flip) {
- flip_v=p_flip;
+ flip_v = p_flip;
}
-bool Particles2D::is_flipped_v() const{
+bool Particles2D::is_flipped_v() const {
return flip_v;
}
void Particles2D::set_h_frames(int p_frames) {
- ERR_FAIL_COND(p_frames<1);
- h_frames=p_frames;
+ ERR_FAIL_COND(p_frames < 1);
+ h_frames = p_frames;
}
-int Particles2D::get_h_frames() const{
+int Particles2D::get_h_frames() const {
return h_frames;
}
-void Particles2D::set_v_frames(int p_frames){
+void Particles2D::set_v_frames(int p_frames) {
- ERR_FAIL_COND(p_frames<1);
- v_frames=p_frames;
+ ERR_FAIL_COND(p_frames < 1);
+ v_frames = p_frames;
}
-int Particles2D::get_v_frames() const{
+int Particles2D::get_v_frames() const {
return v_frames;
}
+void Particles2D::set_emission_points(const PoolVector<Vector2> &p_points) {
-
-void Particles2D::set_emission_points(const PoolVector<Vector2>& p_points) {
-
- emission_points=p_points;
+ emission_points = p_points;
}
-PoolVector<Vector2> Particles2D::get_emission_points() const{
+PoolVector<Vector2> Particles2D::get_emission_points() const {
return emission_points;
}
void Particles2D::reset() {
- for(int i=0;i<particles.size();i++) {
- particles[i].active=false;
+ for (int i = 0; i < particles.size(); i++) {
+ particles[i].active = false;
}
- time=0;
- active_count=0;
+ time = 0;
+ active_count = 0;
}
void Particles2D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_emitting","active"),&Particles2D::set_emitting);
- ClassDB::bind_method(D_METHOD("is_emitting"),&Particles2D::is_emitting);
+ ClassDB::bind_method(D_METHOD("set_emitting", "active"), &Particles2D::set_emitting);
+ ClassDB::bind_method(D_METHOD("is_emitting"), &Particles2D::is_emitting);
- ClassDB::bind_method(D_METHOD("set_process_mode","mode"),&Particles2D::set_process_mode);
- ClassDB::bind_method(D_METHOD("get_process_mode"),&Particles2D::get_process_mode);
+ ClassDB::bind_method(D_METHOD("set_process_mode", "mode"), &Particles2D::set_process_mode);
+ ClassDB::bind_method(D_METHOD("get_process_mode"), &Particles2D::get_process_mode);
- ClassDB::bind_method(D_METHOD("set_amount","amount"),&Particles2D::set_amount);
- ClassDB::bind_method(D_METHOD("get_amount"),&Particles2D::get_amount);
+ ClassDB::bind_method(D_METHOD("set_amount", "amount"), &Particles2D::set_amount);
+ ClassDB::bind_method(D_METHOD("get_amount"), &Particles2D::get_amount);
- ClassDB::bind_method(D_METHOD("set_lifetime","lifetime"),&Particles2D::set_lifetime);
- ClassDB::bind_method(D_METHOD("get_lifetime"),&Particles2D::get_lifetime);
+ ClassDB::bind_method(D_METHOD("set_lifetime", "lifetime"), &Particles2D::set_lifetime);
+ ClassDB::bind_method(D_METHOD("get_lifetime"), &Particles2D::get_lifetime);
- ClassDB::bind_method(D_METHOD("set_time_scale","time_scale"),&Particles2D::set_time_scale);
- ClassDB::bind_method(D_METHOD("get_time_scale"),&Particles2D::get_time_scale);
+ ClassDB::bind_method(D_METHOD("set_time_scale", "time_scale"), &Particles2D::set_time_scale);
+ ClassDB::bind_method(D_METHOD("get_time_scale"), &Particles2D::get_time_scale);
- ClassDB::bind_method(D_METHOD("set_pre_process_time","time"),&Particles2D::set_pre_process_time);
- ClassDB::bind_method(D_METHOD("get_pre_process_time"),&Particles2D::get_pre_process_time);
+ ClassDB::bind_method(D_METHOD("set_pre_process_time", "time"), &Particles2D::set_pre_process_time);
+ ClassDB::bind_method(D_METHOD("get_pre_process_time"), &Particles2D::get_pre_process_time);
- ClassDB::bind_method(D_METHOD("set_emit_timeout","value"),&Particles2D::set_emit_timeout);
- ClassDB::bind_method(D_METHOD("get_emit_timeout"),&Particles2D::get_emit_timeout);
+ ClassDB::bind_method(D_METHOD("set_emit_timeout", "value"), &Particles2D::set_emit_timeout);
+ ClassDB::bind_method(D_METHOD("get_emit_timeout"), &Particles2D::get_emit_timeout);
- ClassDB::bind_method(D_METHOD("set_param","param","value"),&Particles2D::set_param);
- ClassDB::bind_method(D_METHOD("get_param","param"),&Particles2D::get_param);
+ ClassDB::bind_method(D_METHOD("set_param", "param", "value"), &Particles2D::set_param);
+ ClassDB::bind_method(D_METHOD("get_param", "param"), &Particles2D::get_param);
- ClassDB::bind_method(D_METHOD("set_randomness","param","value"),&Particles2D::set_randomness);
- ClassDB::bind_method(D_METHOD("get_randomness","param"),&Particles2D::get_randomness);
+ ClassDB::bind_method(D_METHOD("set_randomness", "param", "value"), &Particles2D::set_randomness);
+ ClassDB::bind_method(D_METHOD("get_randomness", "param"), &Particles2D::get_randomness);
- ClassDB::bind_method(D_METHOD("set_texture:Texture","texture"),&Particles2D::set_texture);
- ClassDB::bind_method(D_METHOD("get_texture:Texture"),&Particles2D::get_texture);
+ ClassDB::bind_method(D_METHOD("set_texture:Texture", "texture"), &Particles2D::set_texture);
+ ClassDB::bind_method(D_METHOD("get_texture:Texture"), &Particles2D::get_texture);
- ClassDB::bind_method(D_METHOD("set_color","color"),&Particles2D::set_color);
- ClassDB::bind_method(D_METHOD("get_color"),&Particles2D::get_color);
+ ClassDB::bind_method(D_METHOD("set_color", "color"), &Particles2D::set_color);
+ ClassDB::bind_method(D_METHOD("get_color"), &Particles2D::get_color);
- ClassDB::bind_method(D_METHOD("set_color_ramp:ColorRamp","color_ramp"),&Particles2D::set_color_ramp);
- ClassDB::bind_method(D_METHOD("get_color_ramp:ColorRamp"),&Particles2D::get_color_ramp);
+ ClassDB::bind_method(D_METHOD("set_color_ramp:ColorRamp", "color_ramp"), &Particles2D::set_color_ramp);
+ ClassDB::bind_method(D_METHOD("get_color_ramp:ColorRamp"), &Particles2D::get_color_ramp);
- ClassDB::bind_method(D_METHOD("set_emissor_offset","offset"),&Particles2D::set_emissor_offset);
- ClassDB::bind_method(D_METHOD("get_emissor_offset"),&Particles2D::get_emissor_offset);
+ ClassDB::bind_method(D_METHOD("set_emissor_offset", "offset"), &Particles2D::set_emissor_offset);
+ ClassDB::bind_method(D_METHOD("get_emissor_offset"), &Particles2D::get_emissor_offset);
- ClassDB::bind_method(D_METHOD("set_flip_h","enable"),&Particles2D::set_flip_h);
- ClassDB::bind_method(D_METHOD("is_flipped_h"),&Particles2D::is_flipped_h);
+ ClassDB::bind_method(D_METHOD("set_flip_h", "enable"), &Particles2D::set_flip_h);
+ ClassDB::bind_method(D_METHOD("is_flipped_h"), &Particles2D::is_flipped_h);
- ClassDB::bind_method(D_METHOD("set_flip_v","enable"),&Particles2D::set_flip_v);
- ClassDB::bind_method(D_METHOD("is_flipped_v"),&Particles2D::is_flipped_v);
+ ClassDB::bind_method(D_METHOD("set_flip_v", "enable"), &Particles2D::set_flip_v);
+ ClassDB::bind_method(D_METHOD("is_flipped_v"), &Particles2D::is_flipped_v);
- ClassDB::bind_method(D_METHOD("set_h_frames","enable"),&Particles2D::set_h_frames);
- ClassDB::bind_method(D_METHOD("get_h_frames"),&Particles2D::get_h_frames);
+ ClassDB::bind_method(D_METHOD("set_h_frames", "enable"), &Particles2D::set_h_frames);
+ ClassDB::bind_method(D_METHOD("get_h_frames"), &Particles2D::get_h_frames);
- ClassDB::bind_method(D_METHOD("set_v_frames","enable"),&Particles2D::set_v_frames);
- ClassDB::bind_method(D_METHOD("get_v_frames"),&Particles2D::get_v_frames);
+ ClassDB::bind_method(D_METHOD("set_v_frames", "enable"), &Particles2D::set_v_frames);
+ ClassDB::bind_method(D_METHOD("get_v_frames"), &Particles2D::get_v_frames);
- ClassDB::bind_method(D_METHOD("set_emission_half_extents","extents"),&Particles2D::set_emission_half_extents);
- ClassDB::bind_method(D_METHOD("get_emission_half_extents"),&Particles2D::get_emission_half_extents);
+ ClassDB::bind_method(D_METHOD("set_emission_half_extents", "extents"), &Particles2D::set_emission_half_extents);
+ ClassDB::bind_method(D_METHOD("get_emission_half_extents"), &Particles2D::get_emission_half_extents);
- ClassDB::bind_method(D_METHOD("set_color_phases","phases"),&Particles2D::set_color_phases);
- ClassDB::bind_method(D_METHOD("get_color_phases"),&Particles2D::get_color_phases);
+ ClassDB::bind_method(D_METHOD("set_color_phases", "phases"), &Particles2D::set_color_phases);
+ ClassDB::bind_method(D_METHOD("get_color_phases"), &Particles2D::get_color_phases);
- ClassDB::bind_method(D_METHOD("set_color_phase_color","phase","color"),&Particles2D::set_color_phase_color);
- ClassDB::bind_method(D_METHOD("get_color_phase_color","phase"),&Particles2D::get_color_phase_color);
+ ClassDB::bind_method(D_METHOD("set_color_phase_color", "phase", "color"), &Particles2D::set_color_phase_color);
+ ClassDB::bind_method(D_METHOD("get_color_phase_color", "phase"), &Particles2D::get_color_phase_color);
- ClassDB::bind_method(D_METHOD("set_color_phase_pos","phase","pos"),&Particles2D::set_color_phase_pos);
- ClassDB::bind_method(D_METHOD("get_color_phase_pos","phase"),&Particles2D::get_color_phase_pos);
+ ClassDB::bind_method(D_METHOD("set_color_phase_pos", "phase", "pos"), &Particles2D::set_color_phase_pos);
+ ClassDB::bind_method(D_METHOD("get_color_phase_pos", "phase"), &Particles2D::get_color_phase_pos);
- ClassDB::bind_method(D_METHOD("pre_process","time"),&Particles2D::pre_process);
- ClassDB::bind_method(D_METHOD("reset"),&Particles2D::reset);
+ ClassDB::bind_method(D_METHOD("pre_process", "time"), &Particles2D::pre_process);
+ ClassDB::bind_method(D_METHOD("reset"), &Particles2D::reset);
- ClassDB::bind_method(D_METHOD("set_use_local_space","enable"),&Particles2D::set_use_local_space);
- ClassDB::bind_method(D_METHOD("is_using_local_space"),&Particles2D::is_using_local_space);
+ ClassDB::bind_method(D_METHOD("set_use_local_space", "enable"), &Particles2D::set_use_local_space);
+ ClassDB::bind_method(D_METHOD("is_using_local_space"), &Particles2D::is_using_local_space);
- ClassDB::bind_method(D_METHOD("set_initial_velocity","velocity"),&Particles2D::set_initial_velocity);
- ClassDB::bind_method(D_METHOD("get_initial_velocity"),&Particles2D::get_initial_velocity);
+ ClassDB::bind_method(D_METHOD("set_initial_velocity", "velocity"), &Particles2D::set_initial_velocity);
+ ClassDB::bind_method(D_METHOD("get_initial_velocity"), &Particles2D::get_initial_velocity);
- ClassDB::bind_method(D_METHOD("set_explosiveness","amount"),&Particles2D::set_explosiveness);
- ClassDB::bind_method(D_METHOD("get_explosiveness"),&Particles2D::get_explosiveness);
+ ClassDB::bind_method(D_METHOD("set_explosiveness", "amount"), &Particles2D::set_explosiveness);
+ ClassDB::bind_method(D_METHOD("get_explosiveness"), &Particles2D::get_explosiveness);
- ClassDB::bind_method(D_METHOD("set_emission_points","points"),&Particles2D::set_emission_points);
- ClassDB::bind_method(D_METHOD("get_emission_points"),&Particles2D::get_emission_points);
+ ClassDB::bind_method(D_METHOD("set_emission_points", "points"), &Particles2D::set_emission_points);
+ ClassDB::bind_method(D_METHOD("get_emission_points"), &Particles2D::get_emission_points);
ADD_SIGNAL(MethodInfo("emission_finished"));
- ADD_PROPERTY(PropertyInfo(Variant::INT,"config/amount",PROPERTY_HINT_EXP_RANGE,"1,1024"),"set_amount","get_amount") ;
- ADD_PROPERTY(PropertyInfo(Variant::REAL,"config/lifetime",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),"set_lifetime","get_lifetime") ;
- ADD_PROPERTYNO(PropertyInfo(Variant::REAL,"config/time_scale",PROPERTY_HINT_EXP_RANGE,"0.01,128,0.01"),"set_time_scale","get_time_scale") ;
- ADD_PROPERTYNZ(PropertyInfo(Variant::REAL,"config/preprocess",PROPERTY_HINT_EXP_RANGE,"0.1,3600,0.1"),"set_pre_process_time","get_pre_process_time") ;
- ADD_PROPERTYNZ(PropertyInfo(Variant::REAL,"config/emit_timeout",PROPERTY_HINT_RANGE,"0,3600,0.1"),"set_emit_timeout","get_emit_timeout") ;
- ADD_PROPERTYNO(PropertyInfo(Variant::BOOL,"config/emitting"),"set_emitting","is_emitting") ;
- ADD_PROPERTY(PropertyInfo(Variant::INT,"config/process_mode",PROPERTY_HINT_ENUM, "Fixed,Idle"),"set_process_mode","get_process_mode");
- ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2,"config/offset"),"set_emissor_offset","get_emissor_offset");
- ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2,"config/half_extents"),"set_emission_half_extents","get_emission_half_extents");
- ADD_PROPERTYNO(PropertyInfo(Variant::BOOL,"config/local_space"),"set_use_local_space","is_using_local_space");
- ADD_PROPERTYNO(PropertyInfo(Variant::REAL,"config/explosiveness",PROPERTY_HINT_RANGE,"0,1,0.01"),"set_explosiveness","get_explosiveness");
- ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL,"config/flip_h"),"set_flip_h","is_flipped_h");
- ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL,"config/flip_v"),"set_flip_v","is_flipped_v");
- ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"config/texture",PROPERTY_HINT_RESOURCE_TYPE,"Texture"),"set_texture","get_texture");
- ADD_PROPERTYNO(PropertyInfo(Variant::INT,"config/h_frames",PROPERTY_HINT_RANGE,"1,512,1"),"set_h_frames","get_h_frames");
- ADD_PROPERTYNO(PropertyInfo(Variant::INT,"config/v_frames",PROPERTY_HINT_RANGE,"1,512,1"),"set_v_frames","get_v_frames");
-
-
- for(int i=0;i<PARAM_MAX;i++) {
- ADD_PROPERTYI(PropertyInfo(Variant::REAL,_particlesframe_property_names[i],PROPERTY_HINT_RANGE,_particlesframe_property_ranges[i]),"set_param","get_param",i);
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "config/amount", PROPERTY_HINT_EXP_RANGE, "1,1024"), "set_amount", "get_amount");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "config/lifetime", PROPERTY_HINT_EXP_RANGE, "0.1,3600,0.1"), "set_lifetime", "get_lifetime");
+ ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "config/time_scale", PROPERTY_HINT_EXP_RANGE, "0.01,128,0.01"), "set_time_scale", "get_time_scale");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "config/preprocess", PROPERTY_HINT_EXP_RANGE, "0.1,3600,0.1"), "set_pre_process_time", "get_pre_process_time");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "config/emit_timeout", PROPERTY_HINT_RANGE, "0,3600,0.1"), "set_emit_timeout", "get_emit_timeout");
+ ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "config/emitting"), "set_emitting", "is_emitting");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "config/process_mode", PROPERTY_HINT_ENUM, "Fixed,Idle"), "set_process_mode", "get_process_mode");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "config/offset"), "set_emissor_offset", "get_emissor_offset");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::VECTOR2, "config/half_extents"), "set_emission_half_extents", "get_emission_half_extents");
+ ADD_PROPERTYNO(PropertyInfo(Variant::BOOL, "config/local_space"), "set_use_local_space", "is_using_local_space");
+ ADD_PROPERTYNO(PropertyInfo(Variant::REAL, "config/explosiveness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_explosiveness", "get_explosiveness");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "config/flip_h"), "set_flip_h", "is_flipped_h");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "config/flip_v"), "set_flip_v", "is_flipped_v");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "config/texture", PROPERTY_HINT_RESOURCE_TYPE, "Texture"), "set_texture", "get_texture");
+ ADD_PROPERTYNO(PropertyInfo(Variant::INT, "config/h_frames", PROPERTY_HINT_RANGE, "1,512,1"), "set_h_frames", "get_h_frames");
+ ADD_PROPERTYNO(PropertyInfo(Variant::INT, "config/v_frames", PROPERTY_HINT_RANGE, "1,512,1"), "set_v_frames", "get_v_frames");
+
+ for (int i = 0; i < PARAM_MAX; i++) {
+ ADD_PROPERTYI(PropertyInfo(Variant::REAL, _particlesframe_property_names[i], PROPERTY_HINT_RANGE, _particlesframe_property_ranges[i]), "set_param", "get_param", i);
}
- for(int i=0;i<PARAM_MAX;i++) {
- ADD_PROPERTYINZ(PropertyInfo(Variant::REAL,_particlesframe_property_rnames[i],PROPERTY_HINT_RANGE,"-1,1,0.01"),"set_randomness","get_randomness",i);
+ for (int i = 0; i < PARAM_MAX; i++) {
+ ADD_PROPERTYINZ(PropertyInfo(Variant::REAL, _particlesframe_property_rnames[i], PROPERTY_HINT_RANGE, "-1,1,0.01"), "set_randomness", "get_randomness", i);
}
- ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "color_phases/count",PROPERTY_HINT_RANGE,"0,4,1", 0), "set_color_phases", "get_color_phases");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::INT, "color_phases/count", PROPERTY_HINT_RANGE, "0,4,1", 0), "set_color_phases", "get_color_phases");
//Backward compatibility. They will be converted to color ramp
- for(int i=0;i<MAX_COLOR_PHASES;i++) {
- String phase="phase_"+itos(i)+"/";
- ADD_PROPERTYI( PropertyInfo( Variant::REAL, phase+"pos", PROPERTY_HINT_RANGE,"0,1,0.01", 0),"set_color_phase_pos","get_color_phase_pos",i );
- ADD_PROPERTYI( PropertyInfo( Variant::COLOR, phase+"color", PROPERTY_HINT_NONE, "", 0),"set_color_phase_color","get_color_phase_color",i );
+ for (int i = 0; i < MAX_COLOR_PHASES; i++) {
+ String phase = "phase_" + itos(i) + "/";
+ ADD_PROPERTYI(PropertyInfo(Variant::REAL, phase + "pos", PROPERTY_HINT_RANGE, "0,1,0.01", 0), "set_color_phase_pos", "get_color_phase_pos", i);
+ ADD_PROPERTYI(PropertyInfo(Variant::COLOR, phase + "color", PROPERTY_HINT_NONE, "", 0), "set_color_phase_color", "get_color_phase_color", i);
}
- ADD_PROPERTYNO(PropertyInfo(Variant::COLOR, "color/color"),"set_color","get_color");
- ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT,"color/color_ramp",PROPERTY_HINT_RESOURCE_TYPE,"ColorRamp"),"set_color_ramp","get_color_ramp");
-
- ADD_PROPERTYNZ(PropertyInfo(Variant::POOL_VECTOR2_ARRAY,"emission_points",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),"set_emission_points","get_emission_points");
+ ADD_PROPERTYNO(PropertyInfo(Variant::COLOR, "color/color"), "set_color", "get_color");
+ ADD_PROPERTYNZ(PropertyInfo(Variant::OBJECT, "color/color_ramp", PROPERTY_HINT_RESOURCE_TYPE, "ColorRamp"), "set_color_ramp", "get_color_ramp");
- BIND_CONSTANT( PARAM_DIRECTION );
- BIND_CONSTANT( PARAM_SPREAD );
- BIND_CONSTANT( PARAM_LINEAR_VELOCITY );
- BIND_CONSTANT( PARAM_SPIN_VELOCITY );
- BIND_CONSTANT( PARAM_ORBIT_VELOCITY );
- BIND_CONSTANT( PARAM_GRAVITY_DIRECTION );
- BIND_CONSTANT( PARAM_GRAVITY_STRENGTH );
- BIND_CONSTANT( PARAM_RADIAL_ACCEL );
- BIND_CONSTANT( PARAM_TANGENTIAL_ACCEL );
- BIND_CONSTANT( PARAM_DAMPING );
- BIND_CONSTANT( PARAM_INITIAL_ANGLE );
- BIND_CONSTANT( PARAM_INITIAL_SIZE );
- BIND_CONSTANT( PARAM_FINAL_SIZE );
- BIND_CONSTANT( PARAM_HUE_VARIATION );
- BIND_CONSTANT( PARAM_ANIM_SPEED_SCALE );
- BIND_CONSTANT( PARAM_ANIM_INITIAL_POS );
- BIND_CONSTANT( PARAM_MAX );
+ ADD_PROPERTYNZ(PropertyInfo(Variant::POOL_VECTOR2_ARRAY, "emission_points", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NOEDITOR), "set_emission_points", "get_emission_points");
- BIND_CONSTANT( MAX_COLOR_PHASES );
+ BIND_CONSTANT(PARAM_DIRECTION);
+ BIND_CONSTANT(PARAM_SPREAD);
+ BIND_CONSTANT(PARAM_LINEAR_VELOCITY);
+ BIND_CONSTANT(PARAM_SPIN_VELOCITY);
+ BIND_CONSTANT(PARAM_ORBIT_VELOCITY);
+ BIND_CONSTANT(PARAM_GRAVITY_DIRECTION);
+ BIND_CONSTANT(PARAM_GRAVITY_STRENGTH);
+ BIND_CONSTANT(PARAM_RADIAL_ACCEL);
+ BIND_CONSTANT(PARAM_TANGENTIAL_ACCEL);
+ BIND_CONSTANT(PARAM_DAMPING);
+ BIND_CONSTANT(PARAM_INITIAL_ANGLE);
+ BIND_CONSTANT(PARAM_INITIAL_SIZE);
+ BIND_CONSTANT(PARAM_FINAL_SIZE);
+ BIND_CONSTANT(PARAM_HUE_VARIATION);
+ BIND_CONSTANT(PARAM_ANIM_SPEED_SCALE);
+ BIND_CONSTANT(PARAM_ANIM_INITIAL_POS);
+ BIND_CONSTANT(PARAM_MAX);
+ BIND_CONSTANT(MAX_COLOR_PHASES);
}
Particles2D::Particles2D() {
- for(int i=0;i<PARAM_MAX;i++) {
+ for (int i = 0; i < PARAM_MAX; i++) {
- param[i]=0;
- randomness[i]=0;
+ param[i] = 0;
+ randomness[i] = 0;
}
-
- set_param(PARAM_SPREAD,10);
- set_param(PARAM_LINEAR_VELOCITY,20);
- set_param(PARAM_GRAVITY_STRENGTH,9.8);
- set_param(PARAM_RADIAL_ACCEL,0);
- set_param(PARAM_TANGENTIAL_ACCEL,0);
- set_param(PARAM_INITIAL_ANGLE,0.0);
- set_param(PARAM_INITIAL_SIZE,1.0);
- set_param(PARAM_FINAL_SIZE,1.0);
- set_param(PARAM_ANIM_SPEED_SCALE,1.0);
-
- set_color(Color(1,1,1,1));
-
- time=0;
- lifetime=2;
- emitting=false;
+ set_param(PARAM_SPREAD, 10);
+ set_param(PARAM_LINEAR_VELOCITY, 20);
+ set_param(PARAM_GRAVITY_STRENGTH, 9.8);
+ set_param(PARAM_RADIAL_ACCEL, 0);
+ set_param(PARAM_TANGENTIAL_ACCEL, 0);
+ set_param(PARAM_INITIAL_ANGLE, 0.0);
+ set_param(PARAM_INITIAL_SIZE, 1.0);
+ set_param(PARAM_FINAL_SIZE, 1.0);
+ set_param(PARAM_ANIM_SPEED_SCALE, 1.0);
+
+ set_color(Color(1, 1, 1, 1));
+
+ time = 0;
+ lifetime = 2;
+ emitting = false;
particles.resize(32);
- active_count=-1;
+ active_count = -1;
set_emitting(true);
- process_mode=PROCESS_IDLE;
- local_space=true;
- preprocess=0;
- time_scale=1.0;
-
+ process_mode = PROCESS_IDLE;
+ local_space = true;
+ preprocess = 0;
+ time_scale = 1.0;
- flip_h=false;
- flip_v=false;
+ flip_h = false;
+ flip_v = false;
- v_frames=1;
- h_frames=1;
+ v_frames = 1;
+ h_frames = 1;
emit_timeout = 0;
time_to_live = 0;
- explosiveness=1.0;
+ explosiveness = 1.0;
}