From e14b092aa7236da580cdd1aacf5cdb906611bbb3 Mon Sep 17 00:00:00 2001 From: CloneTrooper1019 Date: Thu, 31 Oct 2019 21:40:31 -0500 Subject: [PATCH] Added read support for Instance Attributes. This isn't 100% finished yet. I intend to add some better API for reading specific attributes, as well as write support (of course!) --- BinaryFormat/Chunks/PROP.cs | 3 + DataTypes/BrickColor.cs | 4 + DataTypes/CFrame.cs | 45 +++++ DataTypes/Color3.cs | 7 +- DataTypes/Color3uint8.cs | 6 +- DataTypes/ColorSequence.cs | 17 +- DataTypes/ColorSequenceKeypoint.cs | 11 +- DataTypes/Content.cs | 6 +- DataTypes/NumberRange.cs | 23 ++- DataTypes/NumberSequence.cs | 15 +- DataTypes/NumberSequenceKeypoint.cs | 11 +- DataTypes/PhysicalProperties.cs | 14 +- DataTypes/ProtectedString.cs | 6 +- DataTypes/Quaternion.cs | 8 +- DataTypes/Ray.cs | 7 +- DataTypes/Rect.cs | 7 +- DataTypes/Region3.cs | 36 ++-- DataTypes/Region3int16.cs | 16 +- DataTypes/UDim.cs | 13 +- DataTypes/UDim2.cs | 8 +- DataTypes/Vector2.cs | 14 +- DataTypes/Vector2int16.cs | 69 ++++++++ DataTypes/Vector3.cs | 13 +- DataTypes/Vector3int16.cs | 12 +- RobloxFileFormat.csproj | 3 + RobloxFileFormat.dll | Bin 318464 -> 325632 bytes Tree/Attributes.cs | 252 ++++++++++++++++++++++++++++ Tree/Instance.cs | 26 ++- Tree/Property.cs | 10 ++ Utility/Formatting.cs | 13 ++ 30 files changed, 580 insertions(+), 95 deletions(-) create mode 100644 DataTypes/Vector2int16.cs create mode 100644 Tree/Attributes.cs diff --git a/BinaryFormat/Chunks/PROP.cs b/BinaryFormat/Chunks/PROP.cs index fbcf33e..f3463cc 100644 --- a/BinaryFormat/Chunks/PROP.cs +++ b/BinaryFormat/Chunks/PROP.cs @@ -87,6 +87,9 @@ namespace RobloxFiles.BinaryFormat.Chunks // Check if this is going to be casted as a BinaryString. // BinaryStrings should use a type of byte[] instead. + if (Name == "AttributesSerialize") + return buffer; + Property prop = props[i]; Instance instance = prop.Instance; diff --git a/DataTypes/BrickColor.cs b/DataTypes/BrickColor.cs index 8bd7e21..d85af38 100644 --- a/DataTypes/BrickColor.cs +++ b/DataTypes/BrickColor.cs @@ -26,6 +26,9 @@ namespace RobloxFiles.DataTypes private const string DefaultName = "Medium stone grey"; private const int DefaultNumber = 194; + public static implicit operator int(BrickColor color) => color.Number; + public static implicit operator BrickColor(int number) => FromNumber(number); + internal BrickColor(int number, uint rgb, string name) { uint r = (rgb / 65536) % 256; @@ -43,6 +46,7 @@ namespace RobloxFiles.DataTypes ByNumber = BrickColors.ColorMap.ToDictionary(brickColor => brickColor.Number); ByPalette = BrickColors.PaletteMap.Select(number => ByNumber[number]).ToList(); } + public static BrickColor FromName(string name) { diff --git a/DataTypes/CFrame.cs b/DataTypes/CFrame.cs index 9e9eb41..0726bb3 100644 --- a/DataTypes/CFrame.cs +++ b/DataTypes/CFrame.cs @@ -1,4 +1,5 @@ using System; +using RobloxFiles.Enums; namespace RobloxFiles.DataTypes { @@ -121,6 +122,50 @@ namespace RobloxFiles.DataTypes m31 = comp[9]; m32 = comp[10]; m33 = comp[11]; } + private void initFromMatrix(Vector3 pos, Vector3 vX, Vector3 vY, Vector3 vZ = null) + { + if (vZ == null) + vZ = vX.Cross(vY); + + m14 = pos.X; m24 = pos.Y; m34 = pos.Z; + m11 = vX.X; m12 = vX.Y; m13 = vX.Z; + m21 = vY.X; m22 = vY.Y; m23 = vY.Z; + m31 = vZ.X; m32 = vZ.Y; m33 = vZ.Z; + } + + public CFrame(Vector3 pos, Vector3 vX, Vector3 vY, Vector3 vZ = null) + { + initFromMatrix(pos, vX, vY, vZ); + } + + internal CFrame(Attribute attr) + { + Vector3 pos = new Vector3(attr); + byte rawOrientId = attr.readByte(); + + if (rawOrientId > 0) + { + // Make sure this value is in a safe range. + int orientId = (rawOrientId - 1) % 36; + + NormalId xColumn = (NormalId)(orientId / 6); + Vector3 vX = Vector3.FromNormalId(xColumn); + + NormalId yColumn = (NormalId)(orientId % 6); + Vector3 vY = Vector3.FromNormalId(yColumn); + + initFromMatrix(pos, vX, vY); + } + else + { + Vector3 vX = new Vector3(attr), + vY = new Vector3(attr), + vZ = new Vector3(attr); + + initFromMatrix(pos, vX, vY, vZ); + } + } + public static CFrame operator +(CFrame a, Vector3 b) { float[] ac = a.GetComponents(); diff --git a/DataTypes/Color3.cs b/DataTypes/Color3.cs index 381d50a..90ea391 100644 --- a/DataTypes/Color3.cs +++ b/DataTypes/Color3.cs @@ -5,6 +5,7 @@ namespace RobloxFiles.DataTypes public class Color3 { public readonly float R, G, B; + public override string ToString() => $"{R}, {G}, {B}"; public Color3(float r = 0, float g = 0, float b = 0) { @@ -13,9 +14,11 @@ namespace RobloxFiles.DataTypes B = b; } - public override string ToString() + internal Color3(Attribute attr) { - return string.Join(", ", R, G, B); + R = attr.readFloat(); + G = attr.readFloat(); + B = attr.readFloat(); } public static Color3 FromRGB(uint r = 0, uint g = 0, uint b = 0) diff --git a/DataTypes/Color3uint8.cs b/DataTypes/Color3uint8.cs index a436a52..d173359 100644 --- a/DataTypes/Color3uint8.cs +++ b/DataTypes/Color3uint8.cs @@ -7,6 +7,7 @@ public class Color3uint8 { public readonly byte R, G, B; + public override string ToString() => $"{R}, {G}, {B}"; public Color3uint8(byte r = 0, byte g = 0, byte b = 0) { @@ -15,11 +16,6 @@ B = b; } - public override string ToString() - { - return string.Join(", ", R, G, B); - } - public static implicit operator Color3(Color3uint8 color) { float r = color.R / 255f; diff --git a/DataTypes/ColorSequence.cs b/DataTypes/ColorSequence.cs index 9609e64..ef2d835 100644 --- a/DataTypes/ColorSequence.cs +++ b/DataTypes/ColorSequence.cs @@ -6,6 +6,11 @@ namespace RobloxFiles.DataTypes { public readonly ColorSequenceKeypoint[] Keypoints; + public override string ToString() + { + return string.Join(" ", Keypoints); + } + public ColorSequence(Color3 c) : this(c, c) { } @@ -42,10 +47,16 @@ namespace RobloxFiles.DataTypes Keypoints = keypoints; } - - public override string ToString() + + public ColorSequence(Attribute attr) { - return string.Join(" ", Keypoints); + int numKeys = attr.readInt(); + var keypoints = new ColorSequenceKeypoint[numKeys]; + + for (int i = 0; i < numKeys; i++) + keypoints[i] = new ColorSequenceKeypoint(attr); + + Keypoints = keypoints; } } } diff --git a/DataTypes/ColorSequenceKeypoint.cs b/DataTypes/ColorSequenceKeypoint.cs index 04570d6..33652c4 100644 --- a/DataTypes/ColorSequenceKeypoint.cs +++ b/DataTypes/ColorSequenceKeypoint.cs @@ -6,6 +6,11 @@ public readonly Color3 Value; public readonly int Envelope; + public override string ToString() + { + return $"{Time} {Value.R} {Value.G} {Value.B} {Envelope}"; + } + public ColorSequenceKeypoint(float time, Color3 value, int envelope = 0) { Time = time; @@ -13,9 +18,11 @@ Envelope = envelope; } - public override string ToString() + internal ColorSequenceKeypoint(Attribute attr) { - return string.Join(" ", Time, Value.R, Value.G, Value.B, Envelope); + Envelope = attr.readInt(); + Time = attr.readFloat(); + Value = new Color3(attr); } } } diff --git a/DataTypes/Content.cs b/DataTypes/Content.cs index 51536d2..5a1c46b 100644 --- a/DataTypes/Content.cs +++ b/DataTypes/Content.cs @@ -7,11 +7,7 @@ public class Content { public readonly string Url; - - public override string ToString() - { - return Url; - } + public override string ToString() => Url; public Content(string url) { diff --git a/DataTypes/NumberRange.cs b/DataTypes/NumberRange.cs index a95b210..ee9f7ac 100644 --- a/DataTypes/NumberRange.cs +++ b/DataTypes/NumberRange.cs @@ -7,24 +7,39 @@ namespace RobloxFiles.DataTypes public readonly float Min; public readonly float Max; + public override string ToString() => $"{Min} {Max}"; + public NumberRange(float num) { Min = num; Max = num; } + private static void checkRange(float min, float max) + { + if (max - min >= 0) + return; + + throw new Exception("NumberRange: invalid range"); + } + public NumberRange(float min = 0, float max = 0) { - if (max - min < 0) - throw new Exception("NumberRange: invalid range"); + checkRange(min, max); Min = min; Max = max; } - public override string ToString() + internal NumberRange(Attribute attr) { - return string.Join(" ", Min, Max); + float min = attr.readFloat(); + float max = attr.readFloat(); + + checkRange(min, max); + + Min = min; + Max = max; } } } diff --git a/DataTypes/NumberSequence.cs b/DataTypes/NumberSequence.cs index f789c0f..bc9c0e8 100644 --- a/DataTypes/NumberSequence.cs +++ b/DataTypes/NumberSequence.cs @@ -6,6 +6,11 @@ namespace RobloxFiles.DataTypes { public readonly NumberSequenceKeypoint[] Keypoints; + public override string ToString() + { + return string.Join(" ", Keypoints); + } + public NumberSequence(float n) { NumberSequenceKeypoint a = new NumberSequenceKeypoint(0, n); @@ -47,9 +52,15 @@ namespace RobloxFiles.DataTypes Keypoints = keypoints; } - public override string ToString() + public NumberSequence(Attribute attr) { - return string.Join(" ", Keypoints); + int numKeys = attr.readInt(); + var keypoints = new NumberSequenceKeypoint[numKeys]; + + for (int i = 0; i < numKeys; i++) + keypoints[i] = new NumberSequenceKeypoint(attr); + + Keypoints = keypoints; } } } diff --git a/DataTypes/NumberSequenceKeypoint.cs b/DataTypes/NumberSequenceKeypoint.cs index 381fdba..d2e7368 100644 --- a/DataTypes/NumberSequenceKeypoint.cs +++ b/DataTypes/NumberSequenceKeypoint.cs @@ -6,6 +6,11 @@ public readonly float Value; public readonly float Envelope; + public override string ToString() + { + return $"{Time} {Value} {Envelope}"; + } + public NumberSequenceKeypoint(float time, float value, float envelope = 0) { Time = time; @@ -13,9 +18,11 @@ Envelope = envelope; } - public override string ToString() + internal NumberSequenceKeypoint(Attribute attr) { - return string.Join(" ", Time, Value, Envelope); + Envelope = attr.readFloat(); + Time = attr.readFloat(); + Value = attr.readFloat(); } } } diff --git a/DataTypes/PhysicalProperties.cs b/DataTypes/PhysicalProperties.cs index 764fe25..d9d843f 100644 --- a/DataTypes/PhysicalProperties.cs +++ b/DataTypes/PhysicalProperties.cs @@ -12,6 +12,11 @@ namespace RobloxFiles.DataTypes public readonly float FrictionWeight = 1.0f; public readonly float ElasticityWeight = 1.0f; + public override string ToString() + { + return $"{Density}, {Friction}, {Elasticity}, {FrictionWeight}, {ElasticityWeight}"; + } + public PhysicalProperties(Material material) { if (MaterialInfo.FrictionWeightMap.ContainsKey(material)) @@ -32,9 +37,14 @@ namespace RobloxFiles.DataTypes ElasticityWeight = elasticityWeight; } - public override string ToString() + internal PhysicalProperties(Attribute attr) { - return string.Join(", ", Density, Friction, Elasticity, FrictionWeight, ElasticityWeight); + Density = attr.readFloat(); + Friction = attr.readFloat(); + Elasticity = attr.readFloat(); + + FrictionWeight = attr.readFloat(); + ElasticityWeight = attr.readFloat(); } } } diff --git a/DataTypes/ProtectedString.cs b/DataTypes/ProtectedString.cs index 89b1197..3b6bc57 100644 --- a/DataTypes/ProtectedString.cs +++ b/DataTypes/ProtectedString.cs @@ -7,11 +7,7 @@ public class ProtectedString { public readonly string ProtectedValue; - - public override string ToString() - { - return ProtectedValue; - } + public override string ToString() => ProtectedValue; public ProtectedString(string value) { diff --git a/DataTypes/Quaternion.cs b/DataTypes/Quaternion.cs index 722ce35..8f37d5a 100644 --- a/DataTypes/Quaternion.cs +++ b/DataTypes/Quaternion.cs @@ -9,6 +9,7 @@ namespace RobloxFiles.DataTypes public class Quaternion { public readonly float X, Y, Z, W; + public override string ToString() => $"{X}, {Y}, {Z}, {W}"; public float Magnitude { @@ -20,12 +21,7 @@ namespace RobloxFiles.DataTypes return (float)magnitude; } } - - public override string ToString() - { - return string.Join(", ", X, Y, Z, W); - } - + public Quaternion(float x, float y, float z, float w) { X = x; diff --git a/DataTypes/Ray.cs b/DataTypes/Ray.cs index 11ae42d..47d61f8 100644 --- a/DataTypes/Ray.cs +++ b/DataTypes/Ray.cs @@ -5,6 +5,8 @@ public readonly Vector3 Origin; public readonly Vector3 Direction; + public override string ToString() => $"{{{Origin}}}, {{{Direction}}}"; + public Ray Unit { get @@ -26,9 +28,10 @@ Direction = direction ?? new Vector3(); } - public override string ToString() + internal Ray(Attribute attr) { - return '{' + Origin.ToString() + "}, {" + Direction.ToString() + '}'; + Origin = new Vector3(attr); + Direction = new Vector3(attr); } public Vector3 ClosestPoint(Vector3 point) diff --git a/DataTypes/Rect.cs b/DataTypes/Rect.cs index 3ab6ad1..4cec9b3 100644 --- a/DataTypes/Rect.cs +++ b/DataTypes/Rect.cs @@ -8,6 +8,8 @@ public float Width => (Max - Min).X; public float Height => (Max - Min).Y; + public override string ToString() => $"{Min}, {Max}"; + public Rect(Vector2 min = null, Vector2 max = null) { Min = min ?? Vector2.Zero; @@ -20,9 +22,10 @@ Max = new Vector2(maxX, maxY); } - public override string ToString() + internal Rect(Attribute attr) { - return string.Join(", ", Min, Max); + Min = new Vector2(attr); + Max = new Vector2(attr); } } } diff --git a/DataTypes/Region3.cs b/DataTypes/Region3.cs index fb8c766..7c2a00c 100644 --- a/DataTypes/Region3.cs +++ b/DataTypes/Region3.cs @@ -4,37 +4,39 @@ namespace RobloxFiles.DataTypes { public class Region3 { - public readonly CFrame CFrame; - public readonly Vector3 Size; + public readonly Vector3 Min, Max; - public Region3(Vector3 a, Vector3 b) + public Vector3 Size => (Max - Min); + public CFrame CFrame => new CFrame((Min + Max) / 2); + + public override string ToString() => $"{CFrame}; {Size}"; + + public Region3(Vector3 min, Vector3 max) { - CFrame = new CFrame((a + b) / 2); - Size = b - a; + Min = min; + Max = max; } - public override string ToString() + internal Region3(Attribute attr) { - return CFrame + "; " + Size; + Min = new Vector3(attr); + Max = new Vector3(attr); } - + public Region3 ExpandToGrid(float resolution) { - Vector3 min = (CFrame - (Size / 2)).Position / resolution; - Vector3 max = (CFrame + (Size / 2)).Position / resolution; - Vector3 emin = new Vector3 ( - (float)Math.Floor(min.X) * resolution, - (float)Math.Floor(min.Y) * resolution, - (float)Math.Floor(min.Z) * resolution + (float)Math.Floor(Min.X) * resolution, + (float)Math.Floor(Min.Y) * resolution, + (float)Math.Floor(Min.Z) * resolution ); Vector3 emax = new Vector3 ( - (float)Math.Floor(max.X) * resolution, - (float)Math.Floor(max.Y) * resolution, - (float)Math.Floor(max.Z) * resolution + (float)Math.Floor(Max.X) * resolution, + (float)Math.Floor(Max.Y) * resolution, + (float)Math.Floor(Max.Z) * resolution ); return new Region3(emin, emax); diff --git a/DataTypes/Region3int16.cs b/DataTypes/Region3int16.cs index a029831..7b47d4c 100644 --- a/DataTypes/Region3int16.cs +++ b/DataTypes/Region3int16.cs @@ -1,14 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace RobloxFiles.DataTypes +namespace RobloxFiles.DataTypes { - public struct Region3int16 + public class Region3int16 { public readonly Vector3int16 Min, Max; + public override string ToString() => $"{Min}; {Max}"; public Region3int16(Vector3int16 min = null, Vector3int16 max = null) { @@ -16,9 +11,10 @@ namespace RobloxFiles.DataTypes Max = max ?? new Vector3int16(); } - public override string ToString() + internal Region3int16(Attribute attr) { - return string.Join("; ", Min, Max); + Min = new Vector3int16(attr); + Max = new Vector3int16(attr); } } } diff --git a/DataTypes/UDim.cs b/DataTypes/UDim.cs index c3d6ba8..0087454 100644 --- a/DataTypes/UDim.cs +++ b/DataTypes/UDim.cs @@ -5,12 +5,20 @@ public readonly float Scale; public readonly int Offset; + public override string ToString() => $"{Scale}, {Offset}"; + public UDim(float scale = 0, int offset = 0) { Scale = scale; Offset = offset; } + internal UDim(Attribute attr) + { + Scale = attr.readFloat(); + Offset = attr.readInt(); + } + public static UDim operator+(UDim a, UDim b) { return new UDim(a.Scale + b.Scale, a.Offset + b.Offset); @@ -20,10 +28,5 @@ { return new UDim(a.Scale - b.Scale, a.Offset - b.Offset); } - - public override string ToString() - { - return string.Join(", ", Scale, Offset); - } } } \ No newline at end of file diff --git a/DataTypes/UDim2.cs b/DataTypes/UDim2.cs index 9c734ae..21b913d 100644 --- a/DataTypes/UDim2.cs +++ b/DataTypes/UDim2.cs @@ -3,6 +3,7 @@ public class UDim2 { public readonly UDim X, Y; + public override string ToString() => $"{{{X}}},{{{Y}}}"; public UDim Width => X; public UDim Height => Y; @@ -19,11 +20,12 @@ Y = y; } - public override string ToString() + internal UDim2(Attribute attr) { - return '{' + X.ToString() + "},{" + Y.ToString() + '}'; + X = new UDim(attr); + Y = new UDim(attr); } - + public UDim2 Lerp(UDim2 other, float alpha) { float scaleX = X.Scale + ((other.X.Scale - X.Scale) * alpha); diff --git a/DataTypes/Vector2.cs b/DataTypes/Vector2.cs index ddb8289..6e28a2f 100644 --- a/DataTypes/Vector2.cs +++ b/DataTypes/Vector2.cs @@ -5,7 +5,8 @@ namespace RobloxFiles.DataTypes public class Vector2 { public readonly float X, Y; - + public override string ToString() => $"{X}, {Y}"; + public float Magnitude { get @@ -34,6 +35,12 @@ namespace RobloxFiles.DataTypes Y = coords.Length > 1 ? coords[1] : 0; } + internal Vector2(Attribute attr) + { + X = attr.readFloat(); + Y = attr.readFloat(); + } + private delegate Vector2 Operator(Vector2 a, Vector2 b); private static Vector2 upcastFloatOp(Vector2 vec, float num, Operator upcast) @@ -76,11 +83,6 @@ namespace RobloxFiles.DataTypes public static Vector2 Zero => new Vector2(0, 0); - public override string ToString() - { - return string.Join(", ", X, Y); - } - public float Dot(Vector2 other) { float dotX = X * other.X; diff --git a/DataTypes/Vector2int16.cs b/DataTypes/Vector2int16.cs new file mode 100644 index 0000000..6e1535e --- /dev/null +++ b/DataTypes/Vector2int16.cs @@ -0,0 +1,69 @@ +using System; + +namespace RobloxFiles.DataTypes +{ + public class Vector2int16 + { + public readonly short X, Y; + public override string ToString() => $"{X}, {Y}"; + + public Vector2int16(short x = 0, short y = 0) + { + X = x; + Y = y; + } + + public Vector2int16(int x = 0, int y = 0) + { + X = (short)x; + Y = (short)y; + } + + internal Vector2int16(Attribute attr) + { + X = attr.readShort(); + Y = attr.readShort(); + } + + private delegate Vector2int16 Operator(Vector2int16 a, Vector2int16 b); + + private static Vector2int16 upcastShortOp(Vector2int16 vec, short num, Operator upcast) + { + Vector2int16 numVec = new Vector2int16(num, num); + return upcast(vec, numVec); + } + + private static Vector2int16 upcastShortOp(short num, Vector2int16 vec, Operator upcast) + { + Vector2int16 numVec = new Vector2int16(num, num); + return upcast(numVec, vec); + } + + private static Operator add = new Operator((a, b) => new Vector2int16(a.X + b.X, a.Y + b.Y)); + private static Operator sub = new Operator((a, b) => new Vector2int16(a.X - b.X, a.Y - b.Y)); + private static Operator mul = new Operator((a, b) => new Vector2int16(a.X * b.X, a.Y * b.Y)); + private static Operator div = new Operator((a, b) => + { + if (b.X == 0 || b.Y == 0) + throw new DivideByZeroException(); + + return new Vector2int16(a.X / b.X, a.Y / b.Y); + }); + + public static Vector2int16 operator +(Vector2int16 a, Vector2int16 b) => add(a, b); + public static Vector2int16 operator +(Vector2int16 v, short n) => upcastShortOp(v, n, add); + public static Vector2int16 operator +(short n, Vector2int16 v) => upcastShortOp(n, v, add); + + public static Vector2int16 operator -(Vector2int16 a, Vector2int16 b) => sub(a, b); + public static Vector2int16 operator -(Vector2int16 v, short n) => upcastShortOp(v, n, sub); + public static Vector2int16 operator -(short n, Vector2int16 v) => upcastShortOp(n, v, sub); + + public static Vector2int16 operator *(Vector2int16 a, Vector2int16 b) => mul(a, b); + public static Vector2int16 operator *(Vector2int16 v, short n) => upcastShortOp(v, n, mul); + public static Vector2int16 operator *(short n, Vector2int16 v) => upcastShortOp(n, v, mul); + + public static Vector2int16 operator /(Vector2int16 a, Vector2int16 b) => div(a, b); + public static Vector2int16 operator /(Vector2int16 v, short n) => upcastShortOp(v, n, div); + public static Vector2int16 operator /(short n, Vector2int16 v) => upcastShortOp(n, v, div); + } +} diff --git a/DataTypes/Vector3.cs b/DataTypes/Vector3.cs index 65fe164..8461cb2 100644 --- a/DataTypes/Vector3.cs +++ b/DataTypes/Vector3.cs @@ -6,6 +6,7 @@ namespace RobloxFiles.DataTypes public class Vector3 { public readonly float X, Y, Z; + public override string ToString() => $"{X}, {Y}, {Z}"; public float Magnitude { @@ -37,6 +38,13 @@ namespace RobloxFiles.DataTypes Z = coords.Length > 2 ? coords[2] : 0; } + internal Vector3(Attribute attr) + { + X = attr.readFloat(); + Y = attr.readFloat(); + Z = attr.readFloat(); + } + public static Vector3 FromAxis(Axis axis) { float[] coords = new float[3] { 0f, 0f, 0f }; @@ -102,10 +110,7 @@ namespace RobloxFiles.DataTypes public static Vector3 Up => new Vector3(0, 1, 0); public static Vector3 Back => new Vector3(0, 0, 1); - public override string ToString() - { - return string.Join(", ", X, Y, Z); - } + public float Dot(Vector3 other) { diff --git a/DataTypes/Vector3int16.cs b/DataTypes/Vector3int16.cs index 6ac48cb..82da093 100644 --- a/DataTypes/Vector3int16.cs +++ b/DataTypes/Vector3int16.cs @@ -5,12 +5,10 @@ namespace RobloxFiles.DataTypes public class Vector3int16 { public readonly short X, Y, Z; + public override string ToString() => $"{X}, {Y}, {Z}"; - public Vector3int16() + public Vector3int16() : this(0, 0, 0) { - X = 0; - Y = 0; - Z = 0; } public Vector3int16(short x = 0, short y = 0, short z = 0) @@ -27,9 +25,11 @@ namespace RobloxFiles.DataTypes Z = (short)z; } - public override string ToString() + internal Vector3int16(Attribute attr) { - return string.Join(", ", X, Y, Z); + X = attr.readShort(); + Y = attr.readShort(); + Z = attr.readShort(); } private delegate Vector3int16 Operator(Vector3int16 a, Vector3int16 b); diff --git a/RobloxFileFormat.csproj b/RobloxFileFormat.csproj index 35bf185..bb5b11f 100644 --- a/RobloxFileFormat.csproj +++ b/RobloxFileFormat.csproj @@ -81,10 +81,13 @@ + + + diff --git a/RobloxFileFormat.dll b/RobloxFileFormat.dll index 7ad1cc2e95c3f1070ad1a977d37865baeecd22b0..1eb362f33b3e148b4b6cf05380051e07fc8ef447 100644 GIT binary patch delta 133971 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 reader.ReadInt32(); + internal byte readByte() => reader.ReadByte(); + internal bool readBool() => reader.ReadBoolean(); + internal short readShort() => reader.ReadInt16(); + internal float readFloat() => reader.ReadSingle(); + internal double readDouble() => reader.ReadDouble(); + internal string readString() => reader.ReadString(true); + + private Attribute[] readArray() + { + int count = readInt(); + var result = new Attribute[count]; + + for (int i = 0; i < count; i++) + result[i] = new Attribute(reader); + + return result; + } + + private object readEnum() + { + string name = readString(); + int value = readInt(); + + try + { + Type enumType = Type.GetType($"RobloxFiles.Enums.{name}"); + return Enum.ToObject(enumType, value); + } + catch + { + Console.WriteLine($"RobloxFile - Got unknown Enum {name} in Attribute."); + return null; + } + } + + private void readData() + { + if (reader == null) + return; + + DataType = (AttributeType)reader.ReadByte(); + + switch (DataType) + { + ////////////////////////// + case AttributeType.Null: + break; + case AttributeType.String: + Value = readString(); + break; + case AttributeType.Bool: + Value = readBool(); + break; + case AttributeType.Int: + Value = readInt(); + break; + case AttributeType.Float: + Value = readFloat(); + break; + case AttributeType.Double: + Value = readDouble(); + break; + case AttributeType.Array: + Value = readArray(); + break; + case AttributeType.Dictionary: + Value = new Attributes(reader); + break; + case AttributeType.UDim: + Value = new UDim(this); + break; + case AttributeType.UDim2: + Value = new UDim2(this); + break; + case AttributeType.Ray: + Value = new Ray(this); + break; + case AttributeType.Faces: + Value = (Faces)readInt(); + break; + case AttributeType.Axes: + Value = (Axes)readInt(); + break; + case AttributeType.BrickColor: + Value = (BrickColor)readInt(); + break; + case AttributeType.Color3: + Value = new Color3(this); + break; + case AttributeType.Vector2: + Value = new Vector2(this); + break; + case AttributeType.Vector3: + Value = new Vector3(this); + break; + case AttributeType.Vector2int16: + Value = new Vector2int16(this); + break; + case AttributeType.Vector3int16: + Value = new Vector3int16(this); + break; + case AttributeType.CFrame: + Value = new CFrame(this); + break; + case AttributeType.Enum: + Value = readEnum(); + break; + case AttributeType.NumberSequence: + Value = new NumberSequence(this); + break; + case AttributeType.NumberSequenceKeypoint: + Value = new NumberSequenceKeypoint(this); + break; + case AttributeType.ColorSequence: + Value = new ColorSequence(this); + break; + case AttributeType.ColorSequenceKeypoint: + Value = new ColorSequenceKeypoint(this); + break; + case AttributeType.NumberRange: + Value = new NumberRange(this); + break; + case AttributeType.Rect: + Value = new Rect(this); + break; + case AttributeType.PhysicalProperties: + bool custom = readBool(); + + if (custom) + Value = new PhysicalProperties(this); + + break; + case AttributeType.Region3: + Value = new Region3(this); + break; + case AttributeType.Region3int16: + Value = new Region3int16(this); + break; + default: + throw new InvalidDataException($"Cannot handle AttributeType {DataType}!"); + ////////////////////////// + } + + reader = null; + } + + internal Attribute(BinaryReader reader) + { + this.reader = reader; + readData(); + } + + internal Attribute(MemoryStream stream) + { + reader = new BinaryReader(stream); + readData(); + } + } + + public class Attributes : Dictionary + { + private void initialize(BinaryReader reader) + { + int numEntries = reader.ReadInt32(); + + for (int i = 0; i < numEntries; i++) + { + string key = reader.ReadString(true); + var attribute = new Attribute(reader); + Add(key, attribute); + } + } + + internal Attributes(BinaryReader reader) + { + initialize(reader); + } + + internal Attributes(MemoryStream stream) + { + using (BinaryReader reader = new BinaryReader(stream)) + { + initialize(reader); + } + } + + internal byte[] Serialize() + { + // TODO + return new byte[0]; + } + } +} diff --git a/Tree/Instance.cs b/Tree/Instance.cs index 2d95dca..d22f398 100644 --- a/Tree/Instance.cs +++ b/Tree/Instance.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Reflection; using System.Text; @@ -57,9 +58,23 @@ namespace RobloxFiles /// A list of CollectionService tags assigned to this Instance. public List Tags => RawTags; + /// The attributes defined for this Instance. + public Attributes Attributes { get; private set; } + /// The internal serialized data of this Instance's attributes - internal byte[] AttributesSerialize; - + internal byte[] AttributesSerialize + { + get + { + return Attributes?.Serialize() ?? new byte[0]; + } + set + { + MemoryStream data = new MemoryStream(value); + Attributes = new Attributes(data); + } + } + /// /// Internal format of the Instance's CollectionService tags. /// Property objects will look to this member for serializing the Tags property. @@ -538,6 +553,7 @@ namespace RobloxFiles } Property tags = GetProperty("Tags"); + Property attributes = GetProperty("AttributesSerialize"); if (tags == null) { @@ -545,6 +561,12 @@ namespace RobloxFiles AddProperty(ref tags); } + if (attributes == null) + { + attributes = new Property("AttributesSerialize", PropertyType.String); + AddProperty(ref attributes); + } + return Properties; } } diff --git a/Tree/Property.cs b/Tree/Property.cs index a8f5de9..c29e270 100644 --- a/Tree/Property.cs +++ b/Tree/Property.cs @@ -166,6 +166,11 @@ namespace RobloxFiles byte[] data = Instance.SerializedTags; RawValue = data; } + else if (Name == "AttributesSerialize") + { + byte[] data = Instance.AttributesSerialize; + RawValue = data; + } else { FieldInfo field = Instance.GetType() @@ -194,6 +199,11 @@ namespace RobloxFiles byte[] data = value as byte[]; Instance.SerializedTags = data; } + else if (Name == "AttributesSerialize" && value is byte[]) + { + byte[] data = value as byte[]; + Instance.AttributesSerialize = data; + } else { FieldInfo field = Instance.GetType() diff --git a/Utility/Formatting.cs b/Utility/Formatting.cs index 4a7ddec..aea7fb9 100644 --- a/Utility/Formatting.cs +++ b/Utility/Formatting.cs @@ -1,5 +1,7 @@ using System; +using System.IO; using System.Globalization; +using System.Text; internal static class Formatting { @@ -112,4 +114,15 @@ internal static class Formatting { return Math.Abs(a - b) < epsilon; } + + public static string ReadString(this BinaryReader reader, bool useIntLength) + { + if (!useIntLength) + return reader.ReadString(); + + int len = reader.ReadInt32(); + byte[] buffer = reader.ReadBytes(len); + + return Encoding.UTF8.GetString(buffer); + } } \ No newline at end of file