mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-13 18:48:44 +08:00
Events added to binary.
This commit is contained in:
parent
e1c5d9b0c6
commit
9ee2a1c1c0
@ -3,9 +3,9 @@ package com.esotericsoftware.spine;
|
||||
|
||||
public class Event {
|
||||
final private EventData data;
|
||||
private int intValue;
|
||||
private float floatValue;
|
||||
private String stringValue;
|
||||
int intValue;
|
||||
float floatValue;
|
||||
String stringValue;
|
||||
|
||||
public Event (EventData data) {
|
||||
this.data = data;
|
||||
|
||||
@ -3,9 +3,9 @@ package com.esotericsoftware.spine;
|
||||
|
||||
public class EventData {
|
||||
final String name;
|
||||
private int intValue;
|
||||
private float floatValue;
|
||||
private String stringValue;
|
||||
int intValue;
|
||||
float floatValue;
|
||||
String stringValue;
|
||||
|
||||
public EventData (String name) {
|
||||
if (name == null) throw new IllegalArgumentException("name cannot be null.");
|
||||
|
||||
@ -28,6 +28,7 @@ package com.esotericsoftware.spine;
|
||||
import com.esotericsoftware.spine.Animation.AttachmentTimeline;
|
||||
import com.esotericsoftware.spine.Animation.ColorTimeline;
|
||||
import com.esotericsoftware.spine.Animation.CurveTimeline;
|
||||
import com.esotericsoftware.spine.Animation.EventTimeline;
|
||||
import com.esotericsoftware.spine.Animation.RotateTimeline;
|
||||
import com.esotericsoftware.spine.Animation.ScaleTimeline;
|
||||
import com.esotericsoftware.spine.Animation.Timeline;
|
||||
@ -87,7 +88,7 @@ public class SkeletonBinary {
|
||||
if (file == null) throw new IllegalArgumentException("file cannot be null.");
|
||||
|
||||
SkeletonData skeletonData = new SkeletonData();
|
||||
skeletonData.setName(file.nameWithoutExtension());
|
||||
skeletonData.name = file.nameWithoutExtension();
|
||||
|
||||
DataInput input = new DataInput(file.read(512));
|
||||
try {
|
||||
@ -120,7 +121,7 @@ public class SkeletonBinary {
|
||||
if (boneData == null) throw new SerializationException("Bone not found: " + boneName);
|
||||
SlotData slotData = new SlotData(slotName, boneData);
|
||||
Color.rgba8888ToColor(slotData.getColor(), input.readInt());
|
||||
slotData.setAttachmentName(input.readString());
|
||||
slotData.attachmentName = input.readString();
|
||||
slotData.additiveBlending = input.readByte() == 1;
|
||||
skeletonData.addSlot(slotData);
|
||||
}
|
||||
@ -128,7 +129,7 @@ public class SkeletonBinary {
|
||||
// Default skin.
|
||||
Skin defaultSkin = readSkin(input, "default");
|
||||
if (defaultSkin != null) {
|
||||
skeletonData.setDefaultSkin(defaultSkin);
|
||||
skeletonData.defaultSkin = defaultSkin;
|
||||
skeletonData.addSkin(defaultSkin);
|
||||
}
|
||||
|
||||
@ -136,6 +137,15 @@ public class SkeletonBinary {
|
||||
for (int i = 0, n = input.readInt(true); i < n; i++)
|
||||
skeletonData.addSkin(readSkin(input, input.readString()));
|
||||
|
||||
// Events.
|
||||
for (int i = 0, n = input.readInt(true); i < n; i++) {
|
||||
EventData eventData = new EventData(input.readString());
|
||||
eventData.intValue = input.readInt(false);
|
||||
eventData.floatValue = input.readFloat();
|
||||
eventData.stringValue = input.readString();
|
||||
skeletonData.addEvent(eventData);
|
||||
}
|
||||
|
||||
// Animations.
|
||||
for (int i = 0, n = input.readInt(true); i < n; i++)
|
||||
readAnimation(input.readString(), input, skeletonData);
|
||||
@ -215,7 +225,7 @@ public class SkeletonBinary {
|
||||
switch (timelineType) {
|
||||
case TIMELINE_ROTATE: {
|
||||
RotateTimeline timeline = new RotateTimeline(keyCount);
|
||||
timeline.setBoneIndex(boneIndex);
|
||||
timeline.boneIndex = boneIndex;
|
||||
for (int frameIndex = 0; frameIndex < keyCount; frameIndex++) {
|
||||
timeline.setFrame(frameIndex, input.readFloat(), input.readFloat());
|
||||
if (frameIndex < keyCount - 1) readCurve(input, frameIndex, timeline);
|
||||
@ -234,7 +244,7 @@ public class SkeletonBinary {
|
||||
timeline = new TranslateTimeline(keyCount);
|
||||
timelineScale = scale;
|
||||
}
|
||||
timeline.setBoneIndex(boneIndex);
|
||||
timeline.boneIndex = boneIndex;
|
||||
for (int frameIndex = 0; frameIndex < keyCount; frameIndex++) {
|
||||
timeline.setFrame(frameIndex, input.readFloat(), input.readFloat() * timelineScale, input.readFloat()
|
||||
* timelineScale);
|
||||
@ -260,7 +270,7 @@ public class SkeletonBinary {
|
||||
switch (timelineType) {
|
||||
case TIMELINE_COLOR: {
|
||||
ColorTimeline timeline = new ColorTimeline(keyCount);
|
||||
timeline.setSlotIndex(slotIndex);
|
||||
timeline.slotIndex = slotIndex;
|
||||
for (int frameIndex = 0; frameIndex < keyCount; frameIndex++) {
|
||||
float time = input.readFloat();
|
||||
Color.rgba8888ToColor(tempColor, input.readInt());
|
||||
@ -273,7 +283,7 @@ public class SkeletonBinary {
|
||||
}
|
||||
case TIMELINE_ATTACHMENT:
|
||||
AttachmentTimeline timeline = new AttachmentTimeline(keyCount);
|
||||
timeline.setSlotIndex(slotIndex);
|
||||
timeline.slotIndex = slotIndex;
|
||||
for (int frameIndex = 0; frameIndex < keyCount; frameIndex++)
|
||||
timeline.setFrame(frameIndex, input.readFloat(), input.readString());
|
||||
timelines.add(timeline);
|
||||
@ -284,6 +294,22 @@ public class SkeletonBinary {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int eventCount = input.readInt(true);
|
||||
if (eventCount > 0) {
|
||||
EventTimeline timeline = new EventTimeline(eventCount);
|
||||
for (int i = 0; i < eventCount; i++) {
|
||||
float time = input.readFloat();
|
||||
String eventName = input.readString();
|
||||
EventData eventData = skeletonData.findEvent(eventName);
|
||||
if (eventData == null) throw new SerializationException("Event not found: " + eventName);
|
||||
Event event = new Event(eventData);
|
||||
event.intValue = input.readInt(false);
|
||||
event.floatValue = input.readFloat();
|
||||
event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue;
|
||||
timeline.setFrame(i, time, event);
|
||||
}
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
throw new SerializationException("Error reading skeleton file.", ex);
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public class SkeletonJson {
|
||||
if (file == null) throw new IllegalArgumentException("file cannot be null.");
|
||||
|
||||
SkeletonData skeletonData = new SkeletonData();
|
||||
skeletonData.setName(file.nameWithoutExtension());
|
||||
skeletonData.name = file.nameWithoutExtension();
|
||||
|
||||
JsonValue root = new JsonReader().parse(file);
|
||||
|
||||
@ -115,7 +115,7 @@ public class SkeletonJson {
|
||||
String color = slotMap.getString("color", null);
|
||||
if (color != null) slotData.getColor().set(Color.valueOf(color));
|
||||
|
||||
slotData.setAttachmentName(slotMap.getString("attachment", null));
|
||||
slotData.attachmentName = slotMap.getString("attachment", null);
|
||||
|
||||
slotData.additiveBlending = slotMap.getBoolean("additive", false);
|
||||
|
||||
@ -133,15 +133,15 @@ public class SkeletonJson {
|
||||
}
|
||||
}
|
||||
skeletonData.addSkin(skin);
|
||||
if (skin.name.equals("default")) skeletonData.setDefaultSkin(skin);
|
||||
if (skin.name.equals("default")) skeletonData.defaultSkin = skin;
|
||||
}
|
||||
|
||||
// Events.
|
||||
for (JsonValue eventMap = root.getChild("events"); eventMap != null; eventMap = eventMap.next()) {
|
||||
EventData eventData = new EventData(eventMap.name());
|
||||
eventData.setInt(eventMap.getInt("int", 0));
|
||||
eventData.setFloat(eventMap.getFloat("float", 0f));
|
||||
eventData.setString(eventMap.getString("string", null));
|
||||
eventData.intValue = eventMap.getInt("int", 0);
|
||||
eventData.floatValue = eventMap.getFloat("float", 0f);
|
||||
eventData.stringValue = eventMap.getString("string", null);
|
||||
skeletonData.addEvent(eventData);
|
||||
}
|
||||
|
||||
@ -199,7 +199,7 @@ public class SkeletonJson {
|
||||
String timelineName = timelineMap.name();
|
||||
if (timelineName.equals(TIMELINE_ROTATE)) {
|
||||
RotateTimeline timeline = new RotateTimeline(timelineMap.size);
|
||||
timeline.setBoneIndex(boneIndex);
|
||||
timeline.boneIndex = boneIndex;
|
||||
|
||||
int frameIndex = 0;
|
||||
for (JsonValue valueMap = timelineMap.child(); valueMap != null; valueMap = valueMap.next()) {
|
||||
@ -220,7 +220,7 @@ public class SkeletonJson {
|
||||
timeline = new TranslateTimeline(timelineMap.size);
|
||||
timelineScale = scale;
|
||||
}
|
||||
timeline.setBoneIndex(boneIndex);
|
||||
timeline.boneIndex = boneIndex;
|
||||
|
||||
int frameIndex = 0;
|
||||
for (JsonValue valueMap = timelineMap.child(); valueMap != null; valueMap = valueMap.next()) {
|
||||
@ -245,7 +245,7 @@ public class SkeletonJson {
|
||||
String timelineName = timelineMap.name();
|
||||
if (timelineName.equals(TIMELINE_COLOR)) {
|
||||
ColorTimeline timeline = new ColorTimeline(timelineMap.size);
|
||||
timeline.setSlotIndex(slotIndex);
|
||||
timeline.slotIndex = slotIndex;
|
||||
|
||||
int frameIndex = 0;
|
||||
for (JsonValue valueMap = timelineMap.child(); valueMap != null; valueMap = valueMap.next()) {
|
||||
@ -260,7 +260,7 @@ public class SkeletonJson {
|
||||
|
||||
} else if (timelineName.equals(TIMELINE_ATTACHMENT)) {
|
||||
AttachmentTimeline timeline = new AttachmentTimeline(timelineMap.size);
|
||||
timeline.setSlotIndex(slotIndex);
|
||||
timeline.slotIndex = slotIndex;
|
||||
|
||||
int frameIndex = 0;
|
||||
for (JsonValue valueMap = timelineMap.child(); valueMap != null; valueMap = valueMap.next()) {
|
||||
@ -283,9 +283,9 @@ public class SkeletonJson {
|
||||
EventData eventData = skeletonData.findEvent(eventMap.getString("name"));
|
||||
if (eventData == null) throw new SerializationException("Event not found: " + eventMap.getString("name"));
|
||||
Event event = new Event(eventData);
|
||||
event.setInt(eventMap.getInt("int", eventData.getInt()));
|
||||
event.setFloat(eventMap.getFloat("float", eventData.getFloat()));
|
||||
event.setString(eventMap.getString("string", eventData.getString()));
|
||||
event.intValue = eventMap.getInt("int", eventData.getInt());
|
||||
event.floatValue = eventMap.getFloat("float", eventData.getFloat());
|
||||
event.stringValue = eventMap.getString("string", eventData.getString());
|
||||
timeline.setFrame(frameIndex++, eventMap.getFloat("time"), event);
|
||||
}
|
||||
timelines.add(timeline);
|
||||
|
||||
@ -83,7 +83,6 @@ public class SkeletonTest extends ApplicationAdapter {
|
||||
// binary.setScale(2);
|
||||
skeletonData = binary.readSkeletonData(Gdx.files.internal(name + ".skel"));
|
||||
}
|
||||
System.out.println(skeletonData.getEvents().size);
|
||||
animation = skeletonData.findAnimation("walk");
|
||||
|
||||
skeleton = new Skeleton(skeletonData);
|
||||
|
||||
@ -200,7 +200,7 @@
|
||||
},
|
||||
"events": {
|
||||
"test1": { "int": 1, "float": 2, "string": "three" },
|
||||
"test2": { "int": 123, "float": 456, "string": "789" }
|
||||
"test2": {}
|
||||
},
|
||||
"animations": {
|
||||
"walk": {
|
||||
@ -499,9 +499,9 @@
|
||||
}
|
||||
},
|
||||
"events": [
|
||||
{ "time": 0.4, "name": "test1", "int": 0, "float": 0, "string": "" },
|
||||
{ "time": 0.4, "name": "test2", "int": 0, "float": 0, "string": "" },
|
||||
{ "time": 0.8, "name": "test1", "int": 12, "float": 0, "string": "" }
|
||||
{ "time": 0.46666667, "name": "test1" },
|
||||
{ "time": 0.53333336, "name": "test2" },
|
||||
{ "time": 0.93333334, "name": "test1" }
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user