From 1826d042ad788fe5758475a220dc612c19481929 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Fri, 28 Oct 2022 10:38:45 +0200 Subject: [PATCH] [godot] Closes #2185, custom skins need to be referenced when set on a SpineSkeleton. --- spine-godot/spine_godot/SpineSkeleton.cpp | 5 ++++- spine-godot/spine_godot/SpineSkeleton.h | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/spine-godot/spine_godot/SpineSkeleton.cpp b/spine-godot/spine_godot/SpineSkeleton.cpp index 81169289b..1e8564de1 100644 --- a/spine-godot/spine_godot/SpineSkeleton.cpp +++ b/spine-godot/spine_godot/SpineSkeleton.cpp @@ -69,10 +69,11 @@ void SpineSkeleton::_bind_methods() { ClassDB::bind_method(D_METHOD("set_scale_y", "v"), &SpineSkeleton::set_scale_y); } -SpineSkeleton::SpineSkeleton() : skeleton(nullptr), sprite(nullptr) { +SpineSkeleton::SpineSkeleton() : skeleton(nullptr), sprite(nullptr), last_skin(nullptr) { } SpineSkeleton::~SpineSkeleton() { + if (last_skin.is_valid()) last_skin.unref(); delete skeleton; } @@ -136,6 +137,8 @@ void SpineSkeleton::set_skin_by_name(const String &skin_name) { void SpineSkeleton::set_skin(Ref new_skin) { SPINE_CHECK(skeleton, ) + if (last_skin.is_valid()) last_skin.unref(); + last_skin = new_skin; skeleton->setSkin(new_skin.is_valid() && new_skin->get_spine_object() ? new_skin->get_spine_object() : nullptr); } diff --git a/spine-godot/spine_godot/SpineSkeleton.h b/spine-godot/spine_godot/SpineSkeleton.h index dd9b8afd3..f4b7259ee 100644 --- a/spine-godot/spine_godot/SpineSkeleton.h +++ b/spine-godot/spine_godot/SpineSkeleton.h @@ -64,6 +64,7 @@ private: spine::Skeleton *skeleton; SpineSprite *sprite; spine::Vector bounds_vertex_buffer; + Ref last_skin; public: SpineSkeleton();