[libgdx] Long property IDs instead of strings.

This commit is contained in:
Nathan Sweet 2026-03-25 01:37:13 -04:00
parent 2aff881451
commit 3cf8386f79
3 changed files with 77 additions and 77 deletions

View File

@ -144,7 +144,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -194,7 +194,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -251,7 +251,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -302,7 +302,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -349,7 +349,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -392,7 +392,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -435,7 +435,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -478,7 +478,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -521,7 +521,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -564,7 +564,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -607,7 +607,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -650,7 +650,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -693,7 +693,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -736,7 +736,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -779,7 +779,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -822,7 +822,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -865,7 +865,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -908,7 +908,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -951,7 +951,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -994,7 +994,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1037,7 +1037,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1080,7 +1080,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1123,7 +1123,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1166,7 +1166,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1209,7 +1209,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1252,7 +1252,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1298,7 +1298,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1341,7 +1341,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1384,7 +1384,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1427,7 +1427,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1470,7 +1470,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1513,7 +1513,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1634,7 +1634,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1677,7 +1677,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1720,7 +1720,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();
@ -1763,7 +1763,7 @@ public class SkeletonSerializer {
json.writeName("propertyIds"); json.writeName("propertyIds");
json.writeArrayStart(); json.writeArrayStart();
for (String item : obj.getPropertyIds()) { for (long item : obj.getPropertyIds()) {
json.writeValue(item); json.writeValue(item);
} }
json.writeArrayEnd(); json.writeArrayEnd();

View File

@ -36,8 +36,8 @@ import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.IntSet; import com.badlogic.gdx.utils.IntSet;
import com.badlogic.gdx.utils.LongSet;
import com.badlogic.gdx.utils.Null; import com.badlogic.gdx.utils.Null;
import com.badlogic.gdx.utils.ObjectSet;
import com.esotericsoftware.spine.BoneData.Inherit; import com.esotericsoftware.spine.BoneData.Inherit;
import com.esotericsoftware.spine.attachments.Attachment; import com.esotericsoftware.spine.attachments.Attachment;
@ -54,7 +54,7 @@ public class Animation {
final String name; final String name;
float duration; float duration;
Array<Timeline> timelines; Array<Timeline> timelines;
final ObjectSet<String> timelineIds; final LongSet timelineIds;
final IntArray bones; final IntArray bones;
public Animation (String name, Array<Timeline> timelines, float duration) { public Animation (String name, Array<Timeline> timelines, float duration) {
@ -62,7 +62,7 @@ public class Animation {
this.name = name; this.name = name;
this.duration = duration; this.duration = duration;
int n = timelines.size << 1; int n = timelines.size << 1;
timelineIds = new ObjectSet(n); timelineIds = new LongSet(n);
bones = new IntArray(n); bones = new IntArray(n);
setTimelines(timelines); setTimelines(timelines);
} }
@ -94,8 +94,8 @@ public class Animation {
/** Returns true if this animation contains a timeline with any of the specified property IDs. /** Returns true if this animation contains a timeline with any of the specified property IDs.
* <p> * <p>
* See {@link Timeline#propertyIds}. */ * See {@link Timeline#propertyIds}. */
public boolean hasTimeline (String[] propertyIds) { public boolean hasTimeline (long[] propertyIds) {
for (String id : propertyIds) for (long id : propertyIds)
if (timelineIds.contains(id)) return true; if (timelineIds.contains(id)) return true;
return false; return false;
} }
@ -185,19 +185,19 @@ public class Animation {
* See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine * See <a href='https://esotericsoftware.com/spine-applying-animations#Timeline-API'>Applying Animations</a> in the Spine
* Runtimes Guide. */ * Runtimes Guide. */
static abstract public class Timeline { static abstract public class Timeline {
final String[] propertyIds; final long[] propertyIds;
final float[] frames; final float[] frames;
boolean additive, instant; boolean additive, instant;
/** @param propertyIds Unique identifiers for the properties the timeline modifies. */ /** @param propertyIds Unique identifiers for the properties the timeline modifies. */
public Timeline (int frameCount, String... propertyIds) { public Timeline (int frameCount, long... propertyIds) {
if (propertyIds == null) throw new IllegalArgumentException("propertyIds cannot be null."); if (propertyIds == null) throw new IllegalArgumentException("propertyIds cannot be null.");
this.propertyIds = propertyIds; this.propertyIds = propertyIds;
frames = new float[frameCount * getFrameEntries()]; frames = new float[frameCount * getFrameEntries()];
} }
/** Uniquely encodes both the type of this timeline and the skeleton properties that it affects. */ /** Uniquely encodes both the type of this timeline and the skeleton properties that it affects. */
public String[] getPropertyIds () { public long[] getPropertyIds () {
return propertyIds; return propertyIds;
} }
@ -295,7 +295,7 @@ public class Animation {
/** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}. /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.
* @param propertyIds Unique identifiers for the properties the timeline modifies. */ * @param propertyIds Unique identifiers for the properties the timeline modifies. */
public CurveTimeline (int frameCount, int bezierCount, String... propertyIds) { public CurveTimeline (int frameCount, int bezierCount, long... propertyIds) {
super(frameCount, propertyIds); super(frameCount, propertyIds);
curves = new float[frameCount + bezierCount * BEZIER_SIZE]; curves = new float[frameCount + bezierCount * BEZIER_SIZE];
curves[frameCount - 1] = STEPPED; curves[frameCount - 1] = STEPPED;
@ -397,7 +397,7 @@ public class Animation {
/** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}. /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}.
* @param propertyId Unique identifier for the property the timeline modifies. */ * @param propertyId Unique identifier for the property the timeline modifies. */
public CurveTimeline1 (int frameCount, int bezierCount, String propertyId) { public CurveTimeline1 (int frameCount, int bezierCount, long propertyId) {
super(frameCount, bezierCount, propertyId); super(frameCount, bezierCount, propertyId);
} }
@ -502,7 +502,7 @@ public class Animation {
final int boneIndex; final int boneIndex;
public BoneTimeline1 (int frameCount, int bezierCount, int boneIndex, Property property) { public BoneTimeline1 (int frameCount, int bezierCount, int boneIndex, Property property) {
super(frameCount, bezierCount, property.ordinal() + "|" + boneIndex); super(frameCount, bezierCount, property.ordinal() << 53 | boneIndex);
this.boneIndex = boneIndex; this.boneIndex = boneIndex;
additive = true; additive = true;
} }
@ -531,7 +531,7 @@ public class Animation {
/** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}. */ /** @param bezierCount The maximum number of Bezier curves. See {@link #shrink(int)}. */
public BoneTimeline2 (int frameCount, int bezierCount, int boneIndex, Property property1, Property property2) { public BoneTimeline2 (int frameCount, int bezierCount, int boneIndex, Property property1, Property property2) {
super(frameCount, bezierCount, property1.ordinal() + "|" + boneIndex, property2.ordinal() + "|" + boneIndex); super(frameCount, bezierCount, property1.ordinal() << 53 | boneIndex, property2.ordinal() << 53 | +boneIndex);
this.boneIndex = boneIndex; this.boneIndex = boneIndex;
additive = true; additive = true;
} }
@ -817,7 +817,7 @@ public class Animation {
final int boneIndex; final int boneIndex;
public InheritTimeline (int frameCount, int boneIndex) { public InheritTimeline (int frameCount, int boneIndex) {
super(frameCount, Property.inherit.ordinal() + "|" + boneIndex); super(frameCount, Property.inherit.ordinal() << 53 | boneIndex);
this.boneIndex = boneIndex; this.boneIndex = boneIndex;
instant = true; instant = true;
} }
@ -861,7 +861,7 @@ public class Animation {
static abstract public class SlotCurveTimeline extends CurveTimeline implements SlotTimeline { static abstract public class SlotCurveTimeline extends CurveTimeline implements SlotTimeline {
final int slotIndex; final int slotIndex;
public SlotCurveTimeline (int frameCount, int bezierCount, int slotIndex, String... propertyIds) { public SlotCurveTimeline (int frameCount, int bezierCount, int slotIndex, long... propertyIds) {
super(frameCount, bezierCount, propertyIds); super(frameCount, bezierCount, propertyIds);
this.slotIndex = slotIndex; this.slotIndex = slotIndex;
} }
@ -886,8 +886,8 @@ public class Animation {
public RGBATimeline (int frameCount, int bezierCount, int slotIndex) { public RGBATimeline (int frameCount, int bezierCount, int slotIndex) {
super(frameCount, bezierCount, slotIndex, // super(frameCount, bezierCount, slotIndex, //
Property.rgb.ordinal() + "|" + slotIndex, // Property.rgb.ordinal() << 53 | slotIndex, //
Property.alpha.ordinal() + "|" + slotIndex); Property.alpha.ordinal() << 53 | slotIndex);
} }
public int getFrameEntries () { public int getFrameEntries () {
@ -962,7 +962,7 @@ public class Animation {
static private final int R = 1, G = 2, B = 3; static private final int R = 1, G = 2, B = 3;
public RGBTimeline (int frameCount, int bezierCount, int slotIndex) { public RGBTimeline (int frameCount, int bezierCount, int slotIndex) {
super(frameCount, bezierCount, slotIndex, Property.rgb.ordinal() + "|" + slotIndex); super(frameCount, bezierCount, slotIndex, Property.rgb.ordinal() << 53 | slotIndex);
} }
public int getFrameEntries () { public int getFrameEntries () {
@ -1041,7 +1041,7 @@ public class Animation {
final int slotIndex; final int slotIndex;
public AlphaTimeline (int frameCount, int bezierCount, int slotIndex) { public AlphaTimeline (int frameCount, int bezierCount, int slotIndex) {
super(frameCount, bezierCount, Property.alpha.ordinal() + "|" + slotIndex); super(frameCount, bezierCount, Property.alpha.ordinal() << 53 | slotIndex);
this.slotIndex = slotIndex; this.slotIndex = slotIndex;
} }
@ -1081,9 +1081,9 @@ public class Animation {
public RGBA2Timeline (int frameCount, int bezierCount, int slotIndex) { public RGBA2Timeline (int frameCount, int bezierCount, int slotIndex) {
super(frameCount, bezierCount, slotIndex, // super(frameCount, bezierCount, slotIndex, //
Property.rgb.ordinal() + "|" + slotIndex, // Property.rgb.ordinal() << 53 | slotIndex, //
Property.alpha.ordinal() + "|" + slotIndex, // Property.alpha.ordinal() << 53 | slotIndex, //
Property.rgb2.ordinal() + "|" + slotIndex); Property.rgb2.ordinal() << 53 | slotIndex);
} }
public int getFrameEntries () { public int getFrameEntries () {
@ -1192,8 +1192,8 @@ public class Animation {
public RGB2Timeline (int frameCount, int bezierCount, int slotIndex) { public RGB2Timeline (int frameCount, int bezierCount, int slotIndex) {
super(frameCount, bezierCount, slotIndex, // super(frameCount, bezierCount, slotIndex, //
Property.rgb.ordinal() + "|" + slotIndex, // Property.rgb.ordinal() << 53 | slotIndex, //
Property.rgb2.ordinal() + "|" + slotIndex); Property.rgb2.ordinal() << 53 | slotIndex);
} }
public int getFrameEntries () { public int getFrameEntries () {
@ -1303,7 +1303,7 @@ public class Animation {
final String[] attachmentNames; final String[] attachmentNames;
public AttachmentTimeline (int frameCount, int slotIndex) { public AttachmentTimeline (int frameCount, int slotIndex) {
super(frameCount, Property.attachment.ordinal() + "|" + slotIndex); super(frameCount, Property.attachment.ordinal() << 53 | slotIndex);
this.slotIndex = slotIndex; this.slotIndex = slotIndex;
attachmentNames = new String[frameCount]; attachmentNames = new String[frameCount];
instant = true; instant = true;
@ -1353,7 +1353,7 @@ public class Animation {
private final float[][] vertices; private final float[][] vertices;
public DeformTimeline (int frameCount, int bezierCount, int slotIndex, VertexAttachment attachment) { public DeformTimeline (int frameCount, int bezierCount, int slotIndex, VertexAttachment attachment) {
super(frameCount, bezierCount, slotIndex, Property.deform.ordinal() + "|" + slotIndex + "|" + attachment.getId()); super(frameCount, bezierCount, slotIndex, Property.deform.ordinal() << 53 | slotIndex << 32 | +attachment.getId());
this.attachment = attachment; this.attachment = attachment;
vertices = new float[frameCount][]; vertices = new float[frameCount][];
additive = true; additive = true;
@ -1566,7 +1566,7 @@ public class Animation {
final HasSequence attachment; final HasSequence attachment;
public SequenceTimeline (int frameCount, int slotIndex, Attachment attachment) { public SequenceTimeline (int frameCount, int slotIndex, Attachment attachment) {
super(frameCount, Property.sequence.ordinal() + "|" + slotIndex + "|" + ((HasSequence)attachment).getSequence().getId()); super(frameCount, Property.sequence.ordinal() << 53 | slotIndex << 32 | ((HasSequence)attachment).getSequence().getId());
this.slotIndex = slotIndex; this.slotIndex = slotIndex;
this.attachment = (HasSequence)attachment; this.attachment = (HasSequence)attachment;
instant = true; instant = true;
@ -1649,7 +1649,7 @@ public class Animation {
/** Fires an {@link Event} when specific animation times are reached. */ /** Fires an {@link Event} when specific animation times are reached. */
static public class EventTimeline extends Timeline { static public class EventTimeline extends Timeline {
static private final String[] propertyIds = {Integer.toString(Property.event.ordinal())}; static private final long[] propertyIds = {Property.event.ordinal()};
private final Event[] events; private final Event[] events;
@ -1708,8 +1708,8 @@ public class Animation {
/** Changes {@link Skeleton#drawOrder}. */ /** Changes {@link Skeleton#drawOrder}. */
static public class DrawOrderTimeline extends Timeline { static public class DrawOrderTimeline extends Timeline {
static final String propertyID = Integer.toString(Property.drawOrder.ordinal()); static final long propertyID = Property.drawOrder.ordinal();
static private final String[] propertyIds = {propertyID}; static private final long[] propertyIds = {propertyID};
private final int[][] drawOrders; private final int[][] drawOrders;
@ -1774,11 +1774,11 @@ public class Animation {
instant = true; instant = true;
} }
static private String[] propertyIds (int[] slots) { static private long[] propertyIds (int[] slots) {
int n = slots.length; int n = slots.length;
String[] ids = new String[n]; var ids = new long[n];
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
ids[i] = "d" + slots[i]; ids[i] = slots[i];
return ids; return ids;
} }
@ -1858,7 +1858,7 @@ public class Animation {
final int constraintIndex; final int constraintIndex;
public IkConstraintTimeline (int frameCount, int bezierCount, int constraintIndex) { public IkConstraintTimeline (int frameCount, int bezierCount, int constraintIndex) {
super(frameCount, bezierCount, Property.ikConstraint.ordinal() + "|" + constraintIndex); super(frameCount, bezierCount, Property.ikConstraint.ordinal() << 53 | constraintIndex);
this.constraintIndex = constraintIndex; this.constraintIndex = constraintIndex;
} }
@ -1952,7 +1952,7 @@ public class Animation {
final int constraintIndex; final int constraintIndex;
public TransformConstraintTimeline (int frameCount, int bezierCount, int constraintIndex) { public TransformConstraintTimeline (int frameCount, int bezierCount, int constraintIndex) {
super(frameCount, bezierCount, Property.transformConstraint.ordinal() + "|" + constraintIndex); super(frameCount, bezierCount, Property.transformConstraint.ordinal() << 53 | constraintIndex);
this.constraintIndex = constraintIndex; this.constraintIndex = constraintIndex;
additive = true; additive = true;
} }
@ -2061,7 +2061,7 @@ public class Animation {
final int constraintIndex; final int constraintIndex;
public ConstraintTimeline1 (int frameCount, int bezierCount, int constraintIndex, Property property) { public ConstraintTimeline1 (int frameCount, int bezierCount, int constraintIndex, Property property) {
super(frameCount, bezierCount, property.ordinal() + "|" + constraintIndex); super(frameCount, bezierCount, property.ordinal() << 53 | constraintIndex);
this.constraintIndex = constraintIndex; this.constraintIndex = constraintIndex;
} }
@ -2111,7 +2111,7 @@ public class Animation {
final int constraintIndex; final int constraintIndex;
public PathConstraintMixTimeline (int frameCount, int bezierCount, int constraintIndex) { public PathConstraintMixTimeline (int frameCount, int bezierCount, int constraintIndex) {
super(frameCount, bezierCount, Property.pathConstraintMix.ordinal() + "|" + constraintIndex); super(frameCount, bezierCount, Property.pathConstraintMix.ordinal() << 53 | constraintIndex);
this.constraintIndex = constraintIndex; this.constraintIndex = constraintIndex;
additive = true; additive = true;
} }
@ -2363,7 +2363,7 @@ public class Animation {
/** Resets a physics constraint when specific animation times are reached. */ /** Resets a physics constraint when specific animation times are reached. */
static public class PhysicsConstraintResetTimeline extends Timeline implements ConstraintTimeline { static public class PhysicsConstraintResetTimeline extends Timeline implements ConstraintTimeline {
static private final String[] propertyIds = {Integer.toString(Property.physicsConstraintReset.ordinal())}; static private final long[] propertyIds = {Property.physicsConstraintReset.ordinal()};
final int constraintIndex; final int constraintIndex;

View File

@ -32,8 +32,8 @@ package com.esotericsoftware.spine;
import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.FloatArray; import com.badlogic.gdx.utils.FloatArray;
import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.IntArray;
import com.badlogic.gdx.utils.LongSet;
import com.badlogic.gdx.utils.Null; import com.badlogic.gdx.utils.Null;
import com.badlogic.gdx.utils.ObjectSet;
import com.badlogic.gdx.utils.Pool; import com.badlogic.gdx.utils.Pool;
import com.badlogic.gdx.utils.Pool.Poolable; import com.badlogic.gdx.utils.Pool.Poolable;
import com.badlogic.gdx.utils.SnapshotArray; import com.badlogic.gdx.utils.SnapshotArray;
@ -58,7 +58,7 @@ public class AnimationState {
private final Array<Event> events = new Array(true, 4, Event[]::new); private final Array<Event> events = new Array(true, 4, Event[]::new);
final SnapshotArray<AnimationStateListener> listeners = new SnapshotArray(true, 16, AnimationStateListener[]::new); final SnapshotArray<AnimationStateListener> listeners = new SnapshotArray(true, 16, AnimationStateListener[]::new);
private final EventQueue queue = new EventQueue(); private final EventQueue queue = new EventQueue();
private final ObjectSet<String> propertyIds = new ObjectSet(); private final LongSet propertyIds = new LongSet();
boolean animationsChanged; boolean animationsChanged;
private float timeScale = 1; private float timeScale = 1;
private int unkeyedState; private int unkeyedState;
@ -703,14 +703,14 @@ public class AnimationState {
int[] timelineMode = entry.timelineMode.setSize(timelinesCount); int[] timelineMode = entry.timelineMode.setSize(timelinesCount);
entry.timelineHoldMix.clear(); entry.timelineHoldMix.clear();
TrackEntry[] timelineHoldMix = entry.timelineHoldMix.setSize(timelinesCount); TrackEntry[] timelineHoldMix = entry.timelineHoldMix.setSize(timelinesCount);
ObjectSet<String> propertyIds = this.propertyIds; LongSet propertyIds = this.propertyIds;
boolean add = entry.additive, keepHold = entry.keepHold; boolean add = entry.additive, keepHold = entry.keepHold;
TrackEntry to = entry.mixingTo; TrackEntry to = entry.mixingTo;
outer: outer:
for (int i = 0; i < timelinesCount; i++) { for (int i = 0; i < timelinesCount; i++) {
Timeline timeline = timelines[i]; Timeline timeline = timelines[i];
String[] ids = timeline.propertyIds; long[] ids = timeline.propertyIds;
boolean first = propertyIds.addAll(ids) boolean first = propertyIds.addAll(ids)
&& !(timeline instanceof DrawOrderFolderTimeline && propertyIds.contains(DrawOrderTimeline.propertyID)); && !(timeline instanceof DrawOrderFolderTimeline && propertyIds.contains(DrawOrderTimeline.propertyID));