// // Spine Runtimes License Agreement // Last updated April 5, 2025. Replaces all prior versions. // // Copyright (c) 2013-2025, Esoteric Software LLC // // Integration of the Spine Runtimes into software or otherwise creating // derivative works of the Spine Runtimes is permitted under the terms and // conditions of Section 2 of the Spine Editor License Agreement: // http://esotericsoftware.com/spine-editor-license // // Otherwise, it is permitted to integrate the Spine Runtimes into software // or otherwise create derivative works of the Spine Runtimes (collectively, // "Products"), provided that each user of the Products must obtain their own // Spine Editor license and redistribution of the Products in any form must // include this license and copyright notice. // // THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, // BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF // THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // AUTO GENERATED FILE, DO NOT EDIT. import 'dart:ffi'; import 'package:ffi/ffi.dart'; import 'spine_dart_bindings_generated.dart'; import '../spine_bindings.dart'; import '../native_array.dart'; import 'alpha_timeline.dart'; import 'animation.dart'; import 'atlas_page.dart'; import 'atlas_region.dart'; import 'attachment.dart'; import 'attachment_timeline.dart'; import 'bone.dart'; import 'bone_data.dart'; import 'bone_pose.dart'; import 'bounding_box_attachment.dart'; import 'clipping_attachment.dart'; import 'constraint.dart'; import 'constraint_data.dart'; import 'deform_timeline.dart'; import 'draw_order_timeline.dart'; import 'event.dart'; import 'event_data.dart'; import 'event_timeline.dart'; import 'from_property.dart'; import 'from_rotate.dart'; import 'from_scale_x.dart'; import 'from_scale_y.dart'; import 'from_shear_y.dart'; import 'from_x.dart'; import 'from_y.dart'; import 'ik_constraint.dart'; import 'ik_constraint_data.dart'; import 'ik_constraint_timeline.dart'; import 'inherit_timeline.dart'; import 'mesh_attachment.dart'; import 'path_attachment.dart'; import 'path_constraint.dart'; import 'path_constraint_data.dart'; import 'path_constraint_mix_timeline.dart'; import 'path_constraint_position_timeline.dart'; import 'path_constraint_spacing_timeline.dart'; import 'physics_constraint.dart'; import 'physics_constraint_damping_timeline.dart'; import 'physics_constraint_data.dart'; import 'physics_constraint_gravity_timeline.dart'; import 'physics_constraint_inertia_timeline.dart'; import 'physics_constraint_mass_timeline.dart'; import 'physics_constraint_mix_timeline.dart'; import 'physics_constraint_reset_timeline.dart'; import 'physics_constraint_strength_timeline.dart'; import 'physics_constraint_wind_timeline.dart'; import 'point_attachment.dart'; import 'polygon.dart'; import 'region_attachment.dart'; import 'rgb2_timeline.dart'; import 'rgb_timeline.dart'; import 'rgba2_timeline.dart'; import 'rgba_timeline.dart'; import 'rotate_timeline.dart'; import 'scale_timeline.dart'; import 'scale_x_timeline.dart'; import 'scale_y_timeline.dart'; import 'sequence_timeline.dart'; import 'shear_timeline.dart'; import 'shear_x_timeline.dart'; import 'shear_y_timeline.dart'; import 'skin.dart'; import 'slider.dart'; import 'slider_data.dart'; import 'slider_mix_timeline.dart'; import 'slider_timeline.dart'; import 'slot.dart'; import 'slot_data.dart'; import 'texture_region.dart'; import 'timeline.dart'; import 'to_property.dart'; import 'to_rotate.dart'; import 'to_scale_x.dart'; import 'to_scale_y.dart'; import 'to_shear_y.dart'; import 'to_x.dart'; import 'to_y.dart'; import 'track_entry.dart'; import 'transform_constraint.dart'; import 'transform_constraint_data.dart'; import 'transform_constraint_timeline.dart'; import 'translate_timeline.dart'; import 'translate_x_timeline.dart'; import 'translate_y_timeline.dart'; import 'update.dart'; /// ArrayFloat wrapper class ArrayFloat extends NativeArray { ArrayFloat.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_float_size(nativePtr.cast()); } @override double operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_float_buffer(nativePtr.cast()); return buffer.cast()[index]; } } /// ArrayInt wrapper class ArrayInt extends NativeArray { ArrayInt.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_int_size(nativePtr.cast()); } @override int operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_int_buffer(nativePtr.cast()); return buffer.cast()[index]; } } /// ArrayUnsignedShort wrapper class ArrayUnsignedShort extends NativeArray { ArrayUnsignedShort.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_unsigned_short_size(nativePtr.cast()); } @override int operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_unsigned_short_buffer(nativePtr.cast()); return buffer.cast()[index]; } } /// ArrayPropertyId wrapper class ArrayPropertyId extends NativeArray { ArrayPropertyId.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_property_id_size(nativePtr.cast()); } @override int operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_property_id_buffer(nativePtr.cast()); // NOTE: This will not compile due to C API bug - buffer() returns int instead of Pointer return buffer.cast()[index]; } } /// ArrayAnimation wrapper class ArrayAnimation extends NativeArray { ArrayAnimation.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_animation_size(nativePtr.cast()); } @override Animation? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_animation_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Animation.fromPointer(buffer[index]); } } /// ArrayAtlasPage wrapper class ArrayAtlasPage extends NativeArray { ArrayAtlasPage.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_atlas_page_size(nativePtr.cast()); } @override AtlasPage? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_atlas_page_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : AtlasPage.fromPointer(buffer[index]); } } /// ArrayAtlasRegion wrapper class ArrayAtlasRegion extends NativeArray { ArrayAtlasRegion.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_atlas_region_size(nativePtr.cast()); } @override AtlasRegion? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_atlas_region_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : AtlasRegion.fromPointer(buffer[index]); } } /// ArrayAttachment wrapper class ArrayAttachment extends NativeArray { ArrayAttachment.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_attachment_size(nativePtr.cast()); } @override Attachment? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_attachment_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_attachment_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_bounding_box_attachment': return BoundingBoxAttachment.fromPointer(buffer[index].cast()); case 'spine_clipping_attachment': return ClippingAttachment.fromPointer(buffer[index].cast()); case 'spine_mesh_attachment': return MeshAttachment.fromPointer(buffer[index].cast()); case 'spine_path_attachment': return PathAttachment.fromPointer(buffer[index].cast()); case 'spine_point_attachment': return PointAttachment.fromPointer(buffer[index].cast()); case 'spine_region_attachment': return RegionAttachment.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class Attachment'); } } } /// ArrayBone wrapper class ArrayBone extends NativeArray { ArrayBone.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_bone_size(nativePtr.cast()); } @override Bone? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_bone_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Bone.fromPointer(buffer[index]); } } /// ArrayBoneData wrapper class ArrayBoneData extends NativeArray { ArrayBoneData.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_bone_data_size(nativePtr.cast()); } @override BoneData? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_bone_data_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : BoneData.fromPointer(buffer[index]); } } /// ArrayBonePose wrapper class ArrayBonePose extends NativeArray { ArrayBonePose.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_bone_pose_size(nativePtr.cast()); } @override BonePose? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_bone_pose_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : BonePose.fromPointer(buffer[index]); } } /// ArrayBoundingBoxAttachment wrapper class ArrayBoundingBoxAttachment extends NativeArray { ArrayBoundingBoxAttachment.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_bounding_box_attachment_size(nativePtr.cast()); } @override BoundingBoxAttachment? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_bounding_box_attachment_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : BoundingBoxAttachment.fromPointer(buffer[index]); } } /// ArrayConstraint wrapper class ArrayConstraint extends NativeArray { ArrayConstraint.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_constraint_size(nativePtr.cast()); } @override Constraint? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_constraint_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_constraint_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_ik_constraint': return IkConstraint.fromPointer(buffer[index].cast()); case 'spine_path_constraint': return PathConstraint.fromPointer(buffer[index].cast()); case 'spine_physics_constraint': return PhysicsConstraint.fromPointer(buffer[index].cast()); case 'spine_slider': return Slider.fromPointer(buffer[index].cast()); case 'spine_transform_constraint': return TransformConstraint.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class Constraint'); } } } /// ArrayConstraintData wrapper class ArrayConstraintData extends NativeArray { ArrayConstraintData.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_constraint_data_size(nativePtr.cast()); } @override ConstraintData? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_constraint_data_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_constraint_data_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_ik_constraint_data': return IkConstraintData.fromPointer(buffer[index].cast()); case 'spine_path_constraint_data': return PathConstraintData.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_data': return PhysicsConstraintData.fromPointer(buffer[index].cast()); case 'spine_slider_data': return SliderData.fromPointer(buffer[index].cast()); case 'spine_transform_constraint_data': return TransformConstraintData.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class ConstraintData'); } } } /// ArrayEvent wrapper class ArrayEvent extends NativeArray { ArrayEvent.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_event_size(nativePtr.cast()); } @override Event? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_event_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Event.fromPointer(buffer[index]); } } /// ArrayEventData wrapper class ArrayEventData extends NativeArray { ArrayEventData.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_event_data_size(nativePtr.cast()); } @override EventData? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_event_data_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : EventData.fromPointer(buffer[index]); } } /// ArrayFromProperty wrapper class ArrayFromProperty extends NativeArray { ArrayFromProperty.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_from_property_size(nativePtr.cast()); } @override FromProperty? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_from_property_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_from_property_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_from_rotate': return FromRotate.fromPointer(buffer[index].cast()); case 'spine_from_scale_x': return FromScaleX.fromPointer(buffer[index].cast()); case 'spine_from_scale_y': return FromScaleY.fromPointer(buffer[index].cast()); case 'spine_from_shear_y': return FromShearY.fromPointer(buffer[index].cast()); case 'spine_from_x': return FromX.fromPointer(buffer[index].cast()); case 'spine_from_y': return FromY.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class FromProperty'); } } } /// ArrayPhysicsConstraint wrapper class ArrayPhysicsConstraint extends NativeArray { ArrayPhysicsConstraint.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_physics_constraint_size(nativePtr.cast()); } @override PhysicsConstraint? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_physics_constraint_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : PhysicsConstraint.fromPointer(buffer[index]); } } /// ArrayPolygon wrapper class ArrayPolygon extends NativeArray { ArrayPolygon.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_polygon_size(nativePtr.cast()); } @override Polygon? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_polygon_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Polygon.fromPointer(buffer[index]); } } /// ArraySkin wrapper class ArraySkin extends NativeArray { ArraySkin.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_skin_size(nativePtr.cast()); } @override Skin? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_skin_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Skin.fromPointer(buffer[index]); } } /// ArraySlot wrapper class ArraySlot extends NativeArray { ArraySlot.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_slot_size(nativePtr.cast()); } @override Slot? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_slot_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : Slot.fromPointer(buffer[index]); } } /// ArraySlotData wrapper class ArraySlotData extends NativeArray { ArraySlotData.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_slot_data_size(nativePtr.cast()); } @override SlotData? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_slot_data_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : SlotData.fromPointer(buffer[index]); } } /// ArrayTextureRegion wrapper class ArrayTextureRegion extends NativeArray { ArrayTextureRegion.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_texture_region_size(nativePtr.cast()); } @override TextureRegion? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_texture_region_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : TextureRegion.fromPointer(buffer[index]); } } /// ArrayTimeline wrapper class ArrayTimeline extends NativeArray { ArrayTimeline.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_timeline_size(nativePtr.cast()); } @override Timeline? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_timeline_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_timeline_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_alpha_timeline': return AlphaTimeline.fromPointer(buffer[index].cast()); case 'spine_attachment_timeline': return AttachmentTimeline.fromPointer(buffer[index].cast()); case 'spine_deform_timeline': return DeformTimeline.fromPointer(buffer[index].cast()); case 'spine_draw_order_timeline': return DrawOrderTimeline.fromPointer(buffer[index].cast()); case 'spine_event_timeline': return EventTimeline.fromPointer(buffer[index].cast()); case 'spine_ik_constraint_timeline': return IkConstraintTimeline.fromPointer(buffer[index].cast()); case 'spine_inherit_timeline': return InheritTimeline.fromPointer(buffer[index].cast()); case 'spine_path_constraint_mix_timeline': return PathConstraintMixTimeline.fromPointer(buffer[index].cast()); case 'spine_path_constraint_position_timeline': return PathConstraintPositionTimeline.fromPointer(buffer[index].cast()); case 'spine_path_constraint_spacing_timeline': return PathConstraintSpacingTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_damping_timeline': return PhysicsConstraintDampingTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_gravity_timeline': return PhysicsConstraintGravityTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_inertia_timeline': return PhysicsConstraintInertiaTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_mass_timeline': return PhysicsConstraintMassTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_mix_timeline': return PhysicsConstraintMixTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_reset_timeline': return PhysicsConstraintResetTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_strength_timeline': return PhysicsConstraintStrengthTimeline.fromPointer(buffer[index].cast()); case 'spine_physics_constraint_wind_timeline': return PhysicsConstraintWindTimeline.fromPointer(buffer[index].cast()); case 'spine_rgb2_timeline': return Rgb2Timeline.fromPointer(buffer[index].cast()); case 'spine_rgba2_timeline': return Rgba2Timeline.fromPointer(buffer[index].cast()); case 'spine_rgba_timeline': return RgbaTimeline.fromPointer(buffer[index].cast()); case 'spine_rgb_timeline': return RgbTimeline.fromPointer(buffer[index].cast()); case 'spine_rotate_timeline': return RotateTimeline.fromPointer(buffer[index].cast()); case 'spine_scale_timeline': return ScaleTimeline.fromPointer(buffer[index].cast()); case 'spine_scale_x_timeline': return ScaleXTimeline.fromPointer(buffer[index].cast()); case 'spine_scale_y_timeline': return ScaleYTimeline.fromPointer(buffer[index].cast()); case 'spine_sequence_timeline': return SequenceTimeline.fromPointer(buffer[index].cast()); case 'spine_shear_timeline': return ShearTimeline.fromPointer(buffer[index].cast()); case 'spine_shear_x_timeline': return ShearXTimeline.fromPointer(buffer[index].cast()); case 'spine_shear_y_timeline': return ShearYTimeline.fromPointer(buffer[index].cast()); case 'spine_slider_mix_timeline': return SliderMixTimeline.fromPointer(buffer[index].cast()); case 'spine_slider_timeline': return SliderTimeline.fromPointer(buffer[index].cast()); case 'spine_transform_constraint_timeline': return TransformConstraintTimeline.fromPointer(buffer[index].cast()); case 'spine_translate_timeline': return TranslateTimeline.fromPointer(buffer[index].cast()); case 'spine_translate_x_timeline': return TranslateXTimeline.fromPointer(buffer[index].cast()); case 'spine_translate_y_timeline': return TranslateYTimeline.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class Timeline'); } } } /// ArrayToProperty wrapper class ArrayToProperty extends NativeArray { ArrayToProperty.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_to_property_size(nativePtr.cast()); } @override ToProperty? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_to_property_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_to_property_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_to_rotate': return ToRotate.fromPointer(buffer[index].cast()); case 'spine_to_scale_x': return ToScaleX.fromPointer(buffer[index].cast()); case 'spine_to_scale_y': return ToScaleY.fromPointer(buffer[index].cast()); case 'spine_to_shear_y': return ToShearY.fromPointer(buffer[index].cast()); case 'spine_to_x': return ToX.fromPointer(buffer[index].cast()); case 'spine_to_y': return ToY.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class ToProperty'); } } } /// ArrayTrackEntry wrapper class ArrayTrackEntry extends NativeArray { ArrayTrackEntry.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_track_entry_size(nativePtr.cast()); } @override TrackEntry? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_track_entry_buffer(nativePtr.cast()); return buffer[index].address == 0 ? null : TrackEntry.fromPointer(buffer[index]); } } /// ArrayUpdate wrapper class ArrayUpdate extends NativeArray { ArrayUpdate.fromPointer(Pointer super.ptr); @override int get length { return SpineBindings.bindings.spine_array_update_size(nativePtr.cast()); } @override Update? operator [](int index) { if (index < 0 || index >= length) { throw RangeError.index(index, this, 'index'); } final buffer = SpineBindings.bindings.spine_array_update_buffer(nativePtr.cast()); if (buffer[index].address == 0) return null; final rtti = SpineBindings.bindings.spine_update_get_rtti(buffer[index]); final className = SpineBindings.bindings.spine_rtti_get_class_name(rtti).cast().toDartString(); switch (className) { case 'spine_bone': return Bone.fromPointer(buffer[index].cast()); case 'spine_bone_pose': return BonePose.fromPointer(buffer[index].cast()); case 'spine_ik_constraint': return IkConstraint.fromPointer(buffer[index].cast()); case 'spine_path_constraint': return PathConstraint.fromPointer(buffer[index].cast()); case 'spine_physics_constraint': return PhysicsConstraint.fromPointer(buffer[index].cast()); case 'spine_slider': return Slider.fromPointer(buffer[index].cast()); case 'spine_transform_constraint': return TransformConstraint.fromPointer(buffer[index].cast()); default: throw UnsupportedError('Unknown concrete type: $className for abstract class Update'); } } }