diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java index 09dcf6a3b..9c5568771 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java @@ -2326,23 +2326,24 @@ public class SkeletonSerializer { json.writeName("type"); json.writeValue("EventData"); + Event setup = obj.getSetupPose(); json.writeName("int"); - json.writeValue(obj.getInt()); + json.writeValue(setup.getInt()); json.writeName("float"); - json.writeValue(obj.getFloat()); + json.writeValue(setup.getFloat()); json.writeName("string"); - json.writeValue(obj.getString()); + json.writeValue(setup.getString()); json.writeName("audioPath"); json.writeValue(obj.getAudioPath()); json.writeName("volume"); - json.writeValue(obj.getVolume()); + json.writeValue(setup.getVolume()); json.writeName("balance"); - json.writeValue(obj.getBalance()); + json.writeValue(setup.getBalance()); json.writeName("name"); json.writeValue(obj.getName()); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java index e29cb06ee..0e607541c 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Event.java @@ -39,12 +39,12 @@ import com.esotericsoftware.spine.AnimationState.AnimationStateListener; * {@link AnimationStateListener#event(com.esotericsoftware.spine.AnimationState.TrackEntry, Event)}, and * Events in the Spine User Guide. */ public class Event { + final float time; final EventData data; int intValue; float floatValue; String stringValue; float volume, balance; - final float time; public Event (float time, EventData data) { if (data == null) throw new IllegalArgumentException("data cannot be null."); @@ -52,6 +52,7 @@ public class Event { this.data = data; } + /** The integer payload for this event. */ public int getInt () { return intValue; } @@ -60,6 +61,7 @@ public class Event { this.intValue = intValue; } + /** The float payload for this event. */ public float getFloat () { return floatValue; } @@ -68,6 +70,7 @@ public class Event { this.floatValue = floatValue; } + /** The string payload for this event. */ public String getString () { return stringValue; } @@ -77,6 +80,7 @@ public class Event { this.stringValue = stringValue; } + /** If an audio path is set, the volume for the audio. */ public float getVolume () { return volume; } @@ -85,6 +89,7 @@ public class Event { this.volume = volume; } + /** If an audio path is set, the left/right balance for the audio. */ public float getBalance () { return balance; } @@ -93,7 +98,7 @@ public class Event { this.balance = balance; } - /** The animation time this event was keyed. */ + /** The animation time this event was keyed, or -1 for the setup pose. */ public float getTime () { return time; } diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java index 30e522c77..bbdc02362 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/EventData.java @@ -36,43 +36,19 @@ import com.badlogic.gdx.utils.Null; * See Events in the Spine User Guide. */ public class EventData { final String name; - int intValue; - float floatValue; - String stringValue; @Null String audioPath; - float volume, balance; + final Event setupPose = new Event(-1, this); public EventData (String name) { - if (name == null) throw new IllegalArgumentException("name cannot be null."); this.name = name; } - public int getInt () { - return intValue; + /** The setup values that are shared by all events with this data. */ + public Event getSetupPose () { + return setupPose; } - public void setInt (int intValue) { - this.intValue = intValue; - } - - public float getFloat () { - return floatValue; - } - - public void setFloat (float floatValue) { - this.floatValue = floatValue; - } - - public String getString () { - return stringValue; - } - - public void setString (String stringValue) { - if (stringValue == null) throw new IllegalArgumentException("stringValue cannot be null."); - this.stringValue = stringValue; - } - - /** Path to an audio file relative to the audio path in the Spine project. */ + /** Path to an audio file relative to the audio folder as defined in Spine. */ public @Null String getAudioPath () { return audioPath; } @@ -82,24 +58,6 @@ public class EventData { this.audioPath = audioPath; } - /** If an audio path is set, the volume for the audio. */ - public float getVolume () { - return volume; - } - - public void setVolume (float volume) { - this.volume = volume; - } - - /** If an audio path is set, the left/right balance for the audio. */ - public float getBalance () { - return balance; - } - - public void setBalance (float balance) { - this.balance = balance; - } - /** The name of the event, unique across all events in the skeleton. *
* See {@link SkeletonData#findEvent(String)}. */ diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 723d977b3..4f9ba6a1f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -485,13 +485,14 @@ public class SkeletonBinary extends SkeletonLoader { o = skeletonData.events.setSize(n = input.readInt(true)); for (int i = 0; i < n; i++) { var data = new EventData(input.readString()); - data.intValue = input.readInt(false); - data.floatValue = input.readFloat(); - data.stringValue = input.readString(); + Event setup = data.setupPose; + setup.intValue = input.readInt(false); + setup.floatValue = input.readFloat(); + setup.stringValue = input.readString(); data.audioPath = input.readString(); if (data.audioPath != null) { - data.volume = input.readFloat(); - data.balance = input.readFloat(); + setup.volume = input.readFloat(); + setup.balance = input.readFloat(); } o[i] = data; } @@ -1196,7 +1197,7 @@ public class SkeletonBinary extends SkeletonLoader { event.intValue = input.readInt(false); event.floatValue = input.readFloat(); event.stringValue = input.readString(); - if (event.stringValue == null) event.stringValue = eventData.stringValue; + if (event.stringValue == null) event.stringValue = eventData.setupPose.stringValue; if (event.data.audioPath != null) { event.volume = input.readFloat(); event.balance = input.readFloat(); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index b801d8cb6..251221670 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -501,13 +501,14 @@ public class SkeletonJson extends SkeletonLoader { // Events. for (JsonValue eventMap = root.getChild("events"); eventMap != null; eventMap = eventMap.next) { var data = new EventData(eventMap.name); - data.intValue = eventMap.getInt("int", 0); - data.floatValue = eventMap.getFloat("float", 0f); - data.stringValue = eventMap.getString("string", ""); + Event setup = data.setupPose; + setup.intValue = eventMap.getInt("int", 0); + setup.floatValue = eventMap.getFloat("float", 0f); + setup.stringValue = eventMap.getString("string", ""); data.audioPath = eventMap.getString("audio", null); if (data.audioPath != null) { - data.volume = eventMap.getFloat("volume", 1); - data.balance = eventMap.getFloat("balance", 0); + setup.volume = eventMap.getFloat("volume", 1); + setup.balance = eventMap.getFloat("balance", 0); } skeletonData.events.add(data); } @@ -1243,15 +1244,16 @@ public class SkeletonJson extends SkeletonLoader { var timeline = new EventTimeline(eventsMap.size); int frame = 0; for (JsonValue keyMap = eventsMap.child; keyMap != null; keyMap = keyMap.next, frame++) { - EventData eventData = skeletonData.findEvent(keyMap.getString("name")); - if (eventData == null) throw new SerializationException("Event not found: " + keyMap.getString("name")); - var event = new Event(keyMap.getFloat("time", 0), eventData); - event.intValue = keyMap.getInt("int", eventData.intValue); - event.floatValue = keyMap.getFloat("float", eventData.floatValue); - event.stringValue = keyMap.getString("string", eventData.stringValue); + EventData data = skeletonData.findEvent(keyMap.getString("name")); + if (data == null) throw new SerializationException("Event not found: " + keyMap.getString("name")); + Event setup = data.setupPose; + var event = new Event(keyMap.getFloat("time", 0), data); + event.intValue = keyMap.getInt("int", setup.intValue); + event.floatValue = keyMap.getFloat("float", setup.floatValue); + event.stringValue = keyMap.getString("string", setup.stringValue); if (event.data.audioPath != null) { - event.volume = keyMap.getFloat("volume", eventData.volume); - event.balance = keyMap.getFloat("balance", eventData.balance); + event.volume = keyMap.getFloat("volume", setup.volume); + event.balance = keyMap.getFloat("balance", setup.balance); } timeline.setFrame(frame, event); }