Merge pull request #109607 from mihe/character-thread-sync

Fix `move_and_slide` forcing synchronization with physics thread
This commit is contained in:
Thaddeus Crews
2025-08-15 12:58:44 -05:00
22 changed files with 226 additions and 2 deletions

View File

@ -92,6 +92,12 @@ void PhysicsDirectBodyState2DExtension::_bind_methods() {
GDVIRTUAL_BIND(_set_sleep_state, "enabled");
GDVIRTUAL_BIND(_is_sleeping);
GDVIRTUAL_BIND(_set_collision_layer, "layer");
GDVIRTUAL_BIND(_get_collision_layer);
GDVIRTUAL_BIND(_set_collision_mask, "mask");
GDVIRTUAL_BIND(_get_collision_mask);
GDVIRTUAL_BIND(_get_contact_count);
GDVIRTUAL_BIND(_get_contact_local_position, "contact_idx");

View File

@ -86,6 +86,12 @@ public:
EXBIND1(set_sleep_state, bool)
EXBIND0RC(bool, is_sleeping)
EXBIND1(set_collision_layer, uint32_t);
EXBIND0RC(uint32_t, get_collision_layer);
EXBIND1(set_collision_mask, uint32_t);
EXBIND0RC(uint32_t, get_collision_mask);
EXBIND0RC(int, get_contact_count)
EXBIND1RC(Vector2, get_contact_local_position, int)

View File

@ -96,6 +96,12 @@ void PhysicsDirectBodyState3DExtension::_bind_methods() {
GDVIRTUAL_BIND(_set_sleep_state, "enabled");
GDVIRTUAL_BIND(_is_sleeping);
GDVIRTUAL_BIND(_set_collision_layer, "layer");
GDVIRTUAL_BIND(_get_collision_layer);
GDVIRTUAL_BIND(_set_collision_mask, "mask");
GDVIRTUAL_BIND(_get_collision_mask);
GDVIRTUAL_BIND(_get_contact_count);
GDVIRTUAL_BIND(_get_contact_local_position, "contact_idx");

View File

@ -88,6 +88,12 @@ public:
EXBIND1(set_sleep_state, bool)
EXBIND0RC(bool, is_sleeping)
EXBIND1(set_collision_layer, uint32_t);
EXBIND0RC(uint32_t, get_collision_layer);
EXBIND1(set_collision_mask, uint32_t);
EXBIND0RC(uint32_t, get_collision_mask);
EXBIND0RC(int, get_contact_count)
EXBIND1RC(Vector3, get_contact_local_position, int)

View File

@ -114,6 +114,12 @@ void PhysicsDirectBodyState2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_sleep_state", "enabled"), &PhysicsDirectBodyState2D::set_sleep_state);
ClassDB::bind_method(D_METHOD("is_sleeping"), &PhysicsDirectBodyState2D::is_sleeping);
ClassDB::bind_method(D_METHOD("set_collision_layer", "layer"), &PhysicsDirectBodyState2D::set_collision_layer);
ClassDB::bind_method(D_METHOD("get_collision_layer"), &PhysicsDirectBodyState2D::get_collision_layer);
ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &PhysicsDirectBodyState2D::set_collision_mask);
ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsDirectBodyState2D::get_collision_mask);
ClassDB::bind_method(D_METHOD("get_contact_count"), &PhysicsDirectBodyState2D::get_contact_count);
ClassDB::bind_method(D_METHOD("get_contact_local_position", "contact_idx"), &PhysicsDirectBodyState2D::get_contact_local_position);
@ -142,6 +148,8 @@ void PhysicsDirectBodyState2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleep_state", "is_sleeping");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer"), "set_collision_layer", "get_collision_layer");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask"), "set_collision_mask", "get_collision_mask");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform"), "set_transform", "get_transform");
}

View File

@ -88,6 +88,12 @@ public:
virtual void set_sleep_state(bool p_enable) = 0;
virtual bool is_sleeping() const = 0;
virtual void set_collision_layer(uint32_t p_layer) = 0;
virtual uint32_t get_collision_layer() const = 0;
virtual void set_collision_mask(uint32_t p_mask) = 0;
virtual uint32_t get_collision_mask() const = 0;
virtual int get_contact_count() const = 0;
virtual Vector2 get_contact_local_position(int p_contact_idx) const = 0;

View File

@ -79,6 +79,12 @@ public:
virtual void set_sleep_state(bool p_enable) override {}
virtual bool is_sleeping() const override { return false; }
virtual void set_collision_layer(uint32_t p_layer) override {}
virtual uint32_t get_collision_layer() const override { return 0; }
virtual void set_collision_mask(uint32_t p_mask) override {}
virtual uint32_t get_collision_mask() const override { return 0; }
virtual int get_contact_count() const override { return 0; }
virtual Vector2 get_contact_local_position(int p_contact_idx) const override { return Vector2(); }

View File

@ -138,6 +138,12 @@ void PhysicsDirectBodyState3D::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_sleep_state", "enabled"), &PhysicsDirectBodyState3D::set_sleep_state);
ClassDB::bind_method(D_METHOD("is_sleeping"), &PhysicsDirectBodyState3D::is_sleeping);
ClassDB::bind_method(D_METHOD("set_collision_layer", "layer"), &PhysicsDirectBodyState3D::set_collision_layer);
ClassDB::bind_method(D_METHOD("get_collision_layer"), &PhysicsDirectBodyState3D::get_collision_layer);
ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &PhysicsDirectBodyState3D::set_collision_mask);
ClassDB::bind_method(D_METHOD("get_collision_mask"), &PhysicsDirectBodyState3D::get_collision_mask);
ClassDB::bind_method(D_METHOD("get_contact_count"), &PhysicsDirectBodyState3D::get_contact_count);
ClassDB::bind_method(D_METHOD("get_contact_local_position", "contact_idx"), &PhysicsDirectBodyState3D::get_contact_local_position);
@ -168,6 +174,8 @@ void PhysicsDirectBodyState3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "angular_velocity"), "set_angular_velocity", "get_angular_velocity");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity"), "set_linear_velocity", "get_linear_velocity");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleep_state", "is_sleeping");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer"), "set_collision_layer", "get_collision_layer");
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask"), "set_collision_mask", "get_collision_mask");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform"), "set_transform", "get_transform");
}

View File

@ -91,6 +91,12 @@ public:
virtual void set_sleep_state(bool p_sleep) = 0;
virtual bool is_sleeping() const = 0;
virtual void set_collision_layer(uint32_t p_layer) = 0;
virtual uint32_t get_collision_layer() const = 0;
virtual void set_collision_mask(uint32_t p_mask) = 0;
virtual uint32_t get_collision_mask() const = 0;
virtual int get_contact_count() const = 0;
virtual Vector3 get_contact_local_position(int p_contact_idx) const = 0;

View File

@ -81,6 +81,12 @@ public:
virtual void set_sleep_state(bool p_sleep) override {}
virtual bool is_sleeping() const override { return false; }
virtual void set_collision_layer(uint32_t p_layer) override {}
virtual uint32_t get_collision_layer() const override { return 0; }
virtual void set_collision_mask(uint32_t p_mask) override {}
virtual uint32_t get_collision_mask() const override { return 0; }
virtual int get_contact_count() const override { return 0; }
virtual Vector3 get_contact_local_position(int p_contact_idx) const override { return Vector3(); }