From e6d849c0842c315bfb472a030279b7a6b02b7066 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 31 Aug 2022 19:42:42 +0200 Subject: [PATCH] [flutter] Wrapped SkeletonData. --- spine-flutter/example/lib/main.dart | 11 +- spine-flutter/lib/spine_flutter.dart | 315 ++++++++++++++++-- .../lib/spine_flutter_bindings_generated.dart | 103 +++--- spine-flutter/src/spine_flutter.cpp | 24 +- spine-flutter/src/spine_flutter.h | 24 +- 5 files changed, 381 insertions(+), 96 deletions(-) diff --git a/spine-flutter/example/lib/main.dart b/spine-flutter/example/lib/main.dart index 99f2bb7f9..fb90a8b6c 100644 --- a/spine-flutter/example/lib/main.dart +++ b/spine-flutter/example/lib/main.dart @@ -48,12 +48,19 @@ class SimpleAnimation extends StatelessWidget { @override Widget build(BuildContext context) { reportLeaks(); - final controller = SpineWidgetController((controller) => controller.animationState?.setAnimation(0, "walk", true)); + final controller = SpineWidgetController((controller) { + // Set the walk animation on track 0, let it loop + controller.animationState?.setAnimation(0, "walk", true); + + print("Skeleton name: ${controller.skeletonData?.getName()}"); + print("Skeleton version: ${controller.skeletonData?.getVersion()}"); + print("Skeleton hash: ${controller.skeletonData?.getHash()}"); + }); return Scaffold( appBar: AppBar(title: const Text('Spineboy')), body: SpineWidget.asset("assets/spineboy-pro.skel", "assets/spineboy.atlas", controller), - // body: const SpineWidget.file("/Users/badlogic/workspaces/spine-runtimes/examples/spineboy/export/spineboy-pro.skel", "/Users/badlogic/workspaces/spine-runtimes/examples/spineboy/export/spineboy.atlas"), + // body: SpineWidget.file("/Users/badlogic/workspaces/spine-runtimes/examples/spineboy/export/spineboy-pro.skel", "/Users/badlogic/workspaces/spine-runtimes/examples/spineboy/export/spineboy.atlas", controller), // body: const SpineWidget.http("https://marioslab.io/dump/spineboy/spineboy-pro.json", "https://marioslab.io/dump/spineboy/spineboy.atlas"), ); } diff --git a/spine-flutter/lib/spine_flutter.dart b/spine-flutter/lib/spine_flutter.dart index 0f38146bd..1c388a817 100644 --- a/spine-flutter/lib/spine_flutter.dart +++ b/spine-flutter/lib/spine_flutter.dart @@ -47,7 +47,7 @@ class Atlas { final atlasData = convert.utf8.decode(atlasBytes); final atlasDataNative = atlasData.toNativeUtf8(); final atlas = _bindings.spine_atlas_load(atlasDataNative.cast()); - calloc.free(atlasDataNative); + malloc.free(atlasDataNative); if (atlas.ref.error.address != nullptr.address) { final Pointer error = atlas.ref.error.cast(); final message = error.toDartString(); @@ -97,20 +97,21 @@ class Atlas { } } +// FIXME class SkeletonData { - final spine_skeleton_data _skeletonData; + final spine_skeleton_data _data; bool _disposed; - SkeletonData(this._skeletonData): _disposed = false; + SkeletonData(this._data): _disposed = false; static SkeletonData fromJson(Atlas atlas, String json) { final jsonNative = json.toNativeUtf8(); final result = _bindings.spine_skeleton_data_load_json(atlas._atlas, jsonNative.cast()); - calloc.free(jsonNative); + malloc.free(jsonNative); if (result.error.address != nullptr.address) { final Pointer error = result.error.cast(); final message = error.toDartString(); - calloc.free(error); + malloc.free(error); throw Exception("Couldn't load skeleton data: $message"); } return SkeletonData(result.skeletonData); @@ -124,16 +125,259 @@ class SkeletonData { if (result.error.address != nullptr.address) { final Pointer error = result.error.cast(); final message = error.toDartString(); - calloc.free(error); + malloc.free(error); throw Exception("Couldn't load skeleton data: $message"); } return SkeletonData(result.skeletonData); } + /// Finds a bone by comparing each bone's name. It is more efficient to cache the results of this method than to call it multiple times. + BoneData? findBone(String name) { + final nativeName = name.toNativeUtf8(); + final bone = _bindings.spine_skeleton_data_find_bone(_data, nativeName.cast()); + malloc.free(nativeName); + if (bone.address == nullptr.address) return null; + return BoneData(bone); + } + + /// Finds a slot by comparing each slot's name. It is more efficient to cache the results of this method than to call it multiple times. + SlotData? findSlot(String name) { + final nativeName = name.toNativeUtf8(); + final slot = _bindings.spine_skeleton_data_find_slot(_data, nativeName.cast()); + malloc.free(nativeName); + if (slot.address == nullptr.address) return null; + return SlotData(slot); + } + + /// Finds a skin by comparing each skin's name. It is more efficient to cache the results of this method than to call it + /// multiple times. + Skin? findSkin(String name) { + final nativeName = name.toNativeUtf8(); + final skin = _bindings.spine_skeleton_data_find_skin(_data, nativeName.cast()); + malloc.free(nativeName); + if (skin.address == nullptr.address) return null; + return Skin(skin); + } + + /// Finds an event by comparing each events's name. It is more efficient to cache the results of this method than to call it + /// multiple times. + EventData? findEvent(String name) { + final nativeName = name.toNativeUtf8(); + final event = _bindings.spine_skeleton_data_find_event(_data, nativeName.cast()); + malloc.free(nativeName); + if (event.address == nullptr.address) return null; + return EventData(event); + } + + /// Finds an animation by comparing each animation's name. It is more efficient to cache the results of this method than to + /// call it multiple times. + Animation? findAnimation(String name) { + final nativeName = name.toNativeUtf8(); + final animation = _bindings.spine_skeleton_data_find_animation(_data, nativeName.cast()); + malloc.free(nativeName); + if (animation.address == nullptr.address) return null; + return Animation(animation); + } + + /// Finds an IK constraint by comparing each IK constraint's name. It is more efficient to cache the results of this method + /// than to call it multiple times. + IkConstraintData? findIkConstraint(String name) { + final nativeName = name.toNativeUtf8(); + final constraint = _bindings.spine_skeleton_data_find_ik_constraint(_data, nativeName.cast()); + malloc.free(nativeName); + if (constraint.address == nullptr.address) return null; + return IkConstraintData(constraint); + } + + /// Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of + /// this method than to call it multiple times. + TransformConstraintData? findTransformConstraint(String name) { + final nativeName = name.toNativeUtf8(); + final constraint = _bindings.spine_skeleton_data_find_transform_constraint(_data, nativeName.cast()); + malloc.free(nativeName); + if (constraint.address == nullptr.address) return null; + return TransformConstraintData(constraint); + } + + /// Finds a path constraint by comparing each path constraint's name. It is more efficient to cache the results of this method + /// than to call it multiple times. + PathConstraintData? findPathConstraint(String name) { + final nativeName = name.toNativeUtf8(); + final constraint = _bindings.spine_skeleton_data_find_transform_constraint(_data, nativeName.cast()); + malloc.free(nativeName); + if (constraint.address == nullptr.address) return null; + return PathConstraintData(constraint); + } + + /// The skeleton's name, which by default is the name of the skeleton data file when possible, or null when a name hasn't been + /// set. + String? getName() { + Pointer name = _bindings.spine_skeleton_data_get_name(_data).cast(); + if (name.address == nullptr.address) return null; + return name.toDartString(); + } + + /// The skeleton's bones, sorted parent first. The root bone is always the first bone. + List getBones() { + final List bones = []; + final numBones = _bindings.spine_skeleton_data_get_num_bones(_data); + final nativeBones = _bindings.spine_skeleton_data_get_bones(_data); + for (int i = 0; i < numBones; i++) { + bones.add(BoneData(nativeBones[i])); + } + return bones; + } + + /// The skeleton's slots. + List getSlots() { + final List slots = []; + final numSlots = _bindings.spine_skeleton_data_get_num_slots(_data); + final nativeSlots = _bindings.spine_skeleton_data_get_slots(_data); + for (int i = 0; i < numSlots; i++) { + slots.add(SlotData(nativeSlots[i])); + } + return slots; + } + + /// All skins, including the default skin. + List getSkins() { + final List skins = []; + final numSkins = _bindings.spine_skeleton_data_get_num_skins(_data); + final nativeSkins = _bindings.spine_skeleton_data_get_skins(_data); + for (int i = 0; i < numSkins; i++) { + skins.add(Skin(nativeSkins[i])); + } + return skins; + } + + /// The skeleton's default skin. By default this skin contains all attachments that were not in a skin in Spine. + Skin? getDefaultSkin() { + final skin = _bindings.spine_skeleton_data_get_default_skin(_data); + if (skin.address == nullptr.address) return null; + return Skin(skin); + } + + void setDefaultSkin(Skin? skin) { + if (skin == null) { + _bindings.spine_skeleton_data_set_default_skin(_data, nullptr); + } else { + _bindings.spine_skeleton_data_set_default_skin(_data, skin._skin); + } + } + + /// The skeleton's events. + List getEvents() { + final List events = []; + final numEvents = _bindings.spine_skeleton_data_get_num_events(_data); + final nativeEvents = _bindings.spine_skeleton_data_get_events(_data); + for (int i = 0; i < numEvents; i++) { + events.add(EventData(nativeEvents[i])); + } + return events; + } + + + /// The skeleton's animations. + List getAnimations() { + final List events = []; + final numAnimation = _bindings.spine_skeleton_data_get_num_animations(_data); + final nativeAnimations = _bindings.spine_skeleton_data_get_animations(_data); + for (int i = 0; i < numAnimation; i++) { + events.add(Animation(nativeAnimations[i])); + } + return events; + } + + /// The skeleton's IK constraints. + List getIkConstraints() { + final List constraints = []; + final numConstraints = _bindings.spine_skeleton_data_get_num_ik_constraints(_data); + final nativeConstraints = _bindings.spine_skeleton_data_get_ik_constraints(_data); + for (int i = 0; i < numConstraints; i++) { + constraints.add(IkConstraintData(nativeConstraints[i])); + } + return constraints; + } + + /// The skeleton's transform constraints. + List getTransformConstraints() { + final List constraints = []; + final numConstraints = _bindings.spine_skeleton_data_get_num_transform_constraints(_data); + final nativeConstraints = _bindings.spine_skeleton_data_get_transform_constraints(_data); + for (int i = 0; i < numConstraints; i++) { + constraints.add(TransformConstraint(nativeConstraints[i])); + } + return constraints; + } + + /// The skeleton's path constraints. + List getPathConstraints() { + final List constraints = []; + final numConstraints = _bindings.spine_skeleton_data_get_num_path_constraints(_data); + final nativeConstraints = _bindings.spine_skeleton_data_get_path_constraints(_data); + for (int i = 0; i < numConstraints; i++) { + constraints.add(PathConstraintData(nativeConstraints[i])); + } + return constraints; + } + + /// The X coordinate of the skeleton's axis aligned bounding box in the setup pose. + double getX() { + return _bindings.spine_skeleton_data_get_x(_data); + } + + /// The Y coordinate of the skeleton's axis aligned bounding box in the setup pose. + double getY() { + return _bindings.spine_skeleton_data_get_y(_data); + } + + /// The width of the skeleton's axis aligned bounding box in the setup pose. + double getWidth() { + return _bindings.spine_skeleton_data_get_width(_data); + } + + /// The height of the skeleton's axis aligned bounding box in the setup pose. + double getHeight() { + return _bindings.spine_skeleton_data_get_height(_data); + } + + /// The Spine version used to export the skeleton data. + String? getVersion() { + Pointer name = _bindings.spine_skeleton_data_get_version(_data).cast(); + if (name.address == nullptr.address) return null; + return name.toDartString(); + } + + /// The skeleton data hash. This value will change if any of the skeleton data has changed. + String? getHash() { + Pointer name = _bindings.spine_skeleton_data_get_hash(_data).cast(); + if (name.address == nullptr.address) return null; + return name.toDartString(); + } + + /// The path to the images directory as defined in Spine, or null if nonessential data was not exported. + String? getImagesPath() { + Pointer name = _bindings.spine_skeleton_data_get_images_path(_data).cast(); + if (name.address == nullptr.address) return null; + return name.toDartString(); + } + + /// The path to the audio directory as defined in Spine, or null if nonessential data was not exported. + String? getAudioPath() { + Pointer name = _bindings.spine_skeleton_data_get_audio_path(_data).cast(); + if (name.address == nullptr.address) return null; + return name.toDartString(); + } + + /// The dopesheet FPS in Spine, or zero if nonessential data was not exported. + double getFps() { + return _bindings.spine_skeleton_data_get_fps(_data); + } + void dispose() { if (_disposed) return; _disposed = true; - _bindings.spine_skeleton_data_dispose(_skeletonData); + _bindings.spine_skeleton_data_dispose(_data); } } @@ -147,12 +391,14 @@ enum BlendMode { const BlendMode(this.value); } +// FIXME class BoneData { final spine_bone_data _data; BoneData(this._data); } +// FIXME class Bone { final spine_bone _bone; @@ -255,30 +501,57 @@ class Slot { } } +// FIXME class Attachment { final spine_attachment _attachment; Attachment(this._attachment); } +// FIXME class Skin { final spine_skin _skin; Skin(this._skin); } + +// FIXME +class IkConstraintData { + final spine_ik_constraint_data _data; + + IkConstraintData(this._data); +} + +// FIXME class IkConstraint { final spine_ik_constraint _constraint; IkConstraint(this._constraint); } +// FIXME +class TransformConstraintData { + final spine_transform_constraint_data _data; + + TransformConstraintData(this._data); +} + +// FIXME class TransformConstraint { final spine_transform_constraint _constraint; TransformConstraint(this._constraint); } +// FIXME +class PathConstraintData { + final spine_path_constraint_data _data; + + PathConstraintData(this._data); +} + +// FIXME class PathConstraint { final spine_path_constraint _constraint; @@ -322,7 +595,7 @@ class Skeleton { Bone? findBone(String boneName) { final nameNative = boneName.toNativeUtf8(); final bone = _bindings.spine_skeleton_find_bone(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); if (bone.address == nullptr.address) return null; return Bone(bone); } @@ -330,7 +603,7 @@ class Skeleton { Slot? findSlot(String slotName) { final nameNative = slotName.toNativeUtf8(); final slot = _bindings.spine_skeleton_find_slot(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); if (slot.address == nullptr.address) return null; return Slot(slot); } @@ -345,15 +618,15 @@ class Skeleton { void setSkin(String skinName) { final nameNative = skinName.toNativeUtf8(); _bindings.spine_skeleton_set_skin(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); } Attachment? getAttachmentByName(String slotName, String attachmentName) { final slotNameNative = slotName.toNativeUtf8(); final attachmentNameNative = attachmentName.toNativeUtf8(); final attachment = _bindings.spine_skeleton_get_attachment_by_name(_skeleton, slotNameNative.cast(), attachmentNameNative.cast()); - calloc.free(slotNameNative); - calloc.free(attachmentNameNative); + malloc.free(slotNameNative); + malloc.free(attachmentNameNative); if (attachment.address == nullptr.address) return null; return Attachment(attachment); } @@ -361,7 +634,7 @@ class Skeleton { Attachment? getAttachment(int slotIndex, String attachmentName) { final attachmentNameNative = attachmentName.toNativeUtf8(); final attachment = _bindings.spine_skeleton_get_attachment(_skeleton, slotIndex, attachmentNameNative.cast()); - calloc.free(attachmentNameNative); + malloc.free(attachmentNameNative); if (attachment.address == nullptr.address) return null; return Attachment(attachment); } @@ -370,14 +643,14 @@ class Skeleton { final slotNameNative = slotName.toNativeUtf8(); final attachmentNameNative = attachmentName.toNativeUtf8(); _bindings.spine_skeleton_set_attachment(_skeleton, slotNameNative.cast(), attachmentNameNative.cast()); - calloc.free(slotNameNative); - calloc.free(attachmentNameNative); + malloc.free(slotNameNative); + malloc.free(attachmentNameNative); } IkConstraint? findIkConstraint(String constraintName) { final nameNative = constraintName.toNativeUtf8(); final constraint = _bindings.spine_skeleton_find_ik_constraint(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); if (constraint.address == nullptr.address) return null; return IkConstraint(constraint); } @@ -385,7 +658,7 @@ class Skeleton { TransformConstraint? findTransformConstraint(String constraintName) { final nameNative = constraintName.toNativeUtf8(); final constraint = _bindings.spine_skeleton_find_transform_constraint(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); if (constraint.address == nullptr.address) return null; return TransformConstraint(constraint); } @@ -393,7 +666,7 @@ class Skeleton { PathConstraint? findPathConstraint(String constraintName) { final nameNative = constraintName.toNativeUtf8(); final constraint = _bindings.spine_skeleton_find_path_constraint(_skeleton, nameNative.cast()); - calloc.free(nameNative); + malloc.free(nameNative); if (constraint.address == nullptr.address) return null; return PathConstraint(constraint); } @@ -1010,7 +1283,7 @@ class AnimationState { TrackEntry setAnimation(int trackIndex, String animationName, bool loop) { final animation = animationName.toNativeUtf8(); final entry = _bindings.spine_animation_state_set_animation(_state, trackIndex, animation.cast(), loop ? -1 : 0); - calloc.free(animation); + malloc.free(animation); if (entry.address == nullptr.address) throw Exception("Couldn't set animation $animationName"); return TrackEntry(entry, this); } @@ -1026,7 +1299,7 @@ class AnimationState { TrackEntry addAnimation(int trackIndex, String animationName, bool loop, double delay) { final animation = animationName.toNativeUtf8(); final entry = _bindings.spine_animation_state_add_animation(_state, trackIndex, animation.cast(), loop ? -1 : 0, delay); - calloc.free(animation); + malloc.free(animation); if (entry.address == nullptr.address) throw Exception("Couldn't add animation $animationName"); return TrackEntry(entry, this); } @@ -1085,7 +1358,7 @@ class SkeletonDrawable { bool _disposed; SkeletonDrawable(this.atlas, this.skeletonData, this._ownsAtlasAndSkeletonData): _disposed = false { - _drawable = _bindings.spine_skeleton_drawable_create(skeletonData._skeletonData); + _drawable = _bindings.spine_skeleton_drawable_create(skeletonData._data); skeleton = Skeleton(_drawable.ref.skeleton); animationState = AnimationState(_drawable.ref.animationState, _drawable.ref.animationStateEvents); } diff --git a/spine-flutter/lib/spine_flutter_bindings_generated.dart b/spine-flutter/lib/spine_flutter_bindings_generated.dart index ba9258731..8beaae8ae 100644 --- a/spine-flutter/lib/spine_flutter_bindings_generated.dart +++ b/spine-flutter/lib/spine_flutter_bindings_generated.dart @@ -125,7 +125,7 @@ class SpineFlutterBindings { ffi.Pointer, ffi.Pointer, int)>(); spine_bone_data spine_skeleton_data_find_bone( - ffi.Pointer data, + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_bone( @@ -136,15 +136,15 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_bonePtr = _lookup< ffi.NativeFunction< - spine_bone_data Function(ffi.Pointer, + spine_bone_data Function(spine_skeleton_data, ffi.Pointer)>>('spine_skeleton_data_find_bone'); late final _spine_skeleton_data_find_bone = _spine_skeleton_data_find_bonePtr.asFunction< spine_bone_data Function( - ffi.Pointer, ffi.Pointer)>(); + spine_skeleton_data, ffi.Pointer)>(); spine_slot_data spine_skeleton_data_find_slot( - ffi.Pointer data, + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_slot( @@ -155,15 +155,15 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_slotPtr = _lookup< ffi.NativeFunction< - spine_slot_data Function(ffi.Pointer, + spine_slot_data Function(spine_skeleton_data, ffi.Pointer)>>('spine_skeleton_data_find_slot'); late final _spine_skeleton_data_find_slot = _spine_skeleton_data_find_slotPtr.asFunction< spine_slot_data Function( - ffi.Pointer, ffi.Pointer)>(); + spine_skeleton_data, ffi.Pointer)>(); spine_skin spine_skeleton_data_find_skin( - ffi.Pointer data, + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_skin( @@ -174,15 +174,14 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_skinPtr = _lookup< ffi.NativeFunction< - spine_skin Function(ffi.Pointer, + spine_skin Function(spine_skeleton_data, ffi.Pointer)>>('spine_skeleton_data_find_skin'); late final _spine_skeleton_data_find_skin = _spine_skeleton_data_find_skinPtr.asFunction< - spine_skin Function( - ffi.Pointer, ffi.Pointer)>(); + spine_skin Function(spine_skeleton_data, ffi.Pointer)>(); spine_event_data spine_skeleton_data_find_event( - ffi.Pointer data, + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_event( @@ -193,15 +192,15 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_eventPtr = _lookup< ffi.NativeFunction< - spine_event_data Function(ffi.Pointer, + spine_event_data Function(spine_skeleton_data, ffi.Pointer)>>('spine_skeleton_data_find_event'); late final _spine_skeleton_data_find_event = _spine_skeleton_data_find_eventPtr.asFunction< spine_event_data Function( - ffi.Pointer, ffi.Pointer)>(); + spine_skeleton_data, ffi.Pointer)>(); spine_animation spine_skeleton_data_find_animation( - ffi.Pointer data, + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_animation( @@ -212,15 +211,15 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_animationPtr = _lookup< ffi.NativeFunction< - spine_animation Function(ffi.Pointer, + spine_animation Function(spine_skeleton_data, ffi.Pointer)>>('spine_skeleton_data_find_animation'); late final _spine_skeleton_data_find_animation = _spine_skeleton_data_find_animationPtr.asFunction< spine_animation Function( - ffi.Pointer, ffi.Pointer)>(); + spine_skeleton_data, ffi.Pointer)>(); - spine_ik_constraint spine_skeleton_data_find_ik_constraint( - ffi.Pointer data, + spine_ik_constraint_data spine_skeleton_data_find_ik_constraint( + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_ik_constraint( @@ -231,16 +230,16 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_ik_constraintPtr = _lookup< ffi.NativeFunction< - spine_ik_constraint Function( - ffi.Pointer, ffi.Pointer)>>( + spine_ik_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>>( 'spine_skeleton_data_find_ik_constraint'); late final _spine_skeleton_data_find_ik_constraint = _spine_skeleton_data_find_ik_constraintPtr.asFunction< - spine_ik_constraint Function( - ffi.Pointer, ffi.Pointer)>(); + spine_ik_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>(); - spine_transform_constraint spine_skeleton_data_find_transform_constraint( - ffi.Pointer data, + spine_transform_constraint_data spine_skeleton_data_find_transform_constraint( + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_transform_constraint( @@ -251,16 +250,16 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_transform_constraintPtr = _lookup< ffi.NativeFunction< - spine_transform_constraint Function( - ffi.Pointer, ffi.Pointer)>>( + spine_transform_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>>( 'spine_skeleton_data_find_transform_constraint'); late final _spine_skeleton_data_find_transform_constraint = _spine_skeleton_data_find_transform_constraintPtr.asFunction< - spine_transform_constraint Function( - ffi.Pointer, ffi.Pointer)>(); + spine_transform_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>(); - spine_path_constraint spine_skeleton_data_find_path_constraint( - ffi.Pointer data, + spine_path_constraint_data spine_skeleton_data_find_path_constraint( + spine_skeleton_data data, ffi.Pointer name, ) { return _spine_skeleton_data_find_path_constraint( @@ -271,13 +270,13 @@ class SpineFlutterBindings { late final _spine_skeleton_data_find_path_constraintPtr = _lookup< ffi.NativeFunction< - spine_path_constraint Function( - ffi.Pointer, ffi.Pointer)>>( + spine_path_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>>( 'spine_skeleton_data_find_path_constraint'); late final _spine_skeleton_data_find_path_constraint = _spine_skeleton_data_find_path_constraintPtr.asFunction< - spine_path_constraint Function( - ffi.Pointer, ffi.Pointer)>(); + spine_path_constraint_data Function( + spine_skeleton_data, ffi.Pointer)>(); ffi.Pointer spine_skeleton_data_get_name( spine_skeleton_data data, @@ -463,20 +462,20 @@ class SpineFlutterBindings { _spine_skeleton_data_get_num_animationsPtr .asFunction(); - ffi.Pointer spine_skeleton_data_get_animation( + ffi.Pointer spine_skeleton_data_get_animations( spine_skeleton_data data, ) { - return _spine_skeleton_data_get_animation( + return _spine_skeleton_data_get_animations( data, ); } - late final _spine_skeleton_data_get_animationPtr = _lookup< + late final _spine_skeleton_data_get_animationsPtr = _lookup< ffi.NativeFunction< ffi.Pointer Function( - spine_skeleton_data)>>('spine_skeleton_data_get_animation'); - late final _spine_skeleton_data_get_animation = - _spine_skeleton_data_get_animationPtr.asFunction< + spine_skeleton_data)>>('spine_skeleton_data_get_animations'); + late final _spine_skeleton_data_get_animations = + _spine_skeleton_data_get_animationsPtr.asFunction< ffi.Pointer Function(spine_skeleton_data)>(); int spine_skeleton_data_get_num_ik_constraints( @@ -526,7 +525,8 @@ class SpineFlutterBindings { _spine_skeleton_data_get_num_transform_constraintsPtr .asFunction(); - spine_transform_constraint_data spine_skeleton_data_get_transform_constraints( + ffi.Pointer + spine_skeleton_data_get_transform_constraints( spine_skeleton_data data, ) { return _spine_skeleton_data_get_transform_constraints( @@ -536,11 +536,13 @@ class SpineFlutterBindings { late final _spine_skeleton_data_get_transform_constraintsPtr = _lookup< ffi.NativeFunction< - spine_transform_constraint_data Function(spine_skeleton_data)>>( + ffi.Pointer Function( + spine_skeleton_data)>>( 'spine_skeleton_data_get_transform_constraints'); late final _spine_skeleton_data_get_transform_constraints = _spine_skeleton_data_get_transform_constraintsPtr.asFunction< - spine_transform_constraint_data Function(spine_skeleton_data)>(); + ffi.Pointer Function( + spine_skeleton_data)>(); int spine_skeleton_data_get_num_path_constraints( spine_skeleton_data data, @@ -557,7 +559,8 @@ class SpineFlutterBindings { _spine_skeleton_data_get_num_path_constraintsPtr .asFunction(); - spine_path_constraint_data spine_skeleton_data_get_path_constraints( + ffi.Pointer + spine_skeleton_data_get_path_constraints( spine_skeleton_data data, ) { return _spine_skeleton_data_get_path_constraints( @@ -567,11 +570,13 @@ class SpineFlutterBindings { late final _spine_skeleton_data_get_path_constraintsPtr = _lookup< ffi.NativeFunction< - spine_path_constraint_data Function(spine_skeleton_data)>>( + ffi.Pointer Function( + spine_skeleton_data)>>( 'spine_skeleton_data_get_path_constraints'); late final _spine_skeleton_data_get_path_constraints = _spine_skeleton_data_get_path_constraintsPtr.asFunction< - spine_path_constraint_data Function(spine_skeleton_data)>(); + ffi.Pointer Function( + spine_skeleton_data)>(); double spine_skeleton_data_get_x( spine_skeleton_data data, @@ -3151,9 +3156,6 @@ typedef spine_slot_data = ffi.Pointer; typedef spine_skin = ffi.Pointer; typedef spine_event_data = ffi.Pointer; typedef spine_animation = ffi.Pointer; -typedef spine_ik_constraint = ffi.Pointer; -typedef spine_transform_constraint = ffi.Pointer; -typedef spine_path_constraint = ffi.Pointer; typedef spine_ik_constraint_data = ffi.Pointer; typedef spine_transform_constraint_data = ffi.Pointer; typedef spine_path_constraint_data = ffi.Pointer; @@ -3162,3 +3164,6 @@ typedef spine_event = ffi.Pointer; typedef spine_bone = ffi.Pointer; typedef spine_slot = ffi.Pointer; typedef spine_attachment = ffi.Pointer; +typedef spine_ik_constraint = ffi.Pointer; +typedef spine_transform_constraint = ffi.Pointer; +typedef spine_path_constraint = ffi.Pointer; diff --git a/spine-flutter/src/spine_flutter.cpp b/spine-flutter/src/spine_flutter.cpp index dd8094d13..8c64f4cb9 100644 --- a/spine-flutter/src/spine_flutter.cpp +++ b/spine-flutter/src/spine_flutter.cpp @@ -96,49 +96,49 @@ FFI_PLUGIN_EXPORT spine_skeleton_data_result spine_skeleton_data_load_binary(spi return result; } -FFI_PLUGIN_EXPORT spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findBone(name); } -FFI_PLUGIN_EXPORT spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findSlot(name); } -FFI_PLUGIN_EXPORT spine_skin spine_skeleton_data_find_skin(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_skin spine_skeleton_data_find_skin(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findSkin(name); } -FFI_PLUGIN_EXPORT spine_event_data spine_skeleton_data_find_event(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_event_data spine_skeleton_data_find_event(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findEvent(name); } -FFI_PLUGIN_EXPORT spine_animation spine_skeleton_data_find_animation(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_animation spine_skeleton_data_find_animation(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findAnimation(name); } -FFI_PLUGIN_EXPORT spine_ik_constraint spine_skeleton_data_find_ik_constraint(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_ik_constraint_data spine_skeleton_data_find_ik_constraint(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findIkConstraint(name); } -FFI_PLUGIN_EXPORT spine_transform_constraint spine_skeleton_data_find_transform_constraint(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_transform_constraint_data spine_skeleton_data_find_transform_constraint(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findTransformConstraint(name); } -FFI_PLUGIN_EXPORT spine_path_constraint spine_skeleton_data_find_path_constraint(spine_skeleton_data *data, const char *name) { +FFI_PLUGIN_EXPORT spine_path_constraint_data spine_skeleton_data_find_path_constraint(spine_skeleton_data data, const char *name) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return _data->findPathConstraint(name); @@ -216,7 +216,7 @@ FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_animations(spine_skeleton_data return (int)_data->getAnimations().size(); } -FFI_PLUGIN_EXPORT spine_animation* spine_skeleton_data_get_animation(spine_skeleton_data data) { +FFI_PLUGIN_EXPORT spine_animation* spine_skeleton_data_get_animations(spine_skeleton_data data) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return (void**)_data->getAnimations().buffer(); @@ -228,7 +228,7 @@ FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_ik_constraints(spine_skeleton_ return (int)_data->getIkConstraints().size(); } -FFI_PLUGIN_EXPORT spine_ik_constraint_data * spine_skeleton_data_get_ik_constraints(spine_skeleton_data data) { +FFI_PLUGIN_EXPORT spine_ik_constraint_data* spine_skeleton_data_get_ik_constraints(spine_skeleton_data data) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return (void**)_data->getIkConstraints().buffer(); @@ -240,7 +240,7 @@ FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_transform_constraints(spine_sk return (int)_data->getTransformConstraints().size(); } -FFI_PLUGIN_EXPORT spine_transform_constraint_data spine_skeleton_data_get_transform_constraints(spine_skeleton_data data) { +FFI_PLUGIN_EXPORT spine_transform_constraint_data* spine_skeleton_data_get_transform_constraints(spine_skeleton_data data) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return (void**)_data->getTransformConstraints().buffer(); @@ -252,7 +252,7 @@ FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_path_constraints(spine_skeleto return (int)_data->getPathConstraints().size(); } -FFI_PLUGIN_EXPORT spine_path_constraint_data spine_skeleton_data_get_path_constraints(spine_skeleton_data data) { +FFI_PLUGIN_EXPORT spine_path_constraint_data* spine_skeleton_data_get_path_constraints(spine_skeleton_data data) { if (data == nullptr) return nullptr; SkeletonData *_data = (SkeletonData*)data; return (void**)_data->getPathConstraints().buffer(); diff --git a/spine-flutter/src/spine_flutter.h b/spine-flutter/src/spine_flutter.h index 1c15edac2..42c8ed3d0 100644 --- a/spine-flutter/src/spine_flutter.h +++ b/spine-flutter/src/spine_flutter.h @@ -116,14 +116,14 @@ FFI_PLUGIN_EXPORT void spine_atlas_dispose(spine_atlas *atlas); FFI_PLUGIN_EXPORT spine_skeleton_data_result spine_skeleton_data_load_json(spine_atlas *atlas, const char *skeletonData); FFI_PLUGIN_EXPORT spine_skeleton_data_result spine_skeleton_data_load_binary(spine_atlas *atlas, const unsigned char *skeletonData, int length); -FFI_PLUGIN_EXPORT spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_skin spine_skeleton_data_find_skin(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_event_data spine_skeleton_data_find_event(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_animation spine_skeleton_data_find_animation(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_ik_constraint spine_skeleton_data_find_ik_constraint(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_transform_constraint spine_skeleton_data_find_transform_constraint(spine_skeleton_data *data, const char *name); -FFI_PLUGIN_EXPORT spine_path_constraint spine_skeleton_data_find_path_constraint(spine_skeleton_data *data, const char *name); +FFI_PLUGIN_EXPORT spine_bone_data spine_skeleton_data_find_bone(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_slot_data spine_skeleton_data_find_slot(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_skin spine_skeleton_data_find_skin(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_event_data spine_skeleton_data_find_event(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_animation spine_skeleton_data_find_animation(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_ik_constraint_data spine_skeleton_data_find_ik_constraint(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_transform_constraint_data spine_skeleton_data_find_transform_constraint(spine_skeleton_data data, const char *name); +FFI_PLUGIN_EXPORT spine_path_constraint_data spine_skeleton_data_find_path_constraint(spine_skeleton_data data, const char *name); FFI_PLUGIN_EXPORT const char* spine_skeleton_data_get_name(spine_skeleton_data data); FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_bones(spine_skeleton_data data); FFI_PLUGIN_EXPORT spine_bone_data* spine_skeleton_data_get_bones(spine_skeleton_data data); @@ -136,13 +136,13 @@ FFI_PLUGIN_EXPORT void spine_skeleton_data_set_default_skin(spine_skeleton_data FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_events(spine_skeleton_data data); FFI_PLUGIN_EXPORT spine_event_data* spine_skeleton_data_get_events(spine_skeleton_data data); FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_animations(spine_skeleton_data data); -FFI_PLUGIN_EXPORT spine_animation* spine_skeleton_data_get_animation(spine_skeleton_data data); +FFI_PLUGIN_EXPORT spine_animation* spine_skeleton_data_get_animations(spine_skeleton_data data); FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_ik_constraints(spine_skeleton_data data); -FFI_PLUGIN_EXPORT spine_ik_constraint_data * spine_skeleton_data_get_ik_constraints(spine_skeleton_data data); +FFI_PLUGIN_EXPORT spine_ik_constraint_data* spine_skeleton_data_get_ik_constraints(spine_skeleton_data data); FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_transform_constraints(spine_skeleton_data data); -FFI_PLUGIN_EXPORT spine_transform_constraint_data spine_skeleton_data_get_transform_constraints(spine_skeleton_data data); +FFI_PLUGIN_EXPORT spine_transform_constraint_data* spine_skeleton_data_get_transform_constraints(spine_skeleton_data data); FFI_PLUGIN_EXPORT int spine_skeleton_data_get_num_path_constraints(spine_skeleton_data data); -FFI_PLUGIN_EXPORT spine_path_constraint_data spine_skeleton_data_get_path_constraints(spine_skeleton_data data); +FFI_PLUGIN_EXPORT spine_path_constraint_data* spine_skeleton_data_get_path_constraints(spine_skeleton_data data); FFI_PLUGIN_EXPORT float spine_skeleton_data_get_x(spine_skeleton_data data); FFI_PLUGIN_EXPORT float spine_skeleton_data_get_y(spine_skeleton_data data); FFI_PLUGIN_EXPORT float spine_skeleton_data_get_width(spine_skeleton_data data);