Skip to content

Commit adb86dd

Browse files
committed
Add Additional Physics Options to Scene Importer.
1 parent 2210111 commit adb86dd

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

editor/import/resource_importer_scene.cpp

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1245,6 +1245,10 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap<
12451245
col->set_owner(p_node->get_owner());
12461246
col->set_transform(get_collision_shapes_transform(node_settings));
12471247
col->set_position(p_applied_root_scale * col->get_position());
1248+
const Ref<PhysicsMaterial> &pmo = node_settings["physics/physics_material_override"];
1249+
if (!pmo.is_null()) {
1250+
col->set_physics_material_override(pmo);
1251+
}
12481252
base = col;
12491253
} break;
12501254
case MESH_PHYSICS_RIGID_BODY_AND_MESH: {
@@ -1257,6 +1261,10 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap<
12571261
mi->set_transform(Transform3D());
12581262
rigid_body->add_child(mi, true);
12591263
mi->set_owner(rigid_body->get_owner());
1264+
const Ref<PhysicsMaterial> &pmo = node_settings["physics/physics_material_override"];
1265+
if (!pmo.is_null()) {
1266+
rigid_body->set_physics_material_override(pmo);
1267+
}
12601268
base = rigid_body;
12611269
} break;
12621270
case MESH_PHYSICS_STATIC_COLLIDER_ONLY: {
@@ -1268,6 +1276,10 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap<
12681276
p_node->set_owner(nullptr);
12691277
memdelete(p_node);
12701278
p_node = col;
1279+
const Ref<PhysicsMaterial> &pmo = node_settings["physics/physics_material_override"];
1280+
if (!pmo.is_null()) {
1281+
col->set_physics_material_override(pmo);
1282+
}
12711283
base = col;
12721284
} break;
12731285
case MESH_PHYSICS_AREA_ONLY: {
@@ -1284,6 +1296,9 @@ Node *ResourceImporterScene::_post_fix_node(Node *p_node, Node *p_root, HashMap<
12841296
} break;
12851297
}
12861298

1299+
base->set_collision_layer(node_settings["physics/layer"]);
1300+
base->set_collision_mask(node_settings["physics/mask"]);
1301+
12871302
for (const Ref<Shape3D> &E : shapes) {
12881303
CollisionShape3D *cshape = memnew(CollisionShape3D);
12891304
cshape->set_shape(E);
@@ -1602,6 +1617,9 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
16021617
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "generate/navmesh", PROPERTY_HINT_ENUM, "Disabled,Mesh + NavMesh,NavMesh Only"), 0));
16031618
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/body_type", PROPERTY_HINT_ENUM, "Static,Dynamic,Area"), 0));
16041619
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/shape_type", PROPERTY_HINT_ENUM, "Decompose Convex,Simple Convex,Trimesh,Box,Sphere,Cylinder,Capsule", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 0));
1620+
r_options->push_back(ImportOption(PropertyInfo(Variant::OBJECT, "physics/physics_material_override", PROPERTY_HINT_RESOURCE_TYPE, "PhysicsMaterial"), Variant()));
1621+
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/layer", PROPERTY_HINT_LAYERS_3D_PHYSICS), 1));
1622+
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "physics/mask", PROPERTY_HINT_LAYERS_3D_PHYSICS), 1));
16051623

16061624
// Decomposition
16071625
Ref<MeshConvexDecompositionSettings> decomposition_default = Ref<MeshConvexDecompositionSettings>();
@@ -1700,9 +1718,7 @@ bool ResourceImporterScene::get_internal_option_visibility(InternalImportCategor
17001718
p_options.has("generate/physics") &&
17011719
p_options["generate/physics"].operator bool();
17021720

1703-
if (
1704-
p_option == "physics/body_type" ||
1705-
p_option == "physics/shape_type") {
1721+
if (p_option.find("physics/") >= 0) {
17061722
// Show if need to generate collisions.
17071723
return generate_physics;
17081724
}

0 commit comments

Comments
 (0)