|
@@ -53,6 +53,7 @@ void CSGShape3D::set_use_collision(bool p_enable) {
|
|
PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
|
|
PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
|
|
set_collision_layer(collision_layer);
|
|
set_collision_layer(collision_layer);
|
|
set_collision_mask(collision_mask);
|
|
set_collision_mask(collision_mask);
|
|
|
|
+ set_collision_priority(collision_priority);
|
|
_make_dirty(); //force update
|
|
_make_dirty(); //force update
|
|
} else {
|
|
} else {
|
|
PhysicsServer3D::get_singleton()->free(root_collision_instance);
|
|
PhysicsServer3D::get_singleton()->free(root_collision_instance);
|
|
@@ -124,6 +125,17 @@ 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));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+void CSGShape3D::set_collision_priority(real_t p_priority) {
|
|
|
|
+ collision_priority = p_priority;
|
|
|
|
+ if (root_collision_instance.is_valid()) {
|
|
|
|
+ PhysicsServer3D::get_singleton()->body_set_collision_priority(root_collision_instance, p_priority);
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+real_t CSGShape3D::get_collision_priority() const {
|
|
|
|
+ return collision_priority;
|
|
|
|
+}
|
|
|
|
+
|
|
bool CSGShape3D::is_root_shape() const {
|
|
bool CSGShape3D::is_root_shape() const {
|
|
return !parent_shape;
|
|
return !parent_shape;
|
|
}
|
|
}
|
|
@@ -545,6 +557,7 @@ void CSGShape3D::_notification(int p_what) {
|
|
PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
|
|
PhysicsServer3D::get_singleton()->body_attach_object_instance_id(root_collision_instance, get_instance_id());
|
|
set_collision_layer(collision_layer);
|
|
set_collision_layer(collision_layer);
|
|
set_collision_mask(collision_mask);
|
|
set_collision_mask(collision_mask);
|
|
|
|
+ set_collision_priority(collision_priority);
|
|
_update_collision_faces();
|
|
_update_collision_faces();
|
|
}
|
|
}
|
|
} break;
|
|
} break;
|
|
@@ -632,6 +645,9 @@ void CSGShape3D::_bind_methods() {
|
|
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);
|
|
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_collision_priority", "priority"), &CSGShape3D::set_collision_priority);
|
|
|
|
+ ClassDB::bind_method(D_METHOD("get_collision_priority"), &CSGShape3D::get_collision_priority);
|
|
|
|
+
|
|
ClassDB::bind_method(D_METHOD("set_calculate_tangents", "enabled"), &CSGShape3D::set_calculate_tangents);
|
|
ClassDB::bind_method(D_METHOD("set_calculate_tangents", "enabled"), &CSGShape3D::set_calculate_tangents);
|
|
ClassDB::bind_method(D_METHOD("is_calculating_tangents"), &CSGShape3D::is_calculating_tangents);
|
|
ClassDB::bind_method(D_METHOD("is_calculating_tangents"), &CSGShape3D::is_calculating_tangents);
|
|
|
|
|
|
@@ -645,6 +661,7 @@ void CSGShape3D::_bind_methods() {
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_collision"), "set_use_collision", "is_using_collision");
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_collision"), "set_use_collision", "is_using_collision");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_layer", "get_collision_layer");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
|
|
ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), "set_collision_mask", "get_collision_mask");
|
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_priority"), "set_collision_priority", "get_collision_priority");
|
|
|
|
|
|
BIND_ENUM_CONSTANT(OPERATION_UNION);
|
|
BIND_ENUM_CONSTANT(OPERATION_UNION);
|
|
BIND_ENUM_CONSTANT(OPERATION_INTERSECTION);
|
|
BIND_ENUM_CONSTANT(OPERATION_INTERSECTION);
|