diff --git a/Sources/Voxelotl/ChunkID.swift b/Sources/Voxelotl/ChunkID.swift index 9e69a4f..9153bb7 100644 --- a/Sources/Voxelotl/ChunkID.swift +++ b/Sources/Voxelotl/ChunkID.swift @@ -1,35 +1,35 @@ import simd public struct ChunkID: Hashable { - public let id: SIMD3 + private let _id: SIMD3 init(id: SIMD3) { - self.id = id + self._id = id } } public extension ChunkID { - @inline(__always) init(_ x: Int, _ y: Int, _ z: Int) { self.id = SIMD3(x, y, z) } + @inline(__always) init(_ x: Int, _ y: Int, _ z: Int) { self._id = SIMD3(x, y, z) } @inline(__always) init(fromPosition position: SIMD3) { self.init(fromPosition: SIMD3(Int(floor(position.x)), Int(floor(position.y)), Int(floor(position.z)))) } - @inline(__always) init(fromPosition position: SIMD3) { self.id = position &>> Chunk.shift } + @inline(__always) init(fromPosition position: SIMD3) { self._id = position &>> Chunk.shift } - @inline(__always) func getPosition() -> SIMD3 { self.id &<< Chunk.shift } - @inline(__always) func getPosition(offset: SIMD3) -> SIMD3 { self.id &<< Chunk.shift &+ offset } - @inline(__always) func getFloatPosition() -> SIMD3 { SIMD3(self.id) * Float(Chunk.size) } + @inline(__always) func getPosition() -> SIMD3 { self._id &<< Chunk.shift } + @inline(__always) func getPosition(offset: SIMD3) -> SIMD3 { self._id &<< Chunk.shift &+ offset } + @inline(__always) func getFloatPosition() -> SIMD3 { SIMD3(self._id) * Float(Chunk.size) } @inline(__always) func getFloatPosition(offset: SIMD3) -> SIMD3 { - SIMD3(self.id) * Float(Chunk.size) + offset + SIMD3(self._id) * Float(Chunk.size) + offset } - @inline(__always) static func &+ (lhs: Self, rhs: Self) -> Self { .init(id: lhs.id &+ rhs.id) } - @inline(__always) static func &- (lhs: Self, rhs: Self) -> Self { .init(id: lhs.id &- rhs.id) } + @inline(__always) static func &+ (lhs: Self, rhs: Self) -> Self { .init(id: lhs._id &+ rhs._id) } + @inline(__always) static func &- (lhs: Self, rhs: Self) -> Self { .init(id: lhs._id &- rhs._id) } } public extension ChunkID { @inlinable func distance(_ other: Self) -> Float { - simd_distance(SIMD3(self.id), SIMD3(other.id)) + simd_distance(SIMD3(SIMD3(self)), SIMD3(SIMD3(other))) } } @@ -39,6 +39,10 @@ public extension ChunkID { } } +fileprivate extension ChunkID { + @inline(__always) var id: SIMD3 { self._id } +} + public extension SIMD3 where Scalar == Int { init(_ chunkID: ChunkID) { self = chunkID.id } }