Skip to content

Commit ea161b0

Browse files
committed
Refactor BinaryCodable
1 parent 0c69295 commit ea161b0

File tree

5 files changed

+229
-98
lines changed

5 files changed

+229
-98
lines changed

Sources/GameMath/2D Types (New)/Vector2n.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ extension Position2n: Hashable where Scalar: Hashable { }
3333
extension Position2n: Comparable where Scalar: Comparable { }
3434
extension Position2n: Sendable where Scalar: Sendable { }
3535
extension Position2n: Codable where Scalar: Codable { }
36-
extension Position2n: BinaryCodable { }
36+
extension Position2n: BinaryCodable where Scalar: BinaryCodable { }
3737

3838
public typealias Size2i = Size2n<Int32>
3939
public typealias Size2f = Size2n<Float32>
@@ -55,7 +55,7 @@ extension Size2n: Hashable where Scalar: Hashable { }
5555
extension Size2n: Comparable where Scalar: Comparable { }
5656
extension Size2n: Sendable where Scalar: Sendable { }
5757
extension Size2n: Codable where Scalar: Codable { }
58-
extension Size2n: BinaryCodable { }
58+
extension Size2n: BinaryCodable where Scalar: BinaryCodable { }
5959
public extension Size2n {
6060
@inlinable var width: Scalar { get{self.x} set{self.x = newValue} }
6161
@inlinable var height: Scalar { get{self.y} set{self.y = newValue} }
@@ -248,3 +248,16 @@ public extension Vector2n where Scalar: FixedWidthInteger {
248248
lhs = lhs / rhs
249249
}
250250
}
251+
252+
extension Vector2n where Scalar: BinaryCodable {
253+
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
254+
try self.x.encode(into: &data, version: version)
255+
try self.y.encode(into: &data, version: version)
256+
}
257+
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
258+
self.init(
259+
x: try .init(decoding: data, at: &offset, version: version),
260+
y: try .init(decoding: data, at: &offset, version: version)
261+
)
262+
}
263+
}

Sources/GameMath/3D Types (New)/Vector3n.swift

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ extension Position3n: Hashable where Scalar: Hashable { }
3636
extension Position3n: Comparable where Scalar: Comparable { }
3737
extension Position3n: Sendable where Scalar: Sendable { }
3838
extension Position3n: Codable where Scalar: Codable { }
39-
extension Position3n: BinaryCodable { }
39+
extension Position3n: BinaryCodable where Scalar: BinaryCodable { }
4040

4141
public typealias Size3i = Size3n<Int32>
4242
public typealias Size3f = Size3n<Float32>
@@ -60,7 +60,7 @@ extension Size3n: Hashable where Scalar: Hashable { }
6060
extension Size3n: Comparable where Scalar: Comparable { }
6161
extension Size3n: Sendable where Scalar: Sendable { }
6262
extension Size3n: Codable where Scalar: Codable { }
63-
extension Size3n: BinaryCodable { }
63+
extension Size3n: BinaryCodable where Scalar: BinaryCodable { }
6464
public extension Size3n {
6565
@inlinable var width: Scalar { get{self.x} set{self.x = newValue} }
6666
@inlinable var height: Scalar { get{self.y} set{self.y = newValue} }
@@ -187,3 +187,18 @@ public extension Vector3n where Scalar: FixedWidthInteger {
187187
lhs = lhs / rhs
188188
}
189189
}
190+
191+
extension Vector3n where Scalar: BinaryCodable {
192+
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
193+
try self.x.encode(into: &data, version: version)
194+
try self.y.encode(into: &data, version: version)
195+
try self.z.encode(into: &data, version: version)
196+
}
197+
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
198+
self.init(
199+
x: try .init(decoding: data, at: &offset, version: version),
200+
y: try .init(decoding: data, at: &offset, version: version),
201+
z: try .init(decoding: data, at: &offset, version: version)
202+
)
203+
}
204+
}

Sources/GateEngine/Resources/Skinning/Raw/RawSkeleton.swift

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
public import GameMath
99
public import GateUtilities
1010

11-
public struct RawSkeleton: Equatable, Hashable, Codable, BinaryCodable {
11+
public struct RawSkeleton: Equatable, Hashable, Codable {
1212
public var joints: [RawJoint] = []
1313

14-
public struct RawJoint: Equatable, Hashable, Identifiable, Codable, BinaryCodable {
14+
public struct RawJoint: Equatable, Hashable, Identifiable, Codable {
1515
public typealias ID = Int
1616
public let id: ID
1717
public var parent: ID?
@@ -31,3 +31,27 @@ public struct RawSkeleton: Equatable, Hashable, Codable, BinaryCodable {
3131
self.joints = rawJoints
3232
}
3333
}
34+
35+
extension RawSkeleton: BinaryCodable {
36+
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
37+
try self.joints.encode(into: &data, version: version)
38+
}
39+
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
40+
try self.joints = .init(decoding: data, at: &offset, version: version)
41+
}
42+
}
43+
44+
extension RawSkeleton.RawJoint: BinaryCodable {
45+
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
46+
try self.id.encode(into: &data, version: version)
47+
try self.parent.encode(into: &data, version: version)
48+
try self.name.encode(into: &data, version: version)
49+
try self.localTransform.encode(into: &data, version: version)
50+
}
51+
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
52+
try self.id = .init(decoding: data, at: &offset, version: version)
53+
try self.parent = .init(decoding: data, at: &offset, version: version)
54+
try self.name = .init(decoding: data, at: &offset, version: version)
55+
try self.localTransform = .init(decoding: data, at: &offset, version: version)
56+
}
57+
}

Sources/GateEngine/Resources/Skinning/Raw/RawSkin.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
public import GameMath
99
public import GateUtilities
1010

11-
public struct RawSkin: Hashable, BinaryCodable {
11+
public struct RawSkin: Hashable {
1212
public let joints: [RawJoint]
1313
public let jointIndices: [UInt32]
1414
public let jointWeights: [Float]
@@ -21,7 +21,7 @@ public struct RawSkin: Hashable, BinaryCodable {
2121
self.bindShape = bindShape
2222
}
2323

24-
public struct RawJoint: Hashable, BinaryCodable {
24+
public struct RawJoint: Hashable {
2525
public let id: Int
2626
public let inverseBindMatrix: Matrix4x4
2727
public init(id: Int, inverseBindMatrix: Matrix4x4) {
@@ -35,30 +35,28 @@ public struct RawSkin: Hashable, BinaryCodable {
3535
}
3636
}
3737

38-
extension RawSkin {
38+
extension RawSkin: BinaryCodable {
3939
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
4040
try joints.encode(into: &data, version: version)
4141
try jointIndices.encode(into: &data, version: version)
4242
try jointWeights.encode(into: &data, version: version)
4343
try self.bindShape.encode(into: &data, version: version)
4444
}
45-
4645
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
4746
self.joints = try .init(decoding: data, at: &offset, version: version)
4847
self.jointIndices = try .init(decoding: data, at: &offset, version: version)
4948
self.jointWeights = try .init(decoding: data, at: &offset, version: version)
50-
self.bindShape = try Matrix4x4(decoding: data, at: &offset, version: version)
49+
self.bindShape = try .init(decoding: data, at: &offset, version: version)
5150
}
5251
}
5352

54-
extension RawSkin.RawJoint {
53+
extension RawSkin.RawJoint: BinaryCodable {
5554
public func encode(into data: inout ContiguousArray<UInt8>, version: BinaryCodableVersion) throws {
5655
try self.id.encode(into: &data, version: version)
5756
try self.inverseBindMatrix.encode(into: &data, version: version)
5857
}
59-
6058
public init(decoding data: UnsafeRawBufferPointer, at offset: inout Int, version: BinaryCodableVersion) throws {
61-
self.id = try Int(decoding: data, at: &offset, version: version)
62-
self.inverseBindMatrix = try Matrix4x4(decoding: data, at: &offset, version: version)
59+
self.id = try .init(decoding: data, at: &offset, version: version)
60+
self.inverseBindMatrix = try .init(decoding: data, at: &offset, version: version)
6361
}
6462
}

0 commit comments

Comments
 (0)