Fix contact count sometimes being incorrect in `_process`

This commit is contained in:
Mikael Hermansson 2024-02-06 14:23:08 +01:00
parent d3352813ea
commit f2d615cdc7
4 changed files with 8 additions and 6 deletions

View File

@ -446,6 +446,8 @@ void RigidBody2D::_sync_body_state(PhysicsDirectBodyState2D *p_state) {
linear_velocity = p_state->get_linear_velocity(); linear_velocity = p_state->get_linear_velocity();
angular_velocity = p_state->get_angular_velocity(); angular_velocity = p_state->get_angular_velocity();
contact_count = p_state->get_contact_count();
if (sleeping != p_state->is_sleeping()) { if (sleeping != p_state->is_sleeping()) {
sleeping = p_state->is_sleeping(); sleeping = p_state->is_sleeping();
emit_signal(SceneStringNames::get_singleton()->sleeping_state_changed); emit_signal(SceneStringNames::get_singleton()->sleeping_state_changed);
@ -797,9 +799,7 @@ int RigidBody2D::get_max_contacts_reported() const {
} }
int RigidBody2D::get_contact_count() const { int RigidBody2D::get_contact_count() const {
PhysicsDirectBodyState2D *bs = PhysicsServer2D::get_singleton()->body_get_direct_state(get_rid()); return contact_count;
ERR_FAIL_NULL_V(bs, 0);
return bs->get_contact_count();
} }
void RigidBody2D::apply_central_impulse(const Vector2 &p_impulse) { void RigidBody2D::apply_central_impulse(const Vector2 &p_impulse) {

View File

@ -164,6 +164,7 @@ private:
bool sleeping = false; bool sleeping = false;
int max_contacts_reported = 0; int max_contacts_reported = 0;
int contact_count = 0;
bool custom_integrator = false; bool custom_integrator = false;

View File

@ -502,6 +502,8 @@ void RigidBody3D::_sync_body_state(PhysicsDirectBodyState3D *p_state) {
inverse_inertia_tensor = p_state->get_inverse_inertia_tensor(); inverse_inertia_tensor = p_state->get_inverse_inertia_tensor();
contact_count = p_state->get_contact_count();
if (sleeping != p_state->is_sleeping()) { if (sleeping != p_state->is_sleeping()) {
sleeping = p_state->is_sleeping(); sleeping = p_state->is_sleeping();
emit_signal(SceneStringNames::get_singleton()->sleeping_state_changed); emit_signal(SceneStringNames::get_singleton()->sleeping_state_changed);
@ -877,9 +879,7 @@ int RigidBody3D::get_max_contacts_reported() const {
} }
int RigidBody3D::get_contact_count() const { int RigidBody3D::get_contact_count() const {
PhysicsDirectBodyState3D *bs = PhysicsServer3D::get_singleton()->body_get_direct_state(get_rid()); return contact_count;
ERR_FAIL_NULL_V(bs, 0);
return bs->get_contact_count();
} }
void RigidBody3D::apply_central_impulse(const Vector3 &p_impulse) { void RigidBody3D::apply_central_impulse(const Vector3 &p_impulse) {

View File

@ -177,6 +177,7 @@ private:
bool ccd = false; bool ccd = false;
int max_contacts_reported = 0; int max_contacts_reported = 0;
int contact_count = 0;
bool custom_integrator = false; bool custom_integrator = false;