Warn about resizing a rigidbody (2D or 3D), covers the most common cases, closes #7615
(cherry picked from commit de9fb90dbf
)
This commit is contained in:
parent
9e57957f78
commit
a59e1a50bf
|
@ -830,6 +830,40 @@ bool RigidBody2D::is_contact_monitor_enabled() const {
|
||||||
return contact_monitor != NULL;
|
return contact_monitor != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RigidBody2D::_notification(int p_what) {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (p_what == NOTIFICATION_ENTER_TREE) {
|
||||||
|
if (get_tree()->is_editor_hint()) {
|
||||||
|
set_notify_local_transform(true); //used for warnings and only in editor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_what == NOTIFICATION_LOCAL_TRANSFORM_CHANGED) {
|
||||||
|
if (get_tree()->is_editor_hint()) {
|
||||||
|
update_configuration_warning();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
String RigidBody2D::get_configuration_warning() const {
|
||||||
|
|
||||||
|
Matrix32 t = get_transform();
|
||||||
|
|
||||||
|
String warning = CollisionObject2D::get_configuration_warning();
|
||||||
|
|
||||||
|
if ((get_mode() == MODE_RIGID || get_mode() == MODE_CHARACTER) && (ABS(t.elements[0].length() - 1.0) > 0.05 || ABS(t.elements[1].length() - 1.0) > 0.05)) {
|
||||||
|
if (warning != String()) {
|
||||||
|
warning += "\n";
|
||||||
|
}
|
||||||
|
warning += TTR("Size changes to RigidBody2D (in character or rigid modes) will be overriden by the physics engine when running.\nChange the size in children collision shapes instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return warning;
|
||||||
|
}
|
||||||
|
|
||||||
void RigidBody2D::_bind_methods() {
|
void RigidBody2D::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("set_mode", "mode"), &RigidBody2D::set_mode);
|
ObjectTypeDB::bind_method(_MD("set_mode", "mode"), &RigidBody2D::set_mode);
|
||||||
|
|
|
@ -197,6 +197,7 @@ private:
|
||||||
bool _test_motion(const Vector2 &p_motion, float p_margin = 0.08, const Ref<Physics2DTestMotionResult> &p_result = Ref<Physics2DTestMotionResult>());
|
bool _test_motion(const Vector2 &p_motion, float p_margin = 0.08, const Ref<Physics2DTestMotionResult> &p_result = Ref<Physics2DTestMotionResult>());
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void _notification(int p_what);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -265,6 +266,8 @@ public:
|
||||||
|
|
||||||
Array get_colliding_bodies() const; //function for script
|
Array get_colliding_bodies() const; //function for script
|
||||||
|
|
||||||
|
virtual String get_configuration_warning() const;
|
||||||
|
|
||||||
RigidBody2D();
|
RigidBody2D();
|
||||||
~RigidBody2D();
|
~RigidBody2D();
|
||||||
};
|
};
|
||||||
|
|
|
@ -472,6 +472,21 @@ void RigidBody::_direct_state_changed(Object *p_state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RigidBody::_notification(int p_what) {
|
void RigidBody::_notification(int p_what) {
|
||||||
|
|
||||||
|
#ifdef TOOLS_ENABLED
|
||||||
|
if (p_what == NOTIFICATION_ENTER_TREE) {
|
||||||
|
if (get_tree()->is_editor_hint()) {
|
||||||
|
set_notify_local_transform(true); //used for warnings and only in editor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p_what == NOTIFICATION_LOCAL_TRANSFORM_CHANGED) {
|
||||||
|
if (get_tree()->is_editor_hint()) {
|
||||||
|
update_configuration_warning();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void RigidBody::set_mode(Mode p_mode) {
|
void RigidBody::set_mode(Mode p_mode) {
|
||||||
|
@ -746,6 +761,22 @@ Array RigidBody::get_colliding_bodies() const {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String RigidBody::get_configuration_warning() const {
|
||||||
|
|
||||||
|
Transform t = get_transform();
|
||||||
|
|
||||||
|
String warning = CollisionObject::get_configuration_warning();
|
||||||
|
|
||||||
|
if ((get_mode() == MODE_RIGID || get_mode() == MODE_CHARACTER) && (ABS(t.basis.get_axis(0).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(1).length() - 1.0) > 0.05 || ABS(t.basis.get_axis(0).length() - 1.0) > 0.05)) {
|
||||||
|
if (warning != String()) {
|
||||||
|
warning += "\n";
|
||||||
|
}
|
||||||
|
warning += TTR("Size changes to RigidBody (in character or rigid modes) will be overriden by the physics engine when running.\nChange the size in children collision shapes instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return warning;
|
||||||
|
}
|
||||||
|
|
||||||
void RigidBody::_bind_methods() {
|
void RigidBody::_bind_methods() {
|
||||||
|
|
||||||
ObjectTypeDB::bind_method(_MD("set_mode", "mode"), &RigidBody::set_mode);
|
ObjectTypeDB::bind_method(_MD("set_mode", "mode"), &RigidBody::set_mode);
|
||||||
|
|
|
@ -252,6 +252,8 @@ public:
|
||||||
|
|
||||||
void apply_impulse(const Vector3 &p_pos, const Vector3 &p_impulse);
|
void apply_impulse(const Vector3 &p_pos, const Vector3 &p_impulse);
|
||||||
|
|
||||||
|
virtual String get_configuration_warning() const;
|
||||||
|
|
||||||
RigidBody();
|
RigidBody();
|
||||||
~RigidBody();
|
~RigidBody();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue