diff --git a/plugin/mdr_import_plugin_base.cpp b/plugin/mdr_import_plugin_base.cpp index 684d037..b4c79af 100644 --- a/plugin/mdr_import_plugin_base.cpp +++ b/plugin/mdr_import_plugin_base.cpp @@ -121,10 +121,16 @@ Error MDRImportPluginBase::process_node(Node *n, const String &p_source_file, co Ref coll; coll.instance(); - process_node_multi(n, p_source_file, p_save_path, p_options, r_platform_variants, r_gen_files, r_metadata, coll); + Ref copy_coll; if (save_copy_as_resource) { - save_mdrcoll_copy_as_tres(p_source_file, coll); + copy_coll.instance(); + } + + process_node_multi(n, p_source_file, p_save_path, p_options, r_platform_variants, r_gen_files, r_metadata, coll, copy_coll); + + if (save_copy_as_resource) { + save_mdrcoll_copy_as_tres(p_source_file, copy_coll); } return ResourceSaver::save(p_save_path + "." + get_save_extension(), coll); @@ -263,11 +269,19 @@ Error MDRImportPluginBase::process_node_single_separated_bones(Node *n, const St Ref mdrl = ResourceLoader::load(filename); + if (save_copy_as_resource) { + save_mdr_copy_as_tres(filename, mdrl); + } + coll->add_mdr(mdrl); } if (save_copy_as_resource) { - save_mdrcoll_copy_as_tres(p_source_file, coll); + // String node_name = c->get_name(); + // node_name = node_name.to_lower(); + + // String mdr_coll_name = p_source_file.get_basename() + "_mdrcoll_" + node_name + "_" + String::num(j) + "." + get_save_extension(); + // save_mdrcoll_copy_as_tres(mdr_coll_name, coll); } return ResourceSaver::save(p_save_path + "." + get_save_extension(), coll); @@ -281,7 +295,7 @@ Error MDRImportPluginBase::process_node_single_separated_bones(Node *n, const St return Error::ERR_PARSE_ERROR; } -Error MDRImportPluginBase::process_node_multi(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata, Ref coll) { +Error MDRImportPluginBase::process_node_multi(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata, Ref coll, Ref copy_coll, int node_count) { #if MESH_UTILS_PRESENT MDRImportPluginBase::MDROptimizationType optimization_type = static_cast(static_cast(p_options["optimization_type"])); #endif @@ -313,14 +327,27 @@ Error MDRImportPluginBase::process_node_multi(Node *n, const String &p_source_fi } #endif + if (copy_coll.is_valid()) { + String node_name = c->get_name(); + node_name = node_name.to_lower(); + String filename = p_source_file.get_basename() + "_" + node_name + "_" + String::num(node_count) + ".tres"; + + Error err = ResourceSaver::save(filename, mdr); + Ref mdrtl = ResourceLoader::load(filename); + copy_coll->add_mdr(mdrtl); + + if (err != Error::OK) { + return err; + } + } + String node_name = c->get_name(); node_name = node_name.to_lower(); - String filename = p_source_file.get_basename() + "_" + node_name + "." + get_save_extension(); + String filename = p_source_file.get_basename() + "_" + node_name + "_" + String::num(node_count) + +"." + get_save_extension(); + ++node_count; Error err = ResourceSaver::save(filename, mdr); - Ref mdrl = ResourceLoader::load(filename); - coll->add_mdr(mdrl); if (err != Error::OK) { @@ -328,7 +355,7 @@ Error MDRImportPluginBase::process_node_multi(Node *n, const String &p_source_fi } } - process_node_multi(c, p_source_file, p_save_path, p_options, r_platform_variants, r_gen_files, r_metadata, coll); + process_node_multi(c, p_source_file, p_save_path, p_options, r_platform_variants, r_gen_files, r_metadata, coll, copy_coll, node_count); } return Error::OK; @@ -907,7 +934,7 @@ void MDRImportPluginBase::save_mdr_copy_as_tres(const String &p_source_file, con ResourceSaver::save(sp, res); } -void MDRImportPluginBase::save_mdrcoll_copy_as_tres(const String &p_source_file, const Ref &res) { +void MDRImportPluginBase::save_mdrcoll_copy_as_tres(const String &p_source_file, const Ref &res) { String sp = p_source_file; String ext = p_source_file.get_extension(); sp.resize(sp.size() - ext.size()); diff --git a/plugin/mdr_import_plugin_base.h b/plugin/mdr_import_plugin_base.h index 62394bd..bd804c4 100644 --- a/plugin/mdr_import_plugin_base.h +++ b/plugin/mdr_import_plugin_base.h @@ -94,7 +94,7 @@ public: int get_mesh_count(Node *n); Error process_node_single(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata); Error process_node_single_separated_bones(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata); - Error process_node_multi(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata, Ref coll); + Error process_node_multi(Node *n, const String &p_source_file, const String &p_save_path, const Map &p_options, List *r_platform_variants, List *r_gen_files, Variant *r_metadata, Ref coll, Ref copy_coll, int node_count = 0); Ref get_mesh(MeshInstance *mi, const Map &p_options, MeshDataResource::ColliderType collider_type, Vector3 scale); Ref get_mesh_arrays(Array &arrs, const Map &p_options, MeshDataResource::ColliderType collider_type, Vector3 scale); @@ -104,7 +104,7 @@ public: Ref scale_shape(Ref shape, const Vector3 &scale); void save_mdr_copy_as_tres(const String &p_source_file, const Ref &res); - void save_mdrcoll_copy_as_tres(const String &p_source_file, const Ref &res); + void save_mdrcoll_copy_as_tres(const String &p_source_file, const Ref &res); MDRImportPluginBase(); ~MDRImportPluginBase();