diff --git a/panda/src/char/characterJoint.cxx b/panda/src/char/characterJoint.cxx index 6ce5b0be88..fee1a90f76 100644 --- a/panda/src/char/characterJoint.cxx +++ b/panda/src/char/characterJoint.cxx @@ -214,7 +214,7 @@ bool CharacterJoint:: remove_net_transform(PandaNode *node) { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } @@ -244,7 +244,7 @@ clear_net_transforms() { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } } @@ -306,7 +306,7 @@ bool CharacterJoint:: remove_local_transform(PandaNode *node) { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } @@ -336,7 +336,7 @@ clear_local_transforms() { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } } @@ -427,7 +427,7 @@ set_character(Character *character) { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } } @@ -438,7 +438,7 @@ set_character(Character *character) { CPT(RenderEffect) effect = node->get_effect(CharacterJointEffect::get_class_type()); if (effect != (RenderEffect *)NULL && - DCAST(CharacterJointEffect, effect)->get_character() == _character) { + DCAST(CharacterJointEffect, effect)->matches_character(_character)) { node->clear_effect(CharacterJointEffect::get_class_type()); } } diff --git a/panda/src/char/characterJointEffect.I b/panda/src/char/characterJointEffect.I index c63c90d1a7..e4d596dafe 100644 --- a/panda/src/char/characterJointEffect.I +++ b/panda/src/char/characterJointEffect.I @@ -27,3 +27,13 @@ INLINE PT(Character) CharacterJointEffect:: get_character() const { return _character.lock(); } + +/** + * Returns true if this CharacterJointEffect contains the given Character. + * This exists because it is faster to check than get_character() and can even + * be called while the Character is destructing. + */ +INLINE bool CharacterJointEffect:: +matches_character(Character *character) const { + return _character == character; +} diff --git a/panda/src/char/characterJointEffect.h b/panda/src/char/characterJointEffect.h index d06ca802fb..372013df54 100644 --- a/panda/src/char/characterJointEffect.h +++ b/panda/src/char/characterJointEffect.h @@ -41,6 +41,8 @@ PUBLISHED: INLINE PT(Character) get_character() const; public: + INLINE bool matches_character(Character *character) const; + virtual bool safe_to_transform() const; virtual bool safe_to_combine() const; virtual void output(ostream &out) const;