Fix visibility enabler flag toggling

(cherry picked from commit 2ccd1a7805)
This commit is contained in:
Tomasz Chabora 2020-03-17 16:44:48 +01:00 committed by Rémi Verschelde
parent 223d0abd7e
commit 8fd7efef84
4 changed files with 15 additions and 18 deletions

View File

@ -5,6 +5,7 @@
</brief_description>
<description>
The VisibilityEnabler will disable [RigidBody] and [AnimationPlayer] nodes when they are not visible. It will only affect other nodes within the same scene as the VisibilityEnabler itself.
Note that VisibilityEnabler will not affect nodes added after scene initialization.
</description>
<tutorials>
</tutorials>

View File

@ -5,6 +5,7 @@
</brief_description>
<description>
The VisibilityEnabler2D will disable [RigidBody2D], [AnimationPlayer], and other nodes when they are not visible. It will only affect nodes with the same root node as the VisibilityEnabler2D, and the root node itself.
Note that VisibilityEnabler2D will not affect nodes added after scene initialization.
</description>
<tutorials>
</tutorials>

View File

@ -188,8 +188,7 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) {
bool add = false;
Variant meta;
if (enabler[ENABLER_FREEZE_BODIES]) {
{
RigidBody2D *rb2d = Object::cast_to<RigidBody2D>(p_node);
if (rb2d && ((rb2d->get_mode() == RigidBody2D::MODE_CHARACTER || rb2d->get_mode() == RigidBody2D::MODE_RIGID))) {
@ -198,24 +197,21 @@ void VisibilityEnabler2D::_find_nodes(Node *p_node) {
}
}
if (enabler[ENABLER_PAUSE_ANIMATIONS]) {
{
AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node);
if (ap) {
add = true;
}
}
if (enabler[ENABLER_PAUSE_ANIMATED_SPRITES]) {
{
AnimatedSprite *as = Object::cast_to<AnimatedSprite>(p_node);
if (as) {
add = true;
}
}
if (enabler[ENABLER_PAUSE_PARTICLES]) {
{
Particles2D *ps = Object::cast_to<Particles2D>(p_node);
if (ps) {
add = true;
@ -278,7 +274,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) {
ERR_FAIL_COND(!nodes.has(p_node));
{
if (enabler[ENABLER_FREEZE_BODIES]) {
RigidBody2D *rb = Object::cast_to<RigidBody2D>(p_node);
if (rb) {
@ -286,7 +282,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) {
}
}
{
if (enabler[ENABLER_PAUSE_ANIMATIONS]) {
AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node);
if (ap) {
@ -294,7 +290,8 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) {
ap->set_active(p_enabled);
}
}
{
if (enabler[ENABLER_PAUSE_ANIMATED_SPRITES]) {
AnimatedSprite *as = Object::cast_to<AnimatedSprite>(p_node);
if (as) {
@ -306,7 +303,7 @@ void VisibilityEnabler2D::_change_node_state(Node *p_node, bool p_enabled) {
}
}
{
if (enabler[ENABLER_PAUSE_PARTICLES]) {
Particles2D *ps = Object::cast_to<Particles2D>(p_node);
if (ps) {

View File

@ -150,8 +150,7 @@ void VisibilityEnabler::_find_nodes(Node *p_node) {
bool add = false;
Variant meta;
if (enabler[ENABLER_FREEZE_BODIES]) {
{
RigidBody *rb = Object::cast_to<RigidBody>(p_node);
if (rb && ((rb->get_mode() == RigidBody::MODE_CHARACTER || rb->get_mode() == RigidBody::MODE_RIGID))) {
@ -160,8 +159,7 @@ void VisibilityEnabler::_find_nodes(Node *p_node) {
}
}
if (enabler[ENABLER_PAUSE_ANIMATIONS]) {
{
AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node);
if (ap) {
add = true;
@ -219,14 +217,14 @@ void VisibilityEnabler::_change_node_state(Node *p_node, bool p_enabled) {
ERR_FAIL_COND(!nodes.has(p_node));
{
if (enabler[ENABLER_FREEZE_BODIES]) {
RigidBody *rb = Object::cast_to<RigidBody>(p_node);
if (rb)
rb->set_sleeping(!p_enabled);
}
{
if (enabler[ENABLER_PAUSE_ANIMATIONS]) {
AnimationPlayer *ap = Object::cast_to<AnimationPlayer>(p_node);
if (ap) {