From 9ee2a1c1c06d70057824395b7e99a0b4216b06c8 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Tue, 13 Aug 2013 15:32:32 +0200 Subject: [PATCH] Events added to binary. --- .../src/com/esotericsoftware/spine/Event.java | 6 +-- .../com/esotericsoftware/spine/EventData.java | 6 +-- .../spine/SkeletonBinary.java | 40 +++++++++++++++--- .../esotericsoftware/spine/SkeletonJson.java | 26 ++++++------ .../esotericsoftware/spine/SkeletonTest.java | 1 - spine-libgdx/test/goblins.json | 8 ++-- spine-libgdx/test/goblins.skel | Bin 5805 -> 5872 bytes 7 files changed, 56 insertions(+), 31 deletions(-) diff --git a/spine-libgdx/src/com/esotericsoftware/spine/Event.java b/spine-libgdx/src/com/esotericsoftware/spine/Event.java index 6318e9375..0e95cffca 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/Event.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/Event.java @@ -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; diff --git a/spine-libgdx/src/com/esotericsoftware/spine/EventData.java b/spine-libgdx/src/com/esotericsoftware/spine/EventData.java index 386f5eb45..e6054ae47 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/EventData.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/EventData.java @@ -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."); diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index cd8ebdae4..e5d8b9b81 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -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); } diff --git a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 11c80d260..3054158ee 100644 --- a/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -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); diff --git a/spine-libgdx/test/com/esotericsoftware/spine/SkeletonTest.java b/spine-libgdx/test/com/esotericsoftware/spine/SkeletonTest.java index e33fd1586..c9504ab4f 100644 --- a/spine-libgdx/test/com/esotericsoftware/spine/SkeletonTest.java +++ b/spine-libgdx/test/com/esotericsoftware/spine/SkeletonTest.java @@ -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); diff --git a/spine-libgdx/test/goblins.json b/spine-libgdx/test/goblins.json index 35838d58c..b14424a4a 100644 --- a/spine-libgdx/test/goblins.json +++ b/spine-libgdx/test/goblins.json @@ -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" } ] } } diff --git a/spine-libgdx/test/goblins.skel b/spine-libgdx/test/goblins.skel index ac4e387bcf51fa780648ba93751e8b89378cf2f8..677e98dfac5ec69619c6bf7e2b0b49e8c94003f1 100644 GIT binary patch delta 606 zcmY*TO=wd=82onMU*5}WsumUTr#7vnph^2;h(XFr3{upi2NA?WwQCa_V@aYYdMIA3 zcxjoU2#R>|q`4?XZ-#<+@DMzRAV}+}^iUN9PgZx=66(UvH#6Vtu+J0U6EoeMvDxk( zh57vwvBZ0o_;5gp5{oM_kx}9d*WO*G18Z63wOB%phR)$OA5`%tf%1McJu>W|QuAE5 zC%Mj>#$XS*WpSatceHw`P5#K!7KD>VFC$zr;u7y`d~F1huNc8rvMS>Iga-9W6GGD5 zwv(JmQNCKLtq-+br-ZZSK1Q=^+ws8MEsN%r#AkDd#GhumkF25?9n+vol_E=A7qzxW zIBun6{D!4|^~ma%xL~Q8W$ScbYi_F93_s?kh}3P;ubCq)qQWO4?u=hPS1wh$P;p*j zmvgYMae^F2=}}Y58a~}i22y$B=OE3_M`vG z#!J<57hd^qFc}Ro5Iu%|cQbx?hj6VUjaz;OPh(jW{JbpQ0?*IlOY9~Z(Gz$k_m4XZ ySnPPahud{gs|P$!M0UMc6+#;+DT&yNrOx+uV1%oy-!|kZ7n#1ZAx62%|NFo60l4b` delta 480 zcmYLEO-LJI6#RBKU$UEQl1lt(@L;m3(h`^axQJN)QiHS}48?=Ni%pwlv#5zC5fqAe zRJ?RMpcX7W)*b{!J=a2S^`Pj%qSuH=r3WcJw3`js$D4Wc<}kc>BX7&^T8v=ONQRB; zPQ=)lvDS`VTN8Sz05A`+&UP5zC5$j3Trv{285vnNhTp7=0Mq`Sjo^q48?zxi<|0UQ zEtuy**yJR9HSv`7;+B()JFnS@+k8)GUVSrZ(OBj%Dk!(iO)S_J0XGmgfd?T^5nZExi SC6dH4F@YbR