|
@@ -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) {
|