diff options
Diffstat (limited to 'editor/import/resource_importer_scene.cpp')
-rw-r--r-- | editor/import/resource_importer_scene.cpp | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp index 6484c37ffe..4ef8ec48a0 100644 --- a/editor/import/resource_importer_scene.cpp +++ b/editor/import/resource_importer_scene.cpp @@ -47,6 +47,94 @@ #include "scene/resources/ray_shape.h" #include "scene/resources/sphere_shape.h" + + +uint32_t EditorSceneImporter::get_import_flags() const { + + if (get_script_instance()) { + return get_script_instance()->call("_get_import_flags"); + } + + ERR_FAIL_V(0); +} +void EditorSceneImporter::get_extensions(List<String> *r_extensions) const { + + if (get_script_instance()) { + Array arr= get_script_instance()->call("_get_extensions"); + for(int i=0;i<arr.size();i++) { + r_extensions->push_back(arr[i]); + } + return; + } + + ERR_FAIL(); + +} +Node *EditorSceneImporter::import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err) { + + if (get_script_instance()) { + return get_script_instance()->call("_import_scene",p_path,p_flags,p_bake_fps); + } + + ERR_FAIL_V(NULL); + +} + +Ref<Animation> EditorSceneImporter::import_animation(const String &p_path, uint32_t p_flags,int p_bake_fps) { + + if (get_script_instance()) { + return get_script_instance()->call("_import_animation",p_path,p_flags); + } + + ERR_FAIL_V(NULL); + +} + +//for documenters, these functions are useful when an importer calls an external conversion helper (like, fbx2gltf), +//and you want to load the resulting file + +Node* EditorSceneImporter::import_scene_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps) { + + return ResourceImporterScene::get_singleton()->import_scene_from_other_importer(this,p_path,p_flags,p_bake_fps); + +} + +Ref<Animation> EditorSceneImporter::import_animation_from_other_importer(const String &p_path, uint32_t p_flags, int p_bake_fps) { + + return ResourceImporterScene::get_singleton()->import_animation_from_other_importer(this,p_path,p_flags,p_bake_fps); + +} + +void EditorSceneImporter::_bind_methods() { + + ClassDB::bind_method(D_METHOD("import_scene_from_other_importer","path","flags","bake_fps"),&EditorSceneImporter::import_scene_from_other_importer); + ClassDB::bind_method(D_METHOD("import_animation_from_other_importer","path","flags","bake_fps"),&EditorSceneImporter::import_animation_from_other_importer); + + BIND_VMETHOD(MethodInfo(Variant::INT, "_get_import_flags")); + BIND_VMETHOD(MethodInfo(Variant::ARRAY, "_get_extensions")); + + MethodInfo mi = MethodInfo(Variant::OBJECT, "_import_scene",PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"), PropertyInfo(Variant::INT, "bake_fps")); + mi.return_val.class_name="Node"; + BIND_VMETHOD(mi); + mi = MethodInfo(Variant::OBJECT, "_import_animation",PropertyInfo(Variant::STRING, "path"), PropertyInfo(Variant::INT, "flags"), PropertyInfo(Variant::INT, "bake_fps")); + mi.return_val.class_name="Animation"; + BIND_VMETHOD(mi); + + BIND_CONSTANT( IMPORT_SCENE ); + BIND_CONSTANT( IMPORT_ANIMATION ); + BIND_CONSTANT( IMPORT_ANIMATION_DETECT_LOOP ); + BIND_CONSTANT( IMPORT_ANIMATION_OPTIMIZE ); + BIND_CONSTANT( IMPORT_ANIMATION_FORCE_ALL_TRACKS_IN_ALL_CLIPS ); + BIND_CONSTANT( IMPORT_ANIMATION_KEEP_VALUE_TRACKS ); + BIND_CONSTANT( IMPORT_GENERATE_TANGENT_ARRAYS ); + BIND_CONSTANT( IMPORT_FAIL_ON_MISSING_DEPENDENCIES ); + BIND_CONSTANT( IMPORT_MATERIALS_IN_INSTANCES ); + BIND_CONSTANT( IMPORT_USE_COMPRESSION ); + +} + + +///////////////////////////////// void EditorScenePostImport::_bind_methods() { BIND_VMETHOD(MethodInfo("post_import", PropertyInfo(Variant::OBJECT, "scene"))); @@ -1083,6 +1171,70 @@ void ResourceImporterScene::_replace_owner(Node *p_node, Node *p_scene, Node *p_ Node *n = p_node->get_child(i); _replace_owner(n, p_scene, p_new_owner); } + +} + +Node* ResourceImporterScene::import_scene_from_other_importer(EditorSceneImporter *p_exception,const String &p_path, uint32_t p_flags, int p_bake_fps) { + + Ref<EditorSceneImporter> importer; + String ext = p_path.get_extension().to_lower(); + + for (Set<Ref<EditorSceneImporter> >::Element *E = importers.front(); E; E = E->next()) { + + if (E->get().ptr()==p_exception) + continue; + List<String> extensions; + E->get()->get_extensions(&extensions); + + for (List<String>::Element *F = extensions.front(); F; F = F->next()) { + + if (F->get().to_lower() == ext) { + + importer = E->get(); + break; + } + } + + if (importer.is_valid()) + break; + } + + ERR_FAIL_COND_V(!importer.is_valid(),NULL); + + List<String> missing; + Error err; + return importer->import_scene(p_path,p_flags,p_bake_fps,&missing,&err); +} + +Ref<Animation> ResourceImporterScene::import_animation_from_other_importer(EditorSceneImporter *p_exception,const String &p_path, uint32_t p_flags, int p_bake_fps) { + + + Ref<EditorSceneImporter> importer; + String ext = p_path.get_extension().to_lower(); + + for (Set<Ref<EditorSceneImporter> >::Element *E = importers.front(); E; E = E->next()) { + + if (E->get().ptr()==p_exception) + continue; + List<String> extensions; + E->get()->get_extensions(&extensions); + + for (List<String>::Element *F = extensions.front(); F; F = F->next()) { + + if (F->get().to_lower() == ext) { + + importer = E->get(); + break; + } + } + + if (importer.is_valid()) + break; + } + + ERR_FAIL_COND_V(!importer.is_valid(),NULL); + + return importer->import_animation(p_path,p_flags,p_bake_fps); } Error ResourceImporterScene::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files) { |