mirror of
https://github.com/godotengine/godot.git
synced 2024-11-21 03:18:37 +08:00
Merge pull request #39072 from dalexeev/cs2d_debug_color
Add debug_color property to CollisionShape2D
This commit is contained in:
commit
6a251fd0df
@ -14,6 +14,10 @@
|
||||
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
|
||||
</tutorials>
|
||||
<members>
|
||||
<member name="debug_color" type="Color" setter="set_debug_color" getter="get_debug_color" default="Color(0, 0, 0, 1)">
|
||||
The collision shape debug color.
|
||||
[b]Note:[/b] The default value is [member ProjectSettings.debug/shapes/collision/shape_color]. The [code]Color(0, 0, 0, 1)[/code] value documented here is a placeholder, and not the actual default debug color.
|
||||
</member>
|
||||
<member name="disabled" type="bool" setter="set_disabled" getter="is_disabled" default="false">
|
||||
A disabled collision shape has no effect in the world. This property should be changed with [method Object.set_deferred].
|
||||
</member>
|
||||
|
@ -49,6 +49,11 @@ void CollisionShape2D::_update_in_shape_owner(bool p_xform_only) {
|
||||
parent->shape_owner_set_one_way_collision_margin(owner_id, one_way_collision_margin);
|
||||
}
|
||||
|
||||
Color CollisionShape2D::_get_default_debug_color() const {
|
||||
SceneTree *st = SceneTree::get_singleton();
|
||||
return st ? st->get_debug_collisions_color() : Color();
|
||||
}
|
||||
|
||||
void CollisionShape2D::_notification(int p_what) {
|
||||
switch (p_what) {
|
||||
case NOTIFICATION_PARENTED: {
|
||||
@ -95,7 +100,7 @@ void CollisionShape2D::_notification(int p_what) {
|
||||
|
||||
rect = Rect2();
|
||||
|
||||
Color draw_col = get_tree()->get_debug_collisions_color();
|
||||
Color draw_col = debug_color;
|
||||
if (disabled) {
|
||||
float g = draw_col.get_v();
|
||||
draw_col.r = g;
|
||||
@ -110,7 +115,7 @@ void CollisionShape2D::_notification(int p_what) {
|
||||
|
||||
if (one_way_collision) {
|
||||
// Draw an arrow indicating the one-way collision direction
|
||||
draw_col = get_tree()->get_debug_collisions_color().inverted();
|
||||
draw_col = debug_color.inverted();
|
||||
if (disabled) {
|
||||
draw_col = draw_col.darkened(0.25);
|
||||
}
|
||||
@ -226,6 +231,40 @@ real_t CollisionShape2D::get_one_way_collision_margin() const {
|
||||
return one_way_collision_margin;
|
||||
}
|
||||
|
||||
void CollisionShape2D::set_debug_color(const Color &p_color) {
|
||||
debug_color = p_color;
|
||||
queue_redraw();
|
||||
}
|
||||
|
||||
Color CollisionShape2D::get_debug_color() const {
|
||||
return debug_color;
|
||||
}
|
||||
|
||||
bool CollisionShape2D::_property_can_revert(const StringName &p_name) const {
|
||||
if (p_name == "debug_color") {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CollisionShape2D::_property_get_revert(const StringName &p_name, Variant &r_property) const {
|
||||
if (p_name == "debug_color") {
|
||||
r_property = _get_default_debug_color();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void CollisionShape2D::_validate_property(PropertyInfo &p_property) const {
|
||||
if (p_property.name == "debug_color") {
|
||||
if (debug_color == _get_default_debug_color()) {
|
||||
p_property.usage = PROPERTY_USAGE_DEFAULT & ~PROPERTY_USAGE_STORAGE;
|
||||
} else {
|
||||
p_property.usage = PROPERTY_USAGE_DEFAULT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CollisionShape2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_shape", "shape"), &CollisionShape2D::set_shape);
|
||||
ClassDB::bind_method(D_METHOD("get_shape"), &CollisionShape2D::get_shape);
|
||||
@ -235,13 +274,19 @@ void CollisionShape2D::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("is_one_way_collision_enabled"), &CollisionShape2D::is_one_way_collision_enabled);
|
||||
ClassDB::bind_method(D_METHOD("set_one_way_collision_margin", "margin"), &CollisionShape2D::set_one_way_collision_margin);
|
||||
ClassDB::bind_method(D_METHOD("get_one_way_collision_margin"), &CollisionShape2D::get_one_way_collision_margin);
|
||||
ClassDB::bind_method(D_METHOD("set_debug_color", "color"), &CollisionShape2D::set_debug_color);
|
||||
ClassDB::bind_method(D_METHOD("get_debug_color"), &CollisionShape2D::get_debug_color);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "shape", PROPERTY_HINT_RESOURCE_TYPE, "Shape2D"), "set_shape", "get_shape");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "disabled"), "set_disabled", "is_disabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "one_way_collision"), "set_one_way_collision", "is_one_way_collision_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "one_way_collision_margin", PROPERTY_HINT_RANGE, "0,128,0.1,suffix:px"), "set_one_way_collision_margin", "get_one_way_collision_margin");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "debug_color"), "set_debug_color", "get_debug_color");
|
||||
// Default value depends on a project setting, override for doc generation purposes.
|
||||
ADD_PROPERTY_DEFAULT("debug_color", Color());
|
||||
}
|
||||
|
||||
CollisionShape2D::CollisionShape2D() {
|
||||
set_notify_local_transform(true);
|
||||
debug_color = _get_default_debug_color();
|
||||
}
|
||||
|
@ -42,15 +42,20 @@ class CollisionShape2D : public Node2D {
|
||||
Rect2 rect = Rect2(-Point2(10, 10), Point2(20, 20));
|
||||
uint32_t owner_id = 0;
|
||||
CollisionObject2D *parent = nullptr;
|
||||
void _shape_changed();
|
||||
bool disabled = false;
|
||||
bool one_way_collision = false;
|
||||
real_t one_way_collision_margin = 1.0;
|
||||
Color debug_color;
|
||||
|
||||
void _shape_changed();
|
||||
void _update_in_shape_owner(bool p_xform_only = false);
|
||||
Color _get_default_debug_color() const;
|
||||
|
||||
protected:
|
||||
void _notification(int p_what);
|
||||
bool _property_can_revert(const StringName &p_name) const;
|
||||
bool _property_get_revert(const StringName &p_name, Variant &r_property) const;
|
||||
void _validate_property(PropertyInfo &p_property) const;
|
||||
static void _bind_methods();
|
||||
|
||||
public:
|
||||
@ -72,6 +77,9 @@ public:
|
||||
void set_one_way_collision_margin(real_t p_margin);
|
||||
real_t get_one_way_collision_margin() const;
|
||||
|
||||
void set_debug_color(const Color &p_color);
|
||||
Color get_debug_color() const;
|
||||
|
||||
PackedStringArray get_configuration_warnings() const override;
|
||||
|
||||
CollisionShape2D();
|
||||
|
Loading…
Reference in New Issue
Block a user