소스 검색

[godot] Add support for load from disk for Godot 3.x and example

Mario Zechner 9 달 전
부모
커밋
d4a3444328

+ 24 - 0
spine-godot/example/examples/13-load-from-disk/load_from_disk.gd

@@ -0,0 +1,24 @@
+extends Node2D
+
+func _ready():
+	# Load the skeleton file
+	var skeleton_file_res = SpineSkeletonFileResource.new();
+	skeleton_file_res.load_from_file("/Users/badlogic/workspaces/spine-runtimes/examples/coin/export/coin-pro.skel");
+	
+	# Load the atlas file
+	var atlas_res = SpineAtlasResource.new();
+	atlas_res.load_from_atlas_file("/Users/badlogic/workspaces/spine-runtimes/examples/coin/export/coin.atlas");
+	
+	# Create a skeleton data resource, you can share this across multiple sprites
+	var skeleton_data_res = SpineSkeletonDataResource.new();
+	skeleton_data_res.skeleton_file_res = skeleton_file_res;
+	skeleton_data_res.atlas_res = atlas_res
+	
+	# Create a sprite from the skeleton data and add it as a child
+	var sprite = SpineSprite.new();
+	sprite.skeleton_data_res = skeleton_data_res;
+	sprite.position.x = 200;
+	sprite.position.y = 200;
+	sprite.get_animation_state().set_animation("animation", true, 0);
+	self.add_child(sprite)
+	pass

+ 6 - 0
spine-godot/example/examples/13-load-from-disk/load_from_disk.tscn

@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=2]
+
+[ext_resource path="res://examples/13-load-from-disk/load_from_disk.gd" type="Script" id=1]
+
+[node name="load_from_disk" type="Node2D"]
+script = ExtResource( 1 )

+ 16 - 12
spine-godot/spine_godot/SpineAtlasResource.cpp

@@ -30,11 +30,16 @@
 #include "SpineAtlasResource.h"
 #include "SpineRendererObject.h"
 #include "core/io/json.h"
-#include "core/io/image.h"
-#include "scene/resources/image_texture.h"
 #include "scene/resources/texture.h"
 #include <spine/TextureLoader.h>
 
+#if VERSION_MAJOR > 3
+#include "core/io/image.h"
+#include "scene/resources/image_texture.h"
+#else
+#include "core/image.h"
+#endif
+
 #ifdef TOOLS_ENABLED
 #include "editor/editor_file_system.h"
 #endif
@@ -90,22 +95,21 @@ public:
 			Vector<uint8_t> buf = FileAccess::get_file_as_array(path, &error);
 			if (error == OK) {
 				Ref<Image> img;
-				img.instantiate();
-				String filename = path.get_filename().to_lower();
-				if (filename.ends_with(".png")) {
-					img->load_png_from_buffer(buf);
-				} else if (filename_lower.ends_with(".jpg")) {
-					img->load_jpg_from_buffer(buf);
-				}
-				return ImageTexture::create_from_image(img);
+				INSTANTIATE(img);
+				img->load(path);
+
+				Ref<ImageTexture> texture;
+				INSTANTIATE(texture);
+				texture->create_from_image(img);
+				return texture;
 			}
+			return Ref<Texture>();
 		}
-		return Ref<Texture>();
 	}
 #endif
 
 	void import_image_resource(const String &path) {
-#ifdef VERSION_MAJOR> 4
+#if 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.