diff --git a/spine-godot/.vscode/settings.json b/spine-godot/.vscode/settings.json index 75a3d9303..30280d3e9 100644 --- a/spine-godot/.vscode/settings.json +++ b/spine-godot/.vscode/settings.json @@ -1,5 +1,5 @@ { "cmake.configureOnOpen": false, - "C_Cpp.intelliSenseEngine": "disabled", + "C_Cpp.intelliSenseEngine": "default", "dotnet.defaultSolution": "disable" } diff --git a/spine-godot/spine_godot/SpineAtlasResource.cpp b/spine-godot/spine_godot/SpineAtlasResource.cpp index 956c230fa..7864d504c 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.cpp +++ b/spine-godot/spine_godot/SpineAtlasResource.cpp @@ -33,14 +33,20 @@ #include "scene/resources/texture.h" #include +#define TOOLS_ENABLED +#ifdef TOOLS_ENABLED +#include "editor/editor_file_system.h" +#endif + class GodotSpineTextureLoader : public spine::TextureLoader { Array *textures; Array *normal_maps; String normal_map_prefix; + bool is_importing; public: - GodotSpineTextureLoader(Array *_textures, Array *_normal_maps, const String &normal_map_prefix) : textures(_textures), normal_maps(_normal_maps), normal_map_prefix(normal_map_prefix) { + GodotSpineTextureLoader(Array *_textures, Array *_normal_maps, const String &normal_map_prefix, bool is_importing) : textures(_textures), normal_maps(_normal_maps), normal_map_prefix(normal_map_prefix), is_importing(is_importing) { } static String fix_path(const String &path) { @@ -65,6 +71,20 @@ public: Error error = OK; auto fixed_path = fix_path(String(path.buffer())); + +#ifdef VERSION_MAJOR > 4 +#ifdef TOOLS_ENABLED + // Required when importing into editor by e.g. drag & drop. The .png files + // of the atlas might not have been imported yet. + // See https://github.com/EsotericSoftware/spine-runtimes/issues/2385 + if (is_importing) { + HashMap custom_options; + Dictionary generator_parameters; + EditorFileSystem::get_singleton()->reimport_append(fixed_path, custom_options, "", generator_parameters); + } +#endif +#endif + #if VERSION_MAJOR > 3 Ref texture = ResourceLoader::load(fixed_path, "", ResourceFormatLoader::CACHE_MODE_REUSE, &error); #else @@ -156,13 +176,17 @@ String SpineAtlasResource::get_source_path() { } Error SpineAtlasResource::load_from_atlas_file(const String &path) { + load_from_atlas_file_internal(path, false); +} + +Error SpineAtlasResource::load_from_atlas_file_internal(const String &path, bool is_importing) { Error err; source_path = path; atlas_data = FileAccess::get_file_as_string(path, &err); if (err != OK) return err; clear(); - texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix); + texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix, is_importing); auto atlas_utf8 = atlas_data.utf8(); atlas = new spine::Atlas(atlas_utf8, atlas_utf8.length(), source_path.get_base_dir().utf8(), texture_loader); if (atlas) return OK; @@ -195,7 +219,7 @@ Error SpineAtlasResource::load_from_file(const String &path) { normal_map_prefix = content["normal_texture_prefix"]; clear(); - texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix); + texture_loader = new GodotSpineTextureLoader(&textures, &normal_maps, normal_map_prefix, false); auto utf8 = atlas_data.utf8(); atlas = new spine::Atlas(utf8.ptr(), utf8.size(), source_path.get_base_dir().utf8(), texture_loader); if (atlas) return OK; diff --git a/spine-godot/spine_godot/SpineAtlasResource.h b/spine-godot/spine_godot/SpineAtlasResource.h index 7c5bcfa6e..fb1003f39 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.h +++ b/spine-godot/spine_godot/SpineAtlasResource.h @@ -65,6 +65,8 @@ public: Error load_from_atlas_file(const String &path);// .atlas + Error load_from_atlas_file_internal(const String &path, bool is_importing);// .atlas + Error load_from_file(const String &path);// .spatlas Error save_to_file(const String &path);// .spatlas diff --git a/spine-godot/spine_godot/SpineEditorPlugin.cpp b/spine-godot/spine_godot/SpineEditorPlugin.cpp index 3fa4fbd1a..b2d8b060a 100644 --- a/spine-godot/spine_godot/SpineEditorPlugin.cpp +++ b/spine-godot/spine_godot/SpineEditorPlugin.cpp @@ -26,6 +26,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THE * SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ +#define TOOLS_ENABLED +#define VERSION_MAJOR 4 #ifdef TOOLS_ENABLED #include "SpineEditorPlugin.h" @@ -40,7 +42,7 @@ Error SpineAtlasResourceImportPlugin::import(const String &source_file, const St #endif Ref atlas(memnew(SpineAtlasResource)); atlas->set_normal_texture_prefix(options["normal_map_prefix"]); - atlas->load_from_atlas_file(source_file); + atlas->load_from_atlas_file_internal(source_file, true); String file_name = vformat("%s.%s", save_path, get_save_extension()); #if VERSION_MAJOR > 3