From be25484ac2c364d00287612a5c9b40aa053ea202 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Fri, 12 Jan 2024 19:48:47 +0100 Subject: [PATCH] [csharp] Renamed utility method ReadByte to ReadUByte to prevent future porting pitfalls (see preceding commit). --- spine-csharp/src/SkeletonBinary.cs | 42 ++++++++++++++++-------------- spine-csharp/src/package.json | 2 +- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index e88033f23..b1fe22e7c 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -307,7 +307,7 @@ namespace Spine { if ((flags & 8) != 0) data.rotate = input.ReadFloat(); if ((flags & 16) != 0) data.scaleX = input.ReadFloat(); if ((flags & 32) != 0) data.shearX = input.ReadFloat(); - data.step = 1f / input.ReadByte(); + data.step = 1f / input.ReadUByte(); data.inertia = input.ReadFloat(); data.strength = input.ReadFloat(); data.damping = input.ReadFloat(); @@ -428,7 +428,7 @@ namespace Spine { String attachmentName, bool nonessential) { float scale = this.scale; - int flags = input.ReadByte(); + int flags = input.ReadUByte(); string name = (flags & 8) != 0 ? input.ReadStringRef() : attachmentName; switch ((AttachmentType)(flags & 0x7)) { // 0b111 @@ -658,7 +658,7 @@ namespace Spine { for (int i = 0, n = input.ReadInt(true); i < n; i++) { int slotIndex = input.ReadInt(true); for (int ii = 0, nn = input.ReadInt(true); ii < nn; ii++) { - int timelineType = input.ReadByte(), frameCount = input.ReadInt(true), frameLast = frameCount - 1; + int timelineType = input.ReadUByte(), frameCount = input.ReadInt(true), frameLast = frameCount - 1; switch (timelineType) { case SLOT_ATTACHMENT: { AttachmentTimeline timeline = new AttachmentTimeline(frameCount, slotIndex); @@ -678,7 +678,7 @@ namespace Spine { float time2 = input.ReadFloat(); float r2 = input.Read() / 255f, g2 = input.Read() / 255f; float b2 = input.Read() / 255f, a2 = input.Read() / 255f; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -707,7 +707,7 @@ namespace Spine { if (frame == frameLast) break; float time2 = input.ReadFloat(); float r2 = input.Read() / 255f, g2 = input.Read() / 255f, b2 = input.Read() / 255f; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -738,7 +738,7 @@ namespace Spine { float nr = input.Read() / 255f, ng = input.Read() / 255f; float nb = input.Read() / 255f, na = input.Read() / 255f; float nr2 = input.Read() / 255f, ng2 = input.Read() / 255f, nb2 = input.Read() / 255f; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -775,7 +775,7 @@ namespace Spine { float time2 = input.ReadFloat(); float nr = input.Read() / 255f, ng = input.Read() / 255f, nb = input.Read() / 255f; float nr2 = input.Read() / 255f, ng2 = input.Read() / 255f, nb2 = input.Read() / 255f; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -807,7 +807,7 @@ namespace Spine { if (frame == frameLast) break; float time2 = input.ReadFloat(); float a2 = input.Read() / 255f; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -829,7 +829,7 @@ namespace Spine { for (int i = 0, n = input.ReadInt(true); i < n; i++) { int boneIndex = input.ReadInt(true); for (int ii = 0, nn = input.ReadInt(true); ii < nn; ii++) { - int type = input.ReadByte(), frameCount = input.ReadInt(true), bezierCount = input.ReadInt(true); + int type = input.ReadUByte(), frameCount = input.ReadInt(true), bezierCount = input.ReadInt(true); switch (type) { case BONE_ROTATE: ReadTimeline(input, timelines, new RotateTimeline(frameCount, bezierCount, boneIndex), 1); @@ -875,7 +875,7 @@ namespace Spine { timeline.SetFrame(frame, time, mix, softness, input.ReadSByte(), (flags & 1) != 0, (flags & 2) != 0); if (frame == frameLast) break; float time2 = input.ReadFloat(), mix2 = input.ReadFloat(), softness2 = input.ReadFloat() * scale; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -902,7 +902,7 @@ namespace Spine { if (frame == frameLast) break; float time2 = input.ReadFloat(), mixRotate2 = input.ReadFloat(), mixX2 = input.ReadFloat(), mixY2 = input.ReadFloat(), mixScaleX2 = input.ReadFloat(), mixScaleY2 = input.ReadFloat(), mixShearY2 = input.ReadFloat(); - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -931,7 +931,7 @@ namespace Spine { int index = input.ReadInt(true); PathConstraintData data = skeletonData.pathConstraints.Items[index]; for (int ii = 0, nn = input.ReadInt(true); ii < nn; ii++) { - int type = input.ReadByte(), frameCount = input.ReadInt(true), bezierCount = input.ReadInt(true); + int type = input.ReadUByte(), frameCount = input.ReadInt(true), bezierCount = input.ReadInt(true); switch (type) { case PATH_POSITION: ReadTimeline(input, timelines, new PathConstraintPositionTimeline(frameCount, bezierCount, index), @@ -949,7 +949,7 @@ namespace Spine { if (frame == frameLast) break; float time2 = input.ReadFloat(), mixRotate2 = input.ReadFloat(), mixX2 = input.ReadFloat(), mixY2 = input.ReadFloat(); - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -974,7 +974,7 @@ namespace Spine { for (int i = 0, n = input.ReadInt(true); i < n; i++) { int index = input.ReadInt(true) - 1; for (int ii = 0, nn = input.ReadInt(true); ii < nn; ii++) { - int type = input.ReadByte(), frameCount = input.ReadInt(true); + int type = input.ReadUByte(), frameCount = input.ReadInt(true); if (type == PHYSICS_RESET) { PhysicsConstraintResetTimeline timeline = new PhysicsConstraintResetTimeline(frameCount, index); for (int frame = 0; frame < frameCount; frame++) @@ -1019,7 +1019,7 @@ namespace Spine { Attachment attachment = skin.GetAttachment(slotIndex, attachmentName); if (attachment == null) throw new SerializationException("Timeline attachment not found: " + attachmentName); - int timelineType = input.ReadByte(), frameCount = input.ReadInt(true), frameLast = frameCount - 1; + int timelineType = input.ReadUByte(), frameCount = input.ReadInt(true), frameLast = frameCount - 1; switch (timelineType) { case ATTACHMENT_DEFORM: { VertexAttachment vertexAttachment = (VertexAttachment)attachment; @@ -1054,7 +1054,7 @@ namespace Spine { timeline.SetFrame(frame, time, deform); if (frame == frameLast) break; float time2 = input.ReadFloat(); - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -1150,7 +1150,7 @@ namespace Spine { timeline.SetFrame(frame, time, value); if (frame == frameLast) break; float time2 = input.ReadFloat(), value2 = input.ReadFloat() * scale; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -1171,7 +1171,7 @@ namespace Spine { timeline.SetFrame(frame, time, value1, value2); if (frame == frameLast) break; float time2 = input.ReadFloat(), nvalue1 = input.ReadFloat() * scale, nvalue2 = input.ReadFloat() * scale; - switch (input.ReadByte()) { + switch (input.ReadUByte()) { case CURVE_STEPPED: timeline.SetStepped(frame); break; @@ -1214,10 +1214,14 @@ namespace Spine { return input.ReadByte(); } - public byte ReadByte () { + /// Explicit unsigned byte variant to prevent pitfalls porting Java reference implementation + /// where byte is signed vs C# where byte is unsigned. + public byte ReadUByte () { return (byte)input.ReadByte(); } + /// Explicit signed byte variant to prevent pitfalls porting Java reference implementation + /// where byte is signed vs C# where byte is unsigned. public sbyte ReadSByte () { int value = input.ReadByte(); if (value == -1) throw new EndOfStreamException(); diff --git a/spine-csharp/src/package.json b/spine-csharp/src/package.json index ba14a3608..593dbbf90 100644 --- a/spine-csharp/src/package.json +++ b/spine-csharp/src/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-csharp", "displayName": "spine-csharp Runtime", "description": "This plugin provides the spine-csharp core runtime.", - "version": "4.2.8", + "version": "4.2.9", "unity": "2018.3", "author": { "name": "Esoteric Software",