diff --git a/spine-godot/spine_godot/SpineAtlasResource.cpp b/spine-godot/spine_godot/SpineAtlasResource.cpp index 496a1157f..f766eec87 100644 --- a/spine-godot/spine_godot/SpineAtlasResource.cpp +++ b/spine-godot/spine_godot/SpineAtlasResource.cpp @@ -247,7 +247,7 @@ void SpineAtlasResourceFormatLoader::get_recognized_extensions(List *ext } String SpineAtlasResourceFormatLoader::get_resource_type(const String &path) const { - return "SpineAtlasResource"; + return path.ends_with("spatlas") || path.ends_with(".atlas") ? "SpineAtlasResource" : ""; } bool SpineAtlasResourceFormatLoader::handles_type(const String &type) const { diff --git a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp index 07308c9b1..17b99c442 100644 --- a/spine-godot/spine_godot/SpineSkeletonFileResource.cpp +++ b/spine-godot/spine_godot/SpineSkeletonFileResource.cpp @@ -174,7 +174,7 @@ void SpineSkeletonFileResourceFormatLoader::get_recognized_extensions(List quad_indices; static spine::Vector scratch_vertices; static Vector scratch_points; -static void clear_triangles(SpineMesh2D *mesh_instance) { -#if VERSION_MAJOR > 3 - RenderingServer::get_singleton()->canvas_item_clear(mesh_instance->get_canvas_item()); -#else - VisualServer::get_singleton()->canvas_item_clear(mesh_instance->get_canvas_item()); -#endif -} - static void add_triangles(SpineMesh2D *mesh_instance, const Vector &vertices, const Vector &uvs, @@ -568,7 +560,7 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { spine::Attachment *attachment = slot->getAttachment(); SpineMesh2D *mesh_instance = mesh_instances[i]; mesh_instance->renderer_object = nullptr; - mesh_instance->set_light_mask(get_light_mask()); + if (!attachment) { skeleton_clipper->clipEnd(*slot); continue; @@ -636,7 +628,7 @@ void SpineSprite::update_meshes(Ref skeleton_ref) { } if (indices->size() > 0) { - // Set the mesh + mesh_instance->set_light_mask(get_light_mask()); size_t num_vertices = vertices->size() / 2; mesh_instance->vertices.resize((int) num_vertices); memcpy(mesh_instance->vertices.ptrw(), vertices->buffer(), num_vertices * 2 * sizeof(float)); diff --git a/spine-godot/spine_godot/SpineSprite.h b/spine-godot/spine_godot/SpineSprite.h index bec2d5ec8..842d8c19e 100644 --- a/spine-godot/spine_godot/SpineSprite.h +++ b/spine-godot/spine_godot/SpineSprite.h @@ -39,6 +39,8 @@ struct SpineRendererObject; class SpineSprite; +class Attachment; + class SpineMesh2D : public Node2D { GDCLASS(SpineMesh2D, Node2D); @@ -53,10 +55,16 @@ protected: Vector colors; Vector indices; SpineRendererObject *renderer_object; + int slotIndex; + Attachment *attachment; + ArrayMesh *mesh; public: - SpineMesh2D() : renderer_object(nullptr){}; - ~SpineMesh2D(){}; + SpineMesh2D() : renderer_object(nullptr), slotIndex(-1), attachment(nullptr), mesh(nullptr) {}; + ~SpineMesh2D(){ + if (mesh) memdelete(mesh); + }; + ArrayMesh *get_mesh() {return mesh;}; }; class SpineSprite : public Node2D,