diff --git a/spine-flutter/lib/spine_flutter.dart b/spine-flutter/lib/spine_flutter.dart index 65e0217ab..6ccbd5499 100644 --- a/spine-flutter/lib/spine_flutter.dart +++ b/spine-flutter/lib/spine_flutter.dart @@ -1029,7 +1029,7 @@ class RegionAttachment extends Attachment { RegionAttachment._(spine_attachment attachment): super._(attachment); List computeWorldVertices(Slot slot) { - Pointer vertices = malloc.allocate(4 * 9).cast(); + Pointer vertices = malloc.allocate(4 * 8).cast(); _bindings.spine_region_attachment_compute_world_vertices(_attachment, slot._slot, vertices); final result = vertices.asTypedList(8).toList(); malloc.free(vertices); @@ -1133,6 +1133,37 @@ class RegionAttachment extends Attachment { class VertexAttachment extends Attachment { VertexAttachment._(spine_attachment attachment): super._(attachment); + + List computeWorldVertices(Slot slot) { + final worldVerticesLength = _bindings.spine_vertex_attachment_get_world_vertices_length(_attachment); + Pointer vertices = malloc.allocate(4 * worldVerticesLength).cast(); + _bindings.spine_vertex_attachment_compute_world_vertices(_attachment, slot._slot, vertices); + final result = vertices.asTypedList(worldVerticesLength).toList(); + malloc.free(vertices); + return result; + } + + Int32List getBones() { + final num = _bindings.spine_vertex_attachment_get_num_bones(_attachment); + final bones = _bindings.spine_region_attachment_get_bones(_attachment); + return bones.asTypedList(num); + } + + Float32List getVertices() { + final num = _bindings.spine_vertex_attachment_get_num_vertices(_attachment); + final vertices = _bindings.spine_region_attachment_get_vertices(_attachment); + return vertices.asTypedList(num); + } + + Attachment? getTimelineAttachment() { + final attachment = _bindings.spine_vertex_attachment_get_timeline_attachment(_attachment); + if (_attachment.address == nullptr.address) return null; + return Attachment._toSubclass(attachment); + } + + void setTimelineAttachment(Attachment? attachment) { + _bindings.spine_vertex_attachment_set_timeline_attachment(_attachment, attachment == null ? nullptr : attachment._attachment); + } } // FIXME diff --git a/spine-flutter/lib/spine_flutter_bindings_generated.dart b/spine-flutter/lib/spine_flutter_bindings_generated.dart index 5f6b6cdd1..f8eee8c33 100644 --- a/spine-flutter/lib/spine_flutter_bindings_generated.dart +++ b/spine-flutter/lib/spine_flutter_bindings_generated.dart @@ -5293,10 +5293,10 @@ class SpineFlutterBindings { ffi.Pointer Function(spine_region_attachment)>(); spine_attachment spine_vertex_attachment_get_timeline_attachment( - spine_vertex_attachment attachment, + spine_vertex_attachment timelineAttachment, ) { return _spine_vertex_attachment_get_timeline_attachment( - attachment, + timelineAttachment, ); } @@ -5310,18 +5310,21 @@ class SpineFlutterBindings { void spine_vertex_attachment_set_timeline_attachment( spine_vertex_attachment attachment, + spine_attachment timelineAttachment, ) { return _spine_vertex_attachment_set_timeline_attachment( attachment, + timelineAttachment, ); } - late final _spine_vertex_attachment_set_timeline_attachmentPtr = - _lookup>( - 'spine_vertex_attachment_set_timeline_attachment'); + late final _spine_vertex_attachment_set_timeline_attachmentPtr = _lookup< + ffi.NativeFunction< + ffi.Void Function(spine_vertex_attachment, spine_attachment)>>( + 'spine_vertex_attachment_set_timeline_attachment'); late final _spine_vertex_attachment_set_timeline_attachment = - _spine_vertex_attachment_set_timeline_attachmentPtr - .asFunction(); + _spine_vertex_attachment_set_timeline_attachmentPtr.asFunction< + void Function(spine_vertex_attachment, spine_attachment)>(); void spine_skin_set_attachment( spine_skin skin, diff --git a/spine-flutter/src/spine_flutter.cpp b/spine-flutter/src/spine_flutter.cpp index c61733246..3dd0dff4f 100644 --- a/spine-flutter/src/spine_flutter.cpp +++ b/spine-flutter/src/spine_flutter.cpp @@ -2262,10 +2262,10 @@ FFI_PLUGIN_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachme return _attachment->getTimelineAttachment(); } -FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment) { +FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment, spine_attachment timelineAttachment) { if (attachment == nullptr) return; VertexAttachment *_attachment = (VertexAttachment*)attachment; - _attachment->setTimelineAttachment((Attachment*)attachment); + _attachment->setTimelineAttachment((Attachment*)timelineAttachment); } // Skin diff --git a/spine-flutter/src/spine_flutter.h b/spine-flutter/src/spine_flutter.h index 490adab9f..e62552714 100644 --- a/spine-flutter/src/spine_flutter.h +++ b/spine-flutter/src/spine_flutter.h @@ -525,8 +525,8 @@ FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_bones(spine_vertex_attachm FFI_PLUGIN_EXPORT int *spine_region_attachment_get_bones(spine_region_attachment attachment); FFI_PLUGIN_EXPORT int spine_vertex_attachment_get_num_vertices(spine_vertex_attachment attachment); FFI_PLUGIN_EXPORT float *spine_region_attachment_get_vertices(spine_region_attachment attachment); -FFI_PLUGIN_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment attachment); -FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment); +FFI_PLUGIN_EXPORT spine_attachment spine_vertex_attachment_get_timeline_attachment(spine_vertex_attachment timelineAttachment); +FFI_PLUGIN_EXPORT void spine_vertex_attachment_set_timeline_attachment(spine_vertex_attachment attachment, spine_attachment timelineAttachment); FFI_PLUGIN_EXPORT void spine_skin_set_attachment(spine_skin skin, int slotIndex, const char* name, spine_attachment attachment); FFI_PLUGIN_EXPORT spine_attachment spine_skin_get_attachment(spine_skin skin, int slotIndex, const char* name);