Events added to binary.

This commit is contained in:
NathanSweet 2013-08-13 15:32:32 +02:00
parent e1c5d9b0c6
commit 9ee2a1c1c0
7 changed files with 56 additions and 31 deletions

View File

@ -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;

View File

@ -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.");

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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.