|flutter] Hide constructors of native object wrappers, simplify listener interface

This commit is contained in:
Mario Zechner 2022-09-01 10:10:56 +02:00
parent ac0c30ffd6
commit 3b125a4b7f
2 changed files with 112 additions and 102 deletions

View File

@ -80,15 +80,15 @@ class AnimationStateEvents extends StatelessWidget {
controller.skeleton?.setScaleX(0.5);
controller.skeleton?.setScaleY(0.5);
controller.skeleton?.findSlot("gun")?.setColor(Color(1, 0, 0, 1));
controller.animationState?.setAnimation(0, "walk", true)?.setListener((event) {
print("Walk animation event ${event.type}");
controller.animationState?.setAnimation(0, "walk", true)?.setListener((type, trackEntry, event) {
print("Walk animation event ${type}");
});
controller.animationState?.addAnimation(0, "run", true, 2)?.setListener((event) {
print("Run animation event ${event.type}");
controller.animationState?.addAnimation(0, "run", true, 2)?.setListener((type, trackEntry, event) {
print("Run animation event ${type}");
});
controller.animationState?.setListener((event) {
if (event.type == EventType.Event) {
print("User event: { name: ${event.event?.getData().getName()}, intValue: ${event.event?.getIntValue()}, floatValue: intValue: ${event.event?.getFloatValue()}, stringValue: ${event.event?.getStringValue()} }");
controller.animationState?.setListener((type, trackEntry, event) {
if (type == EventType.Event) {
print("User event: { name: ${event?.getData().getName()}, intValue: ${event?.getIntValue()}, floatValue: intValue: ${event?.getFloatValue()}, stringValue: ${event?.getStringValue()} }");
}
});
print("Current: ${controller.animationState?.getCurrent(0)?.getAnimation().getName()}");

View File

@ -40,7 +40,7 @@ class Atlas {
final List<Paint> atlasPagePaints;
bool _disposed;
Atlas(this._atlas, this.atlasPages, this.atlasPagePaints): _disposed = false;
Atlas._(this._atlas, this.atlasPages, this.atlasPagePaints): _disposed = false;
static Future<Atlas> _load(String atlasFileName, Future<Uint8List> Function(String name) loadFile) async {
final atlasBytes = await loadFile(atlasFileName);
@ -72,7 +72,7 @@ class Atlas {
);
}
return Atlas(atlas, atlasPages, atlasPagePaints);
return Atlas._(atlas, atlasPages, atlasPagePaints);
}
static Future<Atlas> fromAsset(AssetBundle assetBundle, String atlasFileName) async {
@ -92,17 +92,18 @@ class Atlas {
void dispose() {
if (_disposed) return;
_disposed = true;
_bindings.spine_atlas_dispose(this._atlas);
for (final image in atlasPages) image.dispose();
_bindings.spine_atlas_dispose(_atlas);
for (final image in atlasPages) {
image.dispose();
}
}
}
// FIXME
class SkeletonData {
final spine_skeleton_data _data;
bool _disposed;
SkeletonData(this._data): _disposed = false;
SkeletonData._(this._data): _disposed = false;
static SkeletonData fromJson(Atlas atlas, String json) {
final jsonNative = json.toNativeUtf8();
@ -114,7 +115,7 @@ class SkeletonData {
malloc.free(error);
throw Exception("Couldn't load skeleton data: $message");
}
return SkeletonData(result.skeletonData);
return SkeletonData._(result.skeletonData);
}
static SkeletonData fromBinary(Atlas atlas, Uint8List binary) {
@ -128,7 +129,7 @@ class SkeletonData {
malloc.free(error);
throw Exception("Couldn't load skeleton data: $message");
}
return SkeletonData(result.skeletonData);
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.
@ -137,7 +138,7 @@ class SkeletonData {
final bone = _bindings.spine_skeleton_data_find_bone(_data, nativeName.cast());
malloc.free(nativeName);
if (bone.address == nullptr.address) return null;
return BoneData(bone);
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.
@ -146,7 +147,7 @@ class SkeletonData {
final slot = _bindings.spine_skeleton_data_find_slot(_data, nativeName.cast());
malloc.free(nativeName);
if (slot.address == nullptr.address) return null;
return SlotData(slot);
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
@ -156,7 +157,7 @@ class SkeletonData {
final skin = _bindings.spine_skeleton_data_find_skin(_data, nativeName.cast());
malloc.free(nativeName);
if (skin.address == nullptr.address) return null;
return Skin(skin);
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
@ -166,7 +167,7 @@ class SkeletonData {
final event = _bindings.spine_skeleton_data_find_event(_data, nativeName.cast());
malloc.free(nativeName);
if (event.address == nullptr.address) return null;
return EventData(event);
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
@ -176,7 +177,7 @@ class SkeletonData {
final animation = _bindings.spine_skeleton_data_find_animation(_data, nativeName.cast());
malloc.free(nativeName);
if (animation.address == nullptr.address) return null;
return Animation(animation);
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
@ -186,7 +187,7 @@ class SkeletonData {
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);
return IkConstraintData._(constraint);
}
/// Finds a transform constraint by comparing each transform constraint's name. It is more efficient to cache the results of
@ -196,7 +197,7 @@ class SkeletonData {
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);
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
@ -206,7 +207,7 @@ class SkeletonData {
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);
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
@ -223,7 +224,7 @@ class SkeletonData {
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]));
bones.add(BoneData._(nativeBones[i]));
}
return bones;
}
@ -234,7 +235,7 @@ class SkeletonData {
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]));
slots.add(SlotData._(nativeSlots[i]));
}
return slots;
}
@ -245,7 +246,7 @@ class SkeletonData {
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]));
skins.add(Skin._(nativeSkins[i]));
}
return skins;
}
@ -254,7 +255,7 @@ class SkeletonData {
Skin? getDefaultSkin() {
final skin = _bindings.spine_skeleton_data_get_default_skin(_data);
if (skin.address == nullptr.address) return null;
return Skin(skin);
return Skin._(skin);
}
void setDefaultSkin(Skin? skin) {
@ -271,7 +272,7 @@ class SkeletonData {
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]));
events.add(EventData._(nativeEvents[i]));
}
return events;
}
@ -283,7 +284,7 @@ class SkeletonData {
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]));
events.add(Animation._(nativeAnimations[i]));
}
return events;
}
@ -294,7 +295,7 @@ class SkeletonData {
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]));
constraints.add(IkConstraintData._(nativeConstraints[i]));
}
return constraints;
}
@ -305,7 +306,7 @@ class SkeletonData {
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]));
constraints.add(TransformConstraint._(nativeConstraints[i]));
}
return constraints;
}
@ -316,7 +317,7 @@ class SkeletonData {
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]));
constraints.add(PathConstraintData._(nativeConstraints[i]));
}
return constraints;
}
@ -402,11 +403,10 @@ enum TransformMode {
const TransformMode(this.value);
}
// FIXME
class BoneData {
final spine_bone_data _data;
BoneData(this._data);
BoneData._(this._data);
int getIndex() {
return _bindings.spine_bone_data_get_index(_data);
@ -420,7 +420,7 @@ class BoneData {
BoneData? getParent() {
final parent = _bindings.spine_bone_data_get_parent(_data);
if (parent.address == nullptr.address) return null;
return BoneData(parent);
return BoneData._(parent);
}
double getLength() {
@ -479,13 +479,13 @@ class BoneData {
class Bone {
final spine_bone _bone;
Bone(this._bone);
Bone._(this._bone);
}
class SlotData {
final spine_slot_data _data;
SlotData(this._data);
SlotData._(this._data);
int getIndex() {
return _bindings.spine_slot_data_get_index(_data);
@ -497,7 +497,7 @@ class SlotData {
}
BoneData getBoneData() {
return BoneData(_bindings.spine_slot_data_get_bone_data(_data));
return BoneData._(_bindings.spine_slot_data_get_bone_data(_data));
}
Color getColor() {
@ -522,27 +522,32 @@ class SlotData {
BlendMode getBlendMode() {
return BlendMode.values[_bindings.spine_slot_data_get_blend_mode(_data)];
}
@override
String toString() {
return getName();
}
}
class Slot {
final spine_slot _slot;
Slot(this._slot);
Slot._(this._slot);
void setToSetupPose() {
_bindings.spine_slot_set_to_setup_pose(_slot);
}
SlotData getData() {
return SlotData(_bindings.spine_slot_get_data(_slot));
return SlotData._(_bindings.spine_slot_get_data(_slot));
}
Bone getBone() {
return Bone(_bindings.spine_slot_get_bone(_slot));
return Bone._(_bindings.spine_slot_get_bone(_slot));
}
Skeleton getSkeleton() {
return Skeleton(_bindings.spine_slot_get_skeleton(_slot));
return Skeleton._(_bindings.spine_slot_get_skeleton(_slot));
}
Color getColor() {
@ -570,26 +575,31 @@ class Slot {
Attachment? getAttachment() {
final attachment = _bindings.spine_slot_get_attachment(_slot);
if (attachment.address == nullptr.address) return null;
return Attachment(attachment);
return Attachment._(attachment);
}
void setAttachment(Attachment? attachment) {
_bindings.spine_slot_set_attachment(_slot, attachment != null ? attachment._attachment : nullptr);
}
@override
String toString() {
return getData().getName();
}
}
// FIXME
class Attachment {
final spine_attachment _attachment;
Attachment(this._attachment);
Attachment._(this._attachment);
}
// FIXME
class Skin {
final spine_skin _skin;
Skin(this._skin);
Skin._(this._skin);
}
@ -597,48 +607,48 @@ class Skin {
class IkConstraintData {
final spine_ik_constraint_data _data;
IkConstraintData(this._data);
IkConstraintData._(this._data);
}
// FIXME
class IkConstraint {
final spine_ik_constraint _constraint;
IkConstraint(this._constraint);
IkConstraint._(this._constraint);
}
// FIXME
class TransformConstraintData {
final spine_transform_constraint_data _data;
TransformConstraintData(this._data);
TransformConstraintData._(this._data);
}
// FIXME
class TransformConstraint {
final spine_transform_constraint _constraint;
TransformConstraint(this._constraint);
TransformConstraint._(this._constraint);
}
// FIXME
class PathConstraintData {
final spine_path_constraint_data _data;
PathConstraintData(this._data);
PathConstraintData._(this._data);
}
// FIXME
class PathConstraint {
final spine_path_constraint _constraint;
PathConstraint(this._constraint);
PathConstraint._(this._constraint);
}
class Skeleton {
final spine_skeleton _skeleton;
Skeleton(this._skeleton);
Skeleton._(this._skeleton);
/// Caches information about bones and constraints. Must be called if bones, constraints or weighted path attachments are added
/// or removed.
@ -674,7 +684,7 @@ class Skeleton {
final bone = _bindings.spine_skeleton_find_bone(_skeleton, nameNative.cast());
malloc.free(nameNative);
if (bone.address == nullptr.address) return null;
return Bone(bone);
return Bone._(bone);
}
Slot? findSlot(String slotName) {
@ -682,7 +692,7 @@ class Skeleton {
final slot = _bindings.spine_skeleton_find_slot(_skeleton, nameNative.cast());
malloc.free(nameNative);
if (slot.address == nullptr.address) return null;
return Slot(slot);
return Slot._(slot);
}
/// Attachments from the new skin are attached if the corresponding attachment from the old skin was attached.
@ -705,7 +715,7 @@ class Skeleton {
malloc.free(slotNameNative);
malloc.free(attachmentNameNative);
if (attachment.address == nullptr.address) return null;
return Attachment(attachment);
return Attachment._(attachment);
}
Attachment? getAttachment(int slotIndex, String attachmentName) {
@ -713,7 +723,7 @@ class Skeleton {
final attachment = _bindings.spine_skeleton_get_attachment(_skeleton, slotIndex, attachmentNameNative.cast());
malloc.free(attachmentNameNative);
if (attachment.address == nullptr.address) return null;
return Attachment(attachment);
return Attachment._(attachment);
}
void setAttachment(String slotName, String attachmentName) {
@ -729,7 +739,7 @@ class Skeleton {
final constraint = _bindings.spine_skeleton_find_ik_constraint(_skeleton, nameNative.cast());
malloc.free(nameNative);
if (constraint.address == nullptr.address) return null;
return IkConstraint(constraint);
return IkConstraint._(constraint);
}
TransformConstraint? findTransformConstraint(String constraintName) {
@ -737,7 +747,7 @@ class Skeleton {
final constraint = _bindings.spine_skeleton_find_transform_constraint(_skeleton, nameNative.cast());
malloc.free(nameNative);
if (constraint.address == nullptr.address) return null;
return TransformConstraint(constraint);
return TransformConstraint._(constraint);
}
PathConstraint? findPathConstraint(String constraintName) {
@ -745,7 +755,7 @@ class Skeleton {
final constraint = _bindings.spine_skeleton_find_path_constraint(_skeleton, nameNative.cast());
malloc.free(nameNative);
if (constraint.address == nullptr.address) return null;
return PathConstraint(constraint);
return PathConstraint._(constraint);
}
/// Returns the axis aligned bounding box (AABB) of the region and mesh attachments for the current pose.
@ -762,13 +772,13 @@ class Skeleton {
Bone? getRootBone() {
final bone = _bindings.spine_skeleton_get_root_bone(_skeleton);
if (bone.address == nullptr.address) return null;
return Bone(bone);
return Bone._(bone);
}
SkeletonData? getData() {
final data = _bindings.spine_skeleton_get_data(_skeleton);
if (data.address == nullptr.address) return null;
return SkeletonData(data);
return SkeletonData._(data);
}
List<Bone> getBones() {
@ -776,7 +786,7 @@ class Skeleton {
final numBones = _bindings.spine_skeleton_get_num_bones(_skeleton);
final nativeBones = _bindings.spine_skeleton_get_bones(_skeleton);
for (int i = 0; i < numBones; i++) {
bones.add(Bone(nativeBones[i]));
bones.add(Bone._(nativeBones[i]));
}
return bones;
}
@ -786,7 +796,7 @@ class Skeleton {
final numSlots = _bindings.spine_skeleton_get_num_slots(_skeleton);
final nativeSlots = _bindings.spine_skeleton_get_slots(_skeleton);
for (int i = 0; i < numSlots; i++) {
slots.add(Slot(nativeSlots[i]));
slots.add(Slot._(nativeSlots[i]));
}
return slots;
}
@ -796,7 +806,7 @@ class Skeleton {
final numSlots = _bindings.spine_skeleton_get_num_draw_order(_skeleton);
final nativeDrawOrder = _bindings.spine_skeleton_get_draw_order(_skeleton);
for (int i = 0; i < numSlots; i++) {
slots.add(Slot(nativeDrawOrder[i]));
slots.add(Slot._(nativeDrawOrder[i]));
}
return slots;
}
@ -806,7 +816,7 @@ class Skeleton {
final numConstraints = _bindings.spine_skeleton_get_num_ik_constraints(_skeleton);
final nativeConstraints = _bindings.spine_skeleton_get_ik_constraints(_skeleton);
for (int i = 0; i < numConstraints; i++) {
constraints.add(IkConstraint(nativeConstraints[i]));
constraints.add(IkConstraint._(nativeConstraints[i]));
}
return constraints;
}
@ -816,7 +826,7 @@ class Skeleton {
final numConstraints = _bindings.spine_skeleton_get_num_path_constraints(_skeleton);
final nativeConstraints = _bindings.spine_skeleton_get_path_constraints(_skeleton);
for (int i = 0; i < numConstraints; i++) {
constraints.add(PathConstraint(nativeConstraints[i]));
constraints.add(PathConstraint._(nativeConstraints[i]));
}
return constraints;
}
@ -826,7 +836,7 @@ class Skeleton {
final numConstraints = _bindings.spine_skeleton_get_num_transform_constraints(_skeleton);
final nativeConstraints = _bindings.spine_skeleton_get_transform_constraints(_skeleton);
for (int i = 0; i < numConstraints; i++) {
constraints.add(TransformConstraint(nativeConstraints[i]));
constraints.add(TransformConstraint._(nativeConstraints[i]));
}
return constraints;
}
@ -834,7 +844,7 @@ class Skeleton {
Skin? getSkin() {
final skin = _bindings.spine_skeleton_get_skin(_skeleton);
if (skin.address == nullptr.address) return null;
return Skin(skin);
return Skin._(skin);
}
Color getColor() {
@ -886,7 +896,7 @@ class Skeleton {
class Animation {
final spine_animation _animation;
Animation(this._animation);
Animation._(this._animation);
String getName() {
final Pointer<Utf8> value = _bindings.spine_animation_get_name(_animation).cast();
@ -912,7 +922,7 @@ class TrackEntry {
final spine_track_entry _entry;
final AnimationState _state;
TrackEntry(this._entry, this._state);
TrackEntry._(this._entry, this._state);
/// The index of the track where this entry is either current or queued.
int getTtrackIndex() {
@ -921,7 +931,7 @@ class TrackEntry {
/// The animation to apply for this track entry.
Animation getAnimation() {
return Animation(_bindings.spine_track_entry_get_animation(_entry));
return Animation._(_bindings.spine_track_entry_get_animation(_entry));
}
/// If true, the animation will repeat. If false, it will not, instead its last frame is applied if played beyond its duration.
@ -1102,7 +1112,7 @@ class TrackEntry {
TrackEntry? getNext() {
final next = _bindings.spine_track_entry_get_next(_entry);
if (next.address == nullptr.address) return null;
return TrackEntry(next, this._state);
return TrackEntry._(next, _state);
}
/// Returns true if at least one loop has been completed.
@ -1149,7 +1159,7 @@ class TrackEntry {
TrackEntry? getMixingFrom() {
final from = _bindings.spine_track_entry_get_mixing_from(_entry);
if (from.address == nullptr.address) return null;
return TrackEntry(from, this._state);
return TrackEntry._(from, _state);
}
/// The track entry for the next animation when mixing from this animation, or NULL if no mixing is currently occuring.
@ -1157,7 +1167,7 @@ class TrackEntry {
TrackEntry? getMixingTo() {
final to = _bindings.spine_track_entry_get_mixing_to(_entry);
if (to.address == nullptr.address) return null;
return TrackEntry(to, this._state);
return TrackEntry._(to, _state);
}
/// Resets the rotation directions for mixing this entry's rotate timelines. This can be useful to avoid bones rotating the
@ -1192,7 +1202,7 @@ enum EventType {
class EventData {
final spine_event_data _data;
EventData(this._data);
EventData._(this._data);
String getName() {
final Pointer<Utf8> value = _bindings.spine_event_data_get_name(_data).cast();
@ -1229,10 +1239,10 @@ class EventData {
class Event {
final spine_event _event;
Event(this._event);
Event._(this._event);
EventData getData() {
return EventData(_bindings.spine_event_get_data(_event));
return EventData._(_bindings.spine_event_get_data(_event));
}
double getTime() {
@ -1261,27 +1271,26 @@ class Event {
}
}
class AnimationStateEvent {
final EventType type;
final TrackEntry entry;
final Event? event;
typedef AnimationStateListener = void Function(EventType type, TrackEntry entry, Event? event);
AnimationStateEvent(this.type, this.entry, this.event);
class AnimationStateData {
// FIXME
}
typedef AnimationStateListener = void Function(AnimationStateEvent event);
class AnimationState {
final spine_animation_state _state;
final spine_animation_state_events _events;
final Map<spine_track_entry, AnimationStateListener> _trackEntryListeners;
AnimationStateListener? _stateListener;
AnimationState(this._state, this._events): _trackEntryListeners = {};
AnimationState._(this._state, this._events): _trackEntryListeners = {};
void _setTrackEntryListener(spine_track_entry entry, AnimationStateListener? listener) {
if (listener == null) _trackEntryListeners.remove(entry);
else _trackEntryListeners[entry] = listener;
if (listener == null) {
_trackEntryListeners.remove(entry);
} else {
_trackEntryListeners[entry] = listener;
}
}
/// Increments the track entry times, setting queued animations as current if needed
@ -1313,17 +1322,18 @@ class AnimationState {
type = EventType.Event;
break;
}
final entry = _bindings.spine_animation_state_events_get_track_entry(_events, i);
final nativeEntry = _bindings.spine_animation_state_events_get_track_entry(_events, i);
final entry = TrackEntry._(nativeEntry, this);
final nativeEvent = _bindings.spine_animation_state_events_get_event(_events, i);
final event = AnimationStateEvent(type, TrackEntry(entry, this), nativeEvent.address == nullptr.address ? null : Event(nativeEvent));
if (_trackEntryListeners.containsKey(entry)) {
_trackEntryListeners[entry]?.call(event);
final event = nativeEvent.address == nullptr.address ? null : Event._(nativeEvent);
if (_trackEntryListeners.containsKey(nativeEntry)) {
_trackEntryListeners[entry]?.call(type, entry, event);
}
if (_stateListener != null) {
_stateListener?.call(event);
_stateListener?.call(type, entry, event);
}
if (type == EventType.Dispose) {
_bindings.spine_animation_state_dispose_track_entry(_state, entry);
_bindings.spine_animation_state_dispose_track_entry(_state, nativeEntry);
}
}
}
@ -1362,7 +1372,7 @@ class AnimationState {
final entry = _bindings.spine_animation_state_set_animation(_state, trackIndex, animation.cast(), loop ? -1 : 0);
malloc.free(animation);
if (entry.address == nullptr.address) throw Exception("Couldn't set animation $animationName");
return TrackEntry(entry, this);
return TrackEntry._(entry, this);
}
/// Adds an animation to be played delay seconds after the current or last queued animation
@ -1378,13 +1388,13 @@ class AnimationState {
final entry = _bindings.spine_animation_state_add_animation(_state, trackIndex, animation.cast(), loop ? -1 : 0, delay);
malloc.free(animation);
if (entry.address == nullptr.address) throw Exception("Couldn't add animation $animationName");
return TrackEntry(entry, this);
return TrackEntry._(entry, this);
}
/// Sets an empty animation for a track, discarding any queued animations, and mixes to it over the specified mix duration.
TrackEntry setEmptyAnimation(int trackIndex, double mixDuration) {
final entry = _bindings.spine_animation_state_set_empty_animation(_state, trackIndex, mixDuration);
return TrackEntry(entry, this);
return TrackEntry._(entry, this);
}
/// Adds an empty animation to be played after the current or last queued animation for a track, and mixes to it over the
@ -1398,13 +1408,13 @@ class AnimationState {
/// duration of the previous track minus any mix duration plus the negative delay.
TrackEntry addEmptyAnimation(int trackIndex, double mixDuration, double delay) {
final entry = _bindings.spine_animation_state_add_empty_animation(_state, trackIndex, mixDuration, delay);
return TrackEntry(entry, this);
return TrackEntry._(entry, this);
}
TrackEntry? getCurrent(int trackIndex) {
final entry = _bindings.spine_animation_state_get_current(_state, trackIndex);
if (entry.address == nullptr.address) return null;
return TrackEntry(entry, this);
return TrackEntry._(entry, this);
}
/// Sets an empty animation for every track, discarding any queued animations, and mixes to it over the specified mix duration.
@ -1436,8 +1446,8 @@ class SkeletonDrawable {
SkeletonDrawable(this.atlas, this.skeletonData, this._ownsAtlasAndSkeletonData): _disposed = false {
_drawable = _bindings.spine_skeleton_drawable_create(skeletonData._data);
skeleton = Skeleton(_drawable.ref.skeleton);
animationState = AnimationState(_drawable.ref.animationState, _drawable.ref.animationStateEvents);
skeleton = Skeleton._(_drawable.ref.skeleton);
animationState = AnimationState._(_drawable.ref.animationState, _drawable.ref.animationStateEvents);
}
void update(double delta) {
@ -1453,7 +1463,7 @@ class SkeletonDrawable {
List<RenderCommand> commands = [];
while(nativeCmd.address != nullptr.address) {
final atlasPage = atlas.atlasPages[nativeCmd.ref.atlasPage];
commands.add(RenderCommand(nativeCmd, atlasPage.width.toDouble(), atlasPage.height.toDouble()));
commands.add(RenderCommand._(nativeCmd, atlasPage.width.toDouble(), atlasPage.height.toDouble()));
nativeCmd = nativeCmd.ref.next;
}
return commands;
@ -1474,7 +1484,7 @@ class RenderCommand {
late final Vertices vertices;
late final int atlasPageIndex;
RenderCommand(Pointer<spine_render_command> nativeCmd, double pageWidth, double pageHeight) {
RenderCommand._(Pointer<spine_render_command> nativeCmd, double pageWidth, double pageHeight) {
atlasPageIndex = nativeCmd.ref.atlasPage;
int numVertices = nativeCmd.ref.numVertices;
int numIndices = nativeCmd.ref.numIndices;