update emitting status on one-shot particles

This commit is contained in:
clayjohn 2019-06-20 11:20:27 -07:00
parent 5a29be31b3
commit d59dbda24f
4 changed files with 54 additions and 6 deletions

View file

@ -41,6 +41,12 @@
void Particles2D::set_emitting(bool p_emitting) {
VS::get_singleton()->particles_set_emitting(particles, p_emitting);
if (p_emitting && one_shot) {
set_process_internal(true);
} else if (!p_emitting) {
set_process_internal(false);
}
}
void Particles2D::set_amount(int p_amount) {
@ -60,8 +66,16 @@ void Particles2D::set_one_shot(bool p_enable) {
one_shot = p_enable;
VS::get_singleton()->particles_set_one_shot(particles, one_shot);
if (!one_shot && is_emitting())
VisualServer::get_singleton()->particles_restart(particles);
if (is_emitting()) {
set_process_internal(true);
if (!one_shot)
VisualServer::get_singleton()->particles_restart(particles);
}
if (!one_shot)
set_process_internal(false);
}
void Particles2D::set_pre_process_time(float p_time) {
@ -313,6 +327,14 @@ void Particles2D::_notification(int p_what) {
if (p_what == NOTIFICATION_TRANSFORM_CHANGED) {
_update_particle_emission_transform();
}
if (p_what == NOTIFICATION_INTERNAL_PROCESS) {
if (one_shot && !is_emitting()) {
_change_notify();
set_process_internal(false);
}
}
}
void Particles2D::_bind_methods() {