mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 16:03:29 +00:00
Fix collision reposition with CSGShape3D
This commit is contained in:
parent
1586c5674b
commit
6f0a0ba408
3 changed files with 17 additions and 0 deletions
|
@ -4381,8 +4381,11 @@ void Node3DEditorViewport::assign_pending_data_pointers(Node3D *p_preview_node,
|
||||||
|
|
||||||
void _insert_rid_recursive(Node *node, HashSet<RID> &rids) {
|
void _insert_rid_recursive(Node *node, HashSet<RID> &rids) {
|
||||||
CollisionObject3D *co = Object::cast_to<CollisionObject3D>(node);
|
CollisionObject3D *co = Object::cast_to<CollisionObject3D>(node);
|
||||||
|
|
||||||
if (co) {
|
if (co) {
|
||||||
rids.insert(co->get_rid());
|
rids.insert(co->get_rid());
|
||||||
|
} else if (node->is_class("CSGShape3D")) { // HACK: We should avoid referencing module logic.
|
||||||
|
rids.insert(node->call("_get_root_collision_instance"));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < node->get_child_count(); i++) {
|
for (int i = 0; i < node->get_child_count(); i++) {
|
||||||
|
|
|
@ -166,6 +166,16 @@ bool CSGShape3D::get_collision_mask_value(int p_layer_number) const {
|
||||||
return get_collision_mask() & (1 << (p_layer_number - 1));
|
return get_collision_mask() & (1 << (p_layer_number - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RID CSGShape3D::_get_root_collision_instance() const {
|
||||||
|
if (root_collision_instance.is_valid()) {
|
||||||
|
return root_collision_instance;
|
||||||
|
} else if (parent_shape) {
|
||||||
|
return parent_shape->_get_root_collision_instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
return RID();
|
||||||
|
}
|
||||||
|
|
||||||
void CSGShape3D::set_collision_priority(real_t p_priority) {
|
void CSGShape3D::set_collision_priority(real_t p_priority) {
|
||||||
collision_priority = p_priority;
|
collision_priority = p_priority;
|
||||||
if (root_collision_instance.is_valid()) {
|
if (root_collision_instance.is_valid()) {
|
||||||
|
@ -982,6 +992,8 @@ void CSGShape3D::_bind_methods() {
|
||||||
ClassDB::bind_method(D_METHOD("set_collision_mask_value", "layer_number", "value"), &CSGShape3D::set_collision_mask_value);
|
ClassDB::bind_method(D_METHOD("set_collision_mask_value", "layer_number", "value"), &CSGShape3D::set_collision_mask_value);
|
||||||
ClassDB::bind_method(D_METHOD("get_collision_mask_value", "layer_number"), &CSGShape3D::get_collision_mask_value);
|
ClassDB::bind_method(D_METHOD("get_collision_mask_value", "layer_number"), &CSGShape3D::get_collision_mask_value);
|
||||||
|
|
||||||
|
ClassDB::bind_method(D_METHOD("_get_root_collision_instance"), &CSGShape3D::_get_root_collision_instance);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("set_collision_layer_value", "layer_number", "value"), &CSGShape3D::set_collision_layer_value);
|
ClassDB::bind_method(D_METHOD("set_collision_layer_value", "layer_number", "value"), &CSGShape3D::set_collision_layer_value);
|
||||||
ClassDB::bind_method(D_METHOD("get_collision_layer_value", "layer_number"), &CSGShape3D::get_collision_layer_value);
|
ClassDB::bind_method(D_METHOD("get_collision_layer_value", "layer_number"), &CSGShape3D::get_collision_layer_value);
|
||||||
|
|
||||||
|
|
|
@ -156,6 +156,8 @@ public:
|
||||||
void set_collision_mask_value(int p_layer_number, bool p_value);
|
void set_collision_mask_value(int p_layer_number, bool p_value);
|
||||||
bool get_collision_mask_value(int p_layer_number) const;
|
bool get_collision_mask_value(int p_layer_number) const;
|
||||||
|
|
||||||
|
RID _get_root_collision_instance() const;
|
||||||
|
|
||||||
void set_collision_priority(real_t p_priority);
|
void set_collision_priority(real_t p_priority);
|
||||||
real_t get_collision_priority() const;
|
real_t get_collision_priority() const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue