mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-21 01:36:02 +08:00
[godot] Fix spurious errors on first import of .atlas file. Closes #2385
This commit is contained in:
parent
29288ca44d
commit
4f06406e96
2
spine-godot/.vscode/settings.json
vendored
2
spine-godot/.vscode/settings.json
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"cmake.configureOnOpen": false,
|
||||
"C_Cpp.intelliSenseEngine": "disabled",
|
||||
"C_Cpp.intelliSenseEngine": "default",
|
||||
"dotnet.defaultSolution": "disable"
|
||||
}
|
||||
|
||||
@ -33,14 +33,20 @@
|
||||
#include "scene/resources/texture.h"
|
||||
#include <spine/TextureLoader.h>
|
||||
|
||||
#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<StringName, Variant> custom_options;
|
||||
Dictionary generator_parameters;
|
||||
EditorFileSystem::get_singleton()->reimport_append(fixed_path, custom_options, "", generator_parameters);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if VERSION_MAJOR > 3
|
||||
Ref<Texture2D> 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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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<SpineAtlasResource> 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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user