From b2a3e8cb343fda9b3662306796f48701517d8003 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 13 Mar 2024 23:14:35 +0100 Subject: [PATCH] Move Max Contacts Reported below Contact Monitor in RigidBody inspector This also changes the code used to hide the custom center of mass property for consistency with other places in the editor (only this approach worked for Contact Monitor as well). The Center of Mass property hint in RigidBody2D was also modified for better usability. --- scene/2d/physics/rigid_body_2d.cpp | 21 +++++++++++++-------- scene/3d/physics/rigid_body_3d.cpp | 19 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/scene/2d/physics/rigid_body_2d.cpp b/scene/2d/physics/rigid_body_2d.cpp index 12112510a84..f6a90362e74 100644 --- a/scene/2d/physics/rigid_body_2d.cpp +++ b/scene/2d/physics/rigid_body_2d.cpp @@ -356,6 +356,8 @@ void RigidBody2D::set_center_of_mass_mode(CenterOfMassMode p_mode) { PhysicsServer2D::get_singleton()->body_set_param(get_rid(), PhysicsServer2D::BODY_PARAM_CENTER_OF_MASS, center_of_mass); } break; } + + notify_property_list_changed(); } RigidBody2D::CenterOfMassMode RigidBody2D::get_center_of_mass_mode() const { @@ -614,6 +616,8 @@ void RigidBody2D::set_contact_monitor(bool p_enabled) { contact_monitor = memnew(ContactMonitor); contact_monitor->locked = false; } + + notify_property_list_changed(); } bool RigidBody2D::is_contact_monitor_enabled() const { @@ -740,9 +744,8 @@ void RigidBody2D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "get_physics_material_override"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_scale", PROPERTY_HINT_RANGE, "-8,8,0.001,or_less,or_greater"), "set_gravity_scale", "get_gravity_scale"); ADD_GROUP("Mass Distribution", ""); - ADD_PROPERTY(PropertyInfo(Variant::INT, "center_of_mass_mode", PROPERTY_HINT_ENUM, "Auto,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_center_of_mass_mode", "get_center_of_mass_mode"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass", PROPERTY_HINT_RANGE, "-10,10,0.01,or_less,or_greater,suffix:px"), "set_center_of_mass", "get_center_of_mass"); - ADD_LINKED_PROPERTY("center_of_mass_mode", "center_of_mass"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "center_of_mass_mode", PROPERTY_HINT_ENUM, "Auto,Custom"), "set_center_of_mass_mode", "get_center_of_mass_mode"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "center_of_mass", PROPERTY_HINT_RANGE, "-1000,1000,0.01,or_less,or_greater,suffix:px"), "set_center_of_mass", "get_center_of_mass"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "inertia", PROPERTY_HINT_RANGE, U"0,1000,0.01,or_greater,exp,suffix:kg\u22C5px\u00B2"), "set_inertia", "get_inertia"); ADD_GROUP("Deactivation", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleeping", "is_sleeping"); @@ -753,8 +756,8 @@ void RigidBody2D::_bind_methods() { ADD_GROUP("Solver", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "custom_integrator"), "set_use_custom_integrator", "is_using_custom_integrator"); ADD_PROPERTY(PropertyInfo(Variant::INT, "continuous_cd", PROPERTY_HINT_ENUM, "Disabled,Cast Ray,Cast Shape"), "set_continuous_collision_detection_mode", "get_continuous_collision_detection_mode"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "max_contacts_reported", PROPERTY_HINT_RANGE, "0,64,1,or_greater"), "set_max_contacts_reported", "get_max_contacts_reported"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "contact_monitor"), "set_contact_monitor", "is_contact_monitor_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_contacts_reported", PROPERTY_HINT_RANGE, "0,64,1,or_greater"), "set_max_contacts_reported", "get_max_contacts_reported"); ADD_GROUP("Linear", "linear_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "linear_velocity", PROPERTY_HINT_NONE, "suffix:px/s"), "set_linear_velocity", "get_linear_velocity"); ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode"); @@ -788,10 +791,12 @@ void RigidBody2D::_bind_methods() { } void RigidBody2D::_validate_property(PropertyInfo &p_property) const { - if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM) { - if (p_property.name == "center_of_mass") { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; - } + if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM && p_property.name == "center_of_mass") { + p_property.usage = PROPERTY_USAGE_NO_EDITOR; + } + + if (!contact_monitor && p_property.name == "max_contacts_reported") { + p_property.usage = PROPERTY_USAGE_NO_EDITOR; } } diff --git a/scene/3d/physics/rigid_body_3d.cpp b/scene/3d/physics/rigid_body_3d.cpp index 54bd1c0d255..3c49277d82b 100644 --- a/scene/3d/physics/rigid_body_3d.cpp +++ b/scene/3d/physics/rigid_body_3d.cpp @@ -375,6 +375,8 @@ void RigidBody3D::set_center_of_mass_mode(CenterOfMassMode p_mode) { PhysicsServer3D::get_singleton()->body_set_param(get_rid(), PhysicsServer3D::BODY_PARAM_CENTER_OF_MASS, center_of_mass); } break; } + + notify_property_list_changed(); } RigidBody3D::CenterOfMassMode RigidBody3D::get_center_of_mass_mode() const { @@ -622,6 +624,8 @@ void RigidBody3D::set_contact_monitor(bool p_enabled) { contact_monitor = memnew(ContactMonitor); contact_monitor->locked = false; } + + notify_property_list_changed(); } bool RigidBody3D::is_contact_monitor_enabled() const { @@ -762,9 +766,8 @@ void RigidBody3D::_bind_methods() { ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), "set_physics_material_override", "get_physics_material_override"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "gravity_scale", PROPERTY_HINT_RANGE, "-8,8,0.001,or_less,or_greater"), "set_gravity_scale", "get_gravity_scale"); ADD_GROUP("Mass Distribution", ""); - ADD_PROPERTY(PropertyInfo(Variant::INT, "center_of_mass_mode", PROPERTY_HINT_ENUM, "Auto,Custom", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), "set_center_of_mass_mode", "get_center_of_mass_mode"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "center_of_mass_mode", PROPERTY_HINT_ENUM, "Auto,Custom"), "set_center_of_mass_mode", "get_center_of_mass_mode"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "center_of_mass", PROPERTY_HINT_RANGE, "-10,10,0.01,or_less,or_greater,suffix:m"), "set_center_of_mass", "get_center_of_mass"); - ADD_LINKED_PROPERTY("center_of_mass_mode", "center_of_mass"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "inertia", PROPERTY_HINT_RANGE, U"0,1000,0.01,or_greater,exp,suffix:kg\u22C5m\u00B2"), "set_inertia", "get_inertia"); ADD_GROUP("Deactivation", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "sleeping"), "set_sleeping", "is_sleeping"); @@ -775,8 +778,8 @@ void RigidBody3D::_bind_methods() { ADD_GROUP("Solver", ""); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "custom_integrator"), "set_use_custom_integrator", "is_using_custom_integrator"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "continuous_cd"), "set_use_continuous_collision_detection", "is_using_continuous_collision_detection"); - ADD_PROPERTY(PropertyInfo(Variant::INT, "max_contacts_reported", PROPERTY_HINT_RANGE, "0,64,1,or_greater"), "set_max_contacts_reported", "get_max_contacts_reported"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "contact_monitor"), "set_contact_monitor", "is_contact_monitor_enabled"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "max_contacts_reported", PROPERTY_HINT_RANGE, "0,64,1,or_greater"), "set_max_contacts_reported", "get_max_contacts_reported"); ADD_GROUP("Linear", "linear_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "linear_velocity", PROPERTY_HINT_NONE, "suffix:m/s"), "set_linear_velocity", "get_linear_velocity"); ADD_PROPERTY(PropertyInfo(Variant::INT, "linear_damp_mode", PROPERTY_HINT_ENUM, "Combine,Replace"), "set_linear_damp_mode", "get_linear_damp_mode"); @@ -806,10 +809,12 @@ void RigidBody3D::_bind_methods() { } void RigidBody3D::_validate_property(PropertyInfo &p_property) const { - if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM) { - if (p_property.name == "center_of_mass") { - p_property.usage = PROPERTY_USAGE_NO_EDITOR; - } + if (center_of_mass_mode != CENTER_OF_MASS_MODE_CUSTOM && p_property.name == "center_of_mass") { + p_property.usage = PROPERTY_USAGE_NO_EDITOR; + } + + if (!contact_monitor && p_property.name == "max_contacts_reported") { + p_property.usage = PROPERTY_USAGE_NO_EDITOR; } }