The Swift Package Index logo.Swift Package Index

Build Information

Failed to build JelloSwift, reference 0.16.0 (ce1dac), with Swift 6.1 for Wasm on 29 May 2025 16:42:37 UTC.

Build Command

bash -c docker run --pull=always --rm -v "checkouts-4609320-0":/host -w "$PWD" registry.gitlab.com/finestructure/spi-images:wasm-6.1-latest swift build --swift-sdk wasm32-unknown-wasi 2>&1

Build Log

 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/Body.swift:445:20: error: cannot find type 'JFloat' in scope
 443 |
 444 |         // find the average angle of all of the masses.
 445 |         var angle: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
/host/spi-builder-workspace/Sources/Body.swift:448:28: error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
 448 |         var originalAngle: JFloat = 0
     |                            `- error: cannot find type 'JFloat' in scope
 449 |
 450 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Body.swift:467:33: error: reference to member 'pi' cannot be resolved without a contextual type
 465 |                 let thisSign = (thisAngle >= 0.0) ? 1 : -1
 466 |
 467 |                 if abs(diff) > .pi && (thisSign != originalSign) {
     |                                 `- error: reference to member 'pi' cannot be resolved without a contextual type
 468 |                     if thisSign == -1 {
 469 |                         thisAngle = .pi + (.pi + thisAngle)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Body.swift:479:18: error: cannot find 'JFloat' in scope
 477 |         }
 478 |
 479 |         angle /= JFloat(c)
     |                  `- error: cannot find 'JFloat' in scope
 480 |
 481 |         derivedAngle = angle
/host/spi-builder-workspace/Sources/Body.swift:486:59: error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                           `- error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Body.swift:486:63: error: reference to member 'pi' cannot be resolved without a contextual type
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                               `- error: reference to member 'pi' cannot be resolved without a contextual type
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/Body.swift:544:13: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 542 |             let pointMass = pointMasses[i]
 543 |
 544 |             applyVelocity(-(pointMass.velocity - (pointMass.velocity * velDamping)) * (elapsed * 200), toPointMassAt: i)
     |             `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 545 |         }
 546 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Body.swift:638:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 636 |                     // this line crosses the test line at some point... does it
 637 |                     // do so within our test range?
 638 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 639 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 640 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Body.swift:665:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 663 |                     // this line crosses the test line at some point... does it
 664 |                     // do so within our test range?
 665 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 666 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 667 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Body.swift:748:20: error: cannot find type 'JFloat' in scope
 746 |         var hitPt: Vector2 = .zero
 747 |         var normal: Vector2 = .zero
 748 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 749 |
 750 |         var dist: JFloat = 0
/host/spi-builder-workspace/Sources/Body.swift:750:19: error: cannot find type 'JFloat' in scope
 748 |         var edgeD: JFloat = 0
 749 |
 750 |         var dist: JFloat = 0
     |                   `- error: cannot find type 'JFloat' in scope
 751 |
 752 |         let edge = edges[edgeNum]
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Body.swift:840:20: error: cannot find type 'JFloat' in scope
 838 |         var pointA = -1
 839 |         var pointB = -1
 840 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 841 |         var normal: Vector2 = .zero
 842 |         var hitPt: Vector2 = .zero
/host/spi-builder-workspace/Sources/Body.swift:844:24: error: cannot find 'JFloat' in scope
 842 |         var hitPt: Vector2 = .zero
 843 |
 844 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 845 |
 846 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Body.swift:900:24: error: cannot find type 'JFloat' in scope
 898 |         var closestP2 = 0// closestP1
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
     |                        `- error: cannot find type 'JFloat' in scope
 901 |         var closestD = JFloat.infinity
 902 |
/host/spi-builder-workspace/Sources/Body.swift:901:24: error: cannot find 'JFloat' in scope
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
 901 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 902 |
 903 |         for edge in edges {
/host/spi-builder-workspace/Sources/Body.swift:939:26: error: cannot find 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
 939 |         var closestSQD = JFloat.greatestFiniteMagnitude
     |                          `- error: cannot find 'JFloat' in scope
 940 |         var closest: Int!
 941 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
[33/36] Compiling JelloSwift Body.swift
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:269:45: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func -(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
270 |         return Vector2(x: lhs.x - rhs, y: lhs.y - rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:259:46: error: cannot find type 'JFloat' in scope
257 |
258 |     @inlinable
259 |     static public func - (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
260 |         return Vector3(x: lhs.x - rhs, y: lhs.y - rhs, z: lhs.z - rhs)
261 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:5:31: error: cannot find type 'JFloat' in scope
  3 | /// Plain 3-row 3-column Matrix with real components.
  4 | public struct Matrix3x3: CustomStringConvertible {
  5 |     public typealias Scalar = JFloat
    |                               `- error: cannot find type 'JFloat' in scope
  6 |
  7 |     /// Returns a 3x3 [identity matrix].
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:31:19: error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 32 |
 33 |     /// Returns the angle in radians of this Vector2
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/Body.swift:445:20: error: cannot find type 'JFloat' in scope
 443 |
 444 |         // find the average angle of all of the masses.
 445 |         var angle: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
/host/spi-builder-workspace/Sources/Body.swift:448:28: error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
 448 |         var originalAngle: JFloat = 0
     |                            `- error: cannot find type 'JFloat' in scope
 449 |
 450 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Body.swift:467:33: error: reference to member 'pi' cannot be resolved without a contextual type
 465 |                 let thisSign = (thisAngle >= 0.0) ? 1 : -1
 466 |
 467 |                 if abs(diff) > .pi && (thisSign != originalSign) {
     |                                 `- error: reference to member 'pi' cannot be resolved without a contextual type
 468 |                     if thisSign == -1 {
 469 |                         thisAngle = .pi + (.pi + thisAngle)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Body.swift:479:18: error: cannot find 'JFloat' in scope
 477 |         }
 478 |
 479 |         angle /= JFloat(c)
     |                  `- error: cannot find 'JFloat' in scope
 480 |
 481 |         derivedAngle = angle
/host/spi-builder-workspace/Sources/Body.swift:486:59: error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                           `- error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Body.swift:486:63: error: reference to member 'pi' cannot be resolved without a contextual type
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                               `- error: reference to member 'pi' cannot be resolved without a contextual type
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/Body.swift:544:13: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 542 |             let pointMass = pointMasses[i]
 543 |
 544 |             applyVelocity(-(pointMass.velocity - (pointMass.velocity * velDamping)) * (elapsed * 200), toPointMassAt: i)
     |             `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 545 |         }
 546 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Body.swift:638:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 636 |                     // this line crosses the test line at some point... does it
 637 |                     // do so within our test range?
 638 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 639 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 640 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Body.swift:665:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 663 |                     // this line crosses the test line at some point... does it
 664 |                     // do so within our test range?
 665 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 666 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 667 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Body.swift:748:20: error: cannot find type 'JFloat' in scope
 746 |         var hitPt: Vector2 = .zero
 747 |         var normal: Vector2 = .zero
 748 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 749 |
 750 |         var dist: JFloat = 0
/host/spi-builder-workspace/Sources/Body.swift:750:19: error: cannot find type 'JFloat' in scope
 748 |         var edgeD: JFloat = 0
 749 |
 750 |         var dist: JFloat = 0
     |                   `- error: cannot find type 'JFloat' in scope
 751 |
 752 |         let edge = edges[edgeNum]
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Body.swift:840:20: error: cannot find type 'JFloat' in scope
 838 |         var pointA = -1
 839 |         var pointB = -1
 840 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 841 |         var normal: Vector2 = .zero
 842 |         var hitPt: Vector2 = .zero
/host/spi-builder-workspace/Sources/Body.swift:844:24: error: cannot find 'JFloat' in scope
 842 |         var hitPt: Vector2 = .zero
 843 |
 844 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 845 |
 846 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Body.swift:900:24: error: cannot find type 'JFloat' in scope
 898 |         var closestP2 = 0// closestP1
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
     |                        `- error: cannot find type 'JFloat' in scope
 901 |         var closestD = JFloat.infinity
 902 |
/host/spi-builder-workspace/Sources/Body.swift:901:24: error: cannot find 'JFloat' in scope
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
 901 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 902 |
 903 |         for edge in edges {
/host/spi-builder-workspace/Sources/Body.swift:939:26: error: cannot find 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
 939 |         var closestSQD = JFloat.greatestFiniteMagnitude
     |                          `- error: cannot find 'JFloat' in scope
 940 |         var closest: Int!
 941 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
[34/36] Compiling JelloSwift BodyCollisionInformation.swift
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:269:45: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func -(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
270 |         return Vector2(x: lhs.x - rhs, y: lhs.y - rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:259:46: error: cannot find type 'JFloat' in scope
257 |
258 |     @inlinable
259 |     static public func - (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
260 |         return Vector3(x: lhs.x - rhs, y: lhs.y - rhs, z: lhs.z - rhs)
261 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:5:31: error: cannot find type 'JFloat' in scope
  3 | /// Plain 3-row 3-column Matrix with real components.
  4 | public struct Matrix3x3: CustomStringConvertible {
  5 |     public typealias Scalar = JFloat
    |                               `- error: cannot find type 'JFloat' in scope
  6 |
  7 |     /// Returns a 3x3 [identity matrix].
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:31:19: error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 32 |
 33 |     /// Returns the angle in radians of this Vector2
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/Body.swift:445:20: error: cannot find type 'JFloat' in scope
 443 |
 444 |         // find the average angle of all of the masses.
 445 |         var angle: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
/host/spi-builder-workspace/Sources/Body.swift:448:28: error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
 448 |         var originalAngle: JFloat = 0
     |                            `- error: cannot find type 'JFloat' in scope
 449 |
 450 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Body.swift:467:33: error: reference to member 'pi' cannot be resolved without a contextual type
 465 |                 let thisSign = (thisAngle >= 0.0) ? 1 : -1
 466 |
 467 |                 if abs(diff) > .pi && (thisSign != originalSign) {
     |                                 `- error: reference to member 'pi' cannot be resolved without a contextual type
 468 |                     if thisSign == -1 {
 469 |                         thisAngle = .pi + (.pi + thisAngle)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Body.swift:479:18: error: cannot find 'JFloat' in scope
 477 |         }
 478 |
 479 |         angle /= JFloat(c)
     |                  `- error: cannot find 'JFloat' in scope
 480 |
 481 |         derivedAngle = angle
/host/spi-builder-workspace/Sources/Body.swift:486:59: error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                           `- error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Body.swift:486:63: error: reference to member 'pi' cannot be resolved without a contextual type
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                               `- error: reference to member 'pi' cannot be resolved without a contextual type
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/Body.swift:544:13: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 542 |             let pointMass = pointMasses[i]
 543 |
 544 |             applyVelocity(-(pointMass.velocity - (pointMass.velocity * velDamping)) * (elapsed * 200), toPointMassAt: i)
     |             `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 545 |         }
 546 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Body.swift:638:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 636 |                     // this line crosses the test line at some point... does it
 637 |                     // do so within our test range?
 638 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 639 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 640 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Body.swift:665:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 663 |                     // this line crosses the test line at some point... does it
 664 |                     // do so within our test range?
 665 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 666 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 667 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Body.swift:748:20: error: cannot find type 'JFloat' in scope
 746 |         var hitPt: Vector2 = .zero
 747 |         var normal: Vector2 = .zero
 748 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 749 |
 750 |         var dist: JFloat = 0
/host/spi-builder-workspace/Sources/Body.swift:750:19: error: cannot find type 'JFloat' in scope
 748 |         var edgeD: JFloat = 0
 749 |
 750 |         var dist: JFloat = 0
     |                   `- error: cannot find type 'JFloat' in scope
 751 |
 752 |         let edge = edges[edgeNum]
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Body.swift:840:20: error: cannot find type 'JFloat' in scope
 838 |         var pointA = -1
 839 |         var pointB = -1
 840 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 841 |         var normal: Vector2 = .zero
 842 |         var hitPt: Vector2 = .zero
/host/spi-builder-workspace/Sources/Body.swift:844:24: error: cannot find 'JFloat' in scope
 842 |         var hitPt: Vector2 = .zero
 843 |
 844 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 845 |
 846 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Body.swift:900:24: error: cannot find type 'JFloat' in scope
 898 |         var closestP2 = 0// closestP1
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
     |                        `- error: cannot find type 'JFloat' in scope
 901 |         var closestD = JFloat.infinity
 902 |
/host/spi-builder-workspace/Sources/Body.swift:901:24: error: cannot find 'JFloat' in scope
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
 901 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 902 |
 903 |         for edge in edges {
/host/spi-builder-workspace/Sources/Body.swift:939:26: error: cannot find 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
 939 |         var closestSQD = JFloat.greatestFiniteMagnitude
     |                          `- error: cannot find 'JFloat' in scope
 940 |         var closest: Int!
 941 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
[35/36] Compiling JelloSwift BodyComponent.swift
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:269:45: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func -(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
270 |         return Vector2(x: lhs.x - rhs, y: lhs.y - rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:259:46: error: cannot find type 'JFloat' in scope
257 |
258 |     @inlinable
259 |     static public func - (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
260 |         return Vector3(x: lhs.x - rhs, y: lhs.y - rhs, z: lhs.z - rhs)
261 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:5:31: error: cannot find type 'JFloat' in scope
  3 | /// Plain 3-row 3-column Matrix with real components.
  4 | public struct Matrix3x3: CustomStringConvertible {
  5 |     public typealias Scalar = JFloat
    |                               `- error: cannot find type 'JFloat' in scope
  6 |
  7 |     /// Returns a 3x3 [identity matrix].
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:31:19: error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 32 |
 33 |     /// Returns the angle in radians of this Vector2
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/Body.swift:445:20: error: cannot find type 'JFloat' in scope
 443 |
 444 |         // find the average angle of all of the masses.
 445 |         var angle: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
/host/spi-builder-workspace/Sources/Body.swift:448:28: error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
 448 |         var originalAngle: JFloat = 0
     |                            `- error: cannot find type 'JFloat' in scope
 449 |
 450 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Body.swift:467:33: error: reference to member 'pi' cannot be resolved without a contextual type
 465 |                 let thisSign = (thisAngle >= 0.0) ? 1 : -1
 466 |
 467 |                 if abs(diff) > .pi && (thisSign != originalSign) {
     |                                 `- error: reference to member 'pi' cannot be resolved without a contextual type
 468 |                     if thisSign == -1 {
 469 |                         thisAngle = .pi + (.pi + thisAngle)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Body.swift:479:18: error: cannot find 'JFloat' in scope
 477 |         }
 478 |
 479 |         angle /= JFloat(c)
     |                  `- error: cannot find 'JFloat' in scope
 480 |
 481 |         derivedAngle = angle
/host/spi-builder-workspace/Sources/Body.swift:486:59: error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                           `- error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Body.swift:486:63: error: reference to member 'pi' cannot be resolved without a contextual type
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                               `- error: reference to member 'pi' cannot be resolved without a contextual type
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/Body.swift:544:13: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 542 |             let pointMass = pointMasses[i]
 543 |
 544 |             applyVelocity(-(pointMass.velocity - (pointMass.velocity * velDamping)) * (elapsed * 200), toPointMassAt: i)
     |             `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 545 |         }
 546 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Body.swift:638:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 636 |                     // this line crosses the test line at some point... does it
 637 |                     // do so within our test range?
 638 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 639 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 640 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Body.swift:665:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 663 |                     // this line crosses the test line at some point... does it
 664 |                     // do so within our test range?
 665 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 666 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 667 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Body.swift:748:20: error: cannot find type 'JFloat' in scope
 746 |         var hitPt: Vector2 = .zero
 747 |         var normal: Vector2 = .zero
 748 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 749 |
 750 |         var dist: JFloat = 0
/host/spi-builder-workspace/Sources/Body.swift:750:19: error: cannot find type 'JFloat' in scope
 748 |         var edgeD: JFloat = 0
 749 |
 750 |         var dist: JFloat = 0
     |                   `- error: cannot find type 'JFloat' in scope
 751 |
 752 |         let edge = edges[edgeNum]
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Body.swift:840:20: error: cannot find type 'JFloat' in scope
 838 |         var pointA = -1
 839 |         var pointB = -1
 840 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 841 |         var normal: Vector2 = .zero
 842 |         var hitPt: Vector2 = .zero
/host/spi-builder-workspace/Sources/Body.swift:844:24: error: cannot find 'JFloat' in scope
 842 |         var hitPt: Vector2 = .zero
 843 |
 844 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 845 |
 846 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Body.swift:900:24: error: cannot find type 'JFloat' in scope
 898 |         var closestP2 = 0// closestP1
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
     |                        `- error: cannot find type 'JFloat' in scope
 901 |         var closestD = JFloat.infinity
 902 |
/host/spi-builder-workspace/Sources/Body.swift:901:24: error: cannot find 'JFloat' in scope
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
 901 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 902 |
 903 |         for edge in edges {
/host/spi-builder-workspace/Sources/Body.swift:939:26: error: cannot find 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
 939 |         var closestSQD = JFloat.greatestFiniteMagnitude
     |                          `- error: cannot find 'JFloat' in scope
 940 |         var closest: Int!
 941 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
[36/36] Compiling JelloSwift BodyEdge.swift
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:269:45: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func -(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
270 |         return Vector2(x: lhs.x - rhs, y: lhs.y - rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:259:46: error: cannot find type 'JFloat' in scope
257 |
258 |     @inlinable
259 |     static public func - (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
260 |         return Vector3(x: lhs.x - rhs, y: lhs.y - rhs, z: lhs.z - rhs)
261 |     }
/host/spi-builder-workspace/Sources/Geometry/Matrix3x3.swift:5:31: error: cannot find type 'JFloat' in scope
  3 | /// Plain 3-row 3-column Matrix with real components.
  4 | public struct Matrix3x3: CustomStringConvertible {
  5 |     public typealias Scalar = JFloat
    |                               `- error: cannot find type 'JFloat' in scope
  6 |
  7 |     /// Returns a 3x3 [identity matrix].
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:28:19: error: cannot find type 'JFloat' in scope
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:31:19: error: cannot find type 'JFloat' in scope
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                   `- error: cannot find type 'JFloat' in scope
 32 |
 33 |     /// Returns the angle in radians of this Vector2
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:12:15: error: type 'Vector2' does not conform to protocol 'Decodable'
 10 |
 11 | /// Represents a 2D vector
 12 | public struct Vector2: VectorRepresentable, Equatable, CustomStringConvertible, Codable {
    |               `- error: type 'Vector2' does not conform to protocol 'Decodable'
 13 |
 14 |     /// A zeroed-value Vector2
    :
 26 |
 27 |     /// The JFloat representation of this vector's x axis
 28 |     public var x: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 29 |
 30 |     /// The JFloat representation of this vector's y axis
 31 |     public var y: JFloat
    |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
 32 |
 33 |     /// Returns the angle in radians of this Vector2
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:93:24: error: cannot find type 'JFloat' in scope
 91 |     /// Inits a vector 2 with X and Y defined as a given float
 92 |     @inlinable
 93 |     public init(value: JFloat) {
    |                        `- error: cannot find type 'JFloat' in scope
 94 |         x = value
 95 |         y = value
/host/spi-builder-workspace/Sources/Body.swift:50:28: error: cannot find type 'JFloat' in scope
  48 |     /// 1 never decelerates. Values outside the range [0, 1] inclusive may
  49 |     /// introduce instability
  50 |     public var velDamping: JFloat = 0.999
     |                            `- error: cannot find type 'JFloat' in scope
  51 |
  52 |     /// The array of body components for this body object
/host/spi-builder-workspace/Sources/Body.swift:63:47: error: cannot find type 'JFloat' in scope
  61 |
  62 |     /// The derived rotation of the body, in radians
  63 |     public fileprivate(set) var derivedAngle: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
/host/spi-builder-workspace/Sources/Body.swift:66:47: error: cannot find type 'JFloat' in scope
  64 |
  65 |     /// Omega (ω) is the relative angular speed of the body, in radians/s
  66 |     public fileprivate(set) var derivedOmega: JFloat = 0
     |                                               `- error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
/host/spi-builder-workspace/Sources/Body.swift:69:32: error: cannot find type 'JFloat' in scope
  67 |
  68 |     // Utilize to calculate the omega for the body
  69 |     fileprivate var lastAngle: JFloat = 0
     |                                `- error: cannot find type 'JFloat' in scope
  70 |
  71 |     /// Gets a list of vertices that represents the current position of each
/host/spi-builder-workspace/Sources/Body.swift:143:23: error: cannot find type 'JFloat' in scope
 141 |         world: World? = nil,
 142 |         shape: ClosedShape,
 143 |         pointMasses: [JFloat] = [1],
     |                       `- error: cannot find type 'JFloat' in scope
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
/host/spi-builder-workspace/Sources/Body.swift:145:16: error: cannot find type 'JFloat' in scope
 143 |         pointMasses: [JFloat] = [1],
 144 |         position: Vector2 = Vector2.zero,
 145 |         angle: JFloat = 0,
     |                `- error: cannot find type 'JFloat' in scope
 146 |         scale: Vector2 = Vector2.unit,
 147 |         kinematic: Bool = false,
/host/spi-builder-workspace/Sources/Body.swift:305:39: error: cannot find type 'JFloat' in scope
 303 |     /// - parameter forceUpdate:
 304 |     ///     Whether to force the update of the body, even if it's a static body.
 305 |     public func updateAABB(_ elapsed: JFloat, forceUpdate: Bool) {
     |                                       `- error: cannot find type 'JFloat' in scope
 306 |         guard !isStatic || forceUpdate else {
 307 |             return
/host/spi-builder-workspace/Sources/Body.swift:361:36: error: cannot find type 'JFloat' in scope
 359 |
 360 |     /// Sets the mass for all the PointMass objects in this body.
 361 |     public func setMassAll(_ mass: JFloat) {
     |                                    `- error: cannot find type 'JFloat' in scope
 362 |         for i in 0..<pointMasses.count {
 363 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:370:63: error: cannot find type 'JFloat' in scope
 368 |
 369 |     /// Sets the mass for a single PointMass individually.
 370 |     public func setMassForPointMass(atIndex index: Int, mass: JFloat) {
     |                                                               `- error: cannot find type 'JFloat' in scope
 371 |         pointMasses[index].mass = mass
 372 |
/host/spi-builder-workspace/Sources/Body.swift:381:43: error: cannot find type 'JFloat' in scope
 379 |     /// sets up to the count of masses in the array, if larger, it sets the
 380 |     /// matching masses for all point masses, and ignores the rest of the array.
 381 |     public func setMass(fromList masses: [JFloat]) {
     |                                           `- error: cannot find type 'JFloat' in scope
 382 |         for (mass, i) in zip(masses, 0..<pointMasses.count) {
 383 |             pointMasses[i].mass = mass
/host/spi-builder-workspace/Sources/Body.swift:394:57: error: cannot find type 'JFloat' in scope
 392 |     /// Setting the position and angle resets the current shape to the original
 393 |     /// base shape of the object.
 394 |     public func setPositionAngle(_ pos: Vector2, angle: JFloat, scale: Vector2) {
     |                                                         `- error: cannot find type 'JFloat' in scope
 395 |         let matrix = Vector2.matrix(scalingBy: scale, rotatingBy: angle, translatingBy: pos)
 396 |
/host/spi-builder-workspace/Sources/Body.swift:424:51: error: cannot find type 'JFloat' in scope
 422 |     /// call this. Instead you can just access the `derivedPosition`, `DerivedAngle`,
 423 |     /// `derivedVelocity`, and `derivedOmega` properties.
 424 |     public func derivePositionAndAngle(_ elapsed: JFloat) {
     |                                                   `- error: cannot find type 'JFloat' in scope
 425 |         // No need if this is a static body, or kinematically controlled.
 426 |         if isStatic || isKinematic {
/host/spi-builder-workspace/Sources/Body.swift:522:38: error: cannot find type 'JFloat' in scope
 520 |     /// Integrates the point masses for this Body.
 521 |     /// Ignored, if body is static.
 522 |     public func integrate(_ elapsed: JFloat) {
     |                                      `- error: cannot find type 'JFloat' in scope
 523 |         if isStatic {
 524 |             return
/host/spi-builder-workspace/Sources/Body.swift:536:43: error: cannot find type 'JFloat' in scope
 534 |     /// Applies the velocity damping to the point masses.
 535 |     /// Ignored, if body is static.
 536 |     public func dampenVelocity(_ elapsed: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 537 |         if isStatic {
 538 |             return
/host/spi-builder-workspace/Sources/Body.swift:550:39: error: cannot find type 'JFloat' in scope
 548 |     /// Applies a rotational clockwise torque of a given force on this body.
 549 |     /// Ignored, if body is static.
 550 |     public func applyTorque(of force: JFloat) {
     |                                       `- error: cannot find type 'JFloat' in scope
 551 |         if isStatic {
 552 |             return
/host/spi-builder-workspace/Sources/Body.swift:569:43: error: cannot find type 'JFloat' in scope
 567 |     /// The method keeps the average velocity of the point masses the same during
 568 |     /// the procedure.
 569 |     public func setAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 570 |         if isStatic {
 571 |             return
/host/spi-builder-workspace/Sources/Body.swift:583:43: error: cannot find type 'JFloat' in scope
 581 |
 582 |     /// Accumulates the angular velocity for this body
 583 |     public func addAngularVelocity(_ vel: JFloat) {
     |                                           `- error: cannot find type 'JFloat' in scope
 584 |         if isStatic {
 585 |             return
/host/spi-builder-workspace/Sources/Body.swift:743:54: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:743:72: error: cannot find type 'JFloat' in scope
 741 |         to pt: Vector2,
 742 |         onEdge edgeNum: Int
 743 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 744 |         assert(pointMasses.count > 0)
 745 |
/host/spi-builder-workspace/Sources/Body.swift:810:54: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                      `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:810:72: error: cannot find type 'JFloat' in scope
 808 |         to pt: Vector2,
 809 |         onEdge edgeNum: Int
 810 |     ) -> (hitPoint: Vector2, normal: Vector2, edgeD: JFloat, distance: JFloat) {
     |                                                                        `- error: cannot find type 'JFloat' in scope
 811 |         let result = closestPointSquared(to: pt, onEdge: edgeNum)
 812 |
/host/spi-builder-workspace/Sources/Body.swift:835:80: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:835:98: error: cannot find type 'JFloat' in scope
 833 |     public func closestPoint(
 834 |         to pt: Vector2
 835 |     ) -> (hitPoint: Vector2, normal: Vector2, pointA: Int, pointB: Int, edgeD: JFloat, distance: JFloat) {
     |                                                                                                  `- error: cannot find type 'JFloat' in scope
 836 |         assert(pointMasses.count > 0)
 837 |
/host/spi-builder-workspace/Sources/Body.swift:891:45: error: cannot find type 'JFloat' in scope
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
     |                                             `- error: cannot find type 'JFloat' in scope
 892 |         if edges.count == 0 || pointMasses.count == 0 {
 893 |             return nil
/host/spi-builder-workspace/Sources/Body.swift:890:34: error: cannot find type 'JFloat' in scope
 888 |     public func closestEdge(
 889 |         to pt: Vector2,
 890 |         withTolerance tolerance: JFloat = JFloat.infinity
     |                                  `- error: cannot find type 'JFloat' in scope
 891 |     ) -> (edgePosition: Vector2, edgeRatio: JFloat, edgePoint1: Int, edgePoint2: Int)? {
 892 |         if edges.count == 0 || pointMasses.count == 0 {
/host/spi-builder-workspace/Sources/Body.swift:936:77: error: cannot find type 'JFloat' in scope
 934 |     /// Find the closest PointMass index in this body, given a global point
 935 |     /// - precondition: There is at least one point mass in this body
 936 |     public func closestPointMass(to pos: Vector2) -> (point: Int, distance: JFloat) {
     |                                                                             `- error: cannot find type 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:36:24: error: cannot find type 'JFloat' in scope
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                        `- error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
/host/spi-builder-workspace/Sources/BodyEdge.swift:39:31: error: cannot find type 'JFloat' in scope
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                               `- error: cannot find type 'JFloat' in scope
40 |
41 |     public init() {
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Decodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Decodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
40 |
41 |     public init() {
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:284:45: error: cannot find type 'JFloat' in scope
282 |
283 |     @inlinable
284 |     static public func %(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
285 |         return Vector2(x: lhs.x.truncatingRemainder(dividingBy: rhs),
286 |                        y: lhs.y.truncatingRemainder(dividingBy: rhs))
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:274:46: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func % (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
275 |         return Vector3(
276 |             x: lhs.x.truncatingRemainder(dividingBy: rhs),
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:264:45: error: cannot find type 'JFloat' in scope
262 |     // JFloat interaction
263 |     @inlinable
264 |     static public func +(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
265 |         return Vector2(x: lhs.x + rhs, y: lhs.y + rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:254:46: error: cannot find type 'JFloat' in scope
252 |     // JFloat interaction
253 |     @inlinable
254 |     static public func + (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
255 |         return Vector3(x: lhs.x + rhs, y: lhs.y + rhs, z: lhs.z + rhs)
256 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:274:45: error: cannot find type 'JFloat' in scope
272 |
273 |     @inlinable
274 |     static public func *(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
275 |         return Vector2(x: lhs.x * rhs, y: lhs.y * rhs)
276 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:264:46: error: cannot find type 'JFloat' in scope
262 |
263 |     @inlinable
264 |     static public func * (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
265 |         return Vector3(x: lhs.x * rhs, y: lhs.y * rhs, z: lhs.z * rhs)
266 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:349:27: error: cannot find type 'JFloat' in scope
347 |     static public func matrix(
348 |         scalingBy scale: Vector2 = Vector2.unit,
349 |         rotatingBy angle: JFloat = 0,
    |                           `- error: cannot find type 'JFloat' in scope
350 |         translatingBy translate: Vector2 = Vector2.zero
351 |     ) -> Matrix3x3 {
/host/spi-builder-workspace/Sources/Geometry/ClosedShape.swift:150:25: error: cannot find type 'JFloat' in scope
148 |         _ target: inout [Vector2],
149 |         worldPos: Vector2,
150 |         angleInRadians: JFloat,
    |                         `- error: cannot find type 'JFloat' in scope
151 |         localScale: Vector2 = Vector2.unit
152 |     ) {
/host/spi-builder-workspace/Sources/PointMass.swift:16:22: error: cannot find type 'JFloat' in scope
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                      `- error: cannot find type 'JFloat' in scope
17 |
18 |     /// The global position of the point, in world coordinates
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:10:15: error: type 'PointMass' does not conform to protocol 'Decodable'
 8 |
 9 | /// Specifies a point mass that composes a body
10 | public struct PointMass: Codable, VectorRepresentable {
   |               `- error: type 'PointMass' does not conform to protocol 'Decodable'
11 |     /// The mass of this point mass.
12 |     /// Leave this value always `> 0` to maintain consistency on the simulation,
   :
14 |     /// Values `< 0.2` usually cause inconsistency and instability in the
15 |     /// simulation
16 |     public var mass: JFloat = 1
   |                `- note: cannot automatically synthesize 'Decodable' because 'JFloat' does not conform to 'Decodable'
17 |
18 |     /// The global position of the point, in world coordinates
Swift.Decodable.init:2:1: note: protocol requires initializer 'init(from:)' with type 'Decodable'
1 | protocol Decodable {
2 | init(from decoder: any Decoder) throws}
  | `- note: protocol requires initializer 'init(from:)' with type 'Decodable'
3 |
/host/spi-builder-workspace/Sources/PointMass.swift:35:23: error: cannot find type 'JFloat' in scope
33 |     }
34 |
35 |     public init(mass: JFloat = 0, position: Vector2 = Vector2.zero) {
   |                       `- error: cannot find type 'JFloat' in scope
36 |         self.mass = mass
37 |         self.position = position
/host/spi-builder-workspace/Sources/Body.swift:445:20: error: cannot find type 'JFloat' in scope
 443 |
 444 |         // find the average angle of all of the masses.
 445 |         var angle: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
/host/spi-builder-workspace/Sources/Body.swift:448:28: error: cannot find type 'JFloat' in scope
 446 |
 447 |         var originalSign = 1
 448 |         var originalAngle: JFloat = 0
     |                            `- error: cannot find type 'JFloat' in scope
 449 |
 450 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:221:59: error: cannot find type 'JFloat' in scope
219 |     /// See `Vector2.dot`
220 |     @inlinable
221 |     static public func •(lhs: Vector2, rhs: Vector2) -> JFloat {
    |                                                         `- error: cannot find type 'JFloat' in scope
222 |         return lhs.dot(rhs)
223 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:208:60: error: cannot find type 'JFloat' in scope
206 |     /// See `Vector3.dot`
207 |     @inlinable
208 |     static public func • (lhs: Vector3, rhs: Vector3) -> JFloat {
    |                                                          `- error: cannot find type 'JFloat' in scope
209 |         return lhs.dot(rhs)
210 |     }
/host/spi-builder-workspace/Sources/Body.swift:467:33: error: reference to member 'pi' cannot be resolved without a contextual type
 465 |                 let thisSign = (thisAngle >= 0.0) ? 1 : -1
 466 |
 467 |                 if abs(diff) > .pi && (thisSign != originalSign) {
     |                                 `- error: reference to member 'pi' cannot be resolved without a contextual type
 468 |                     if thisSign == -1 {
 469 |                         thisAngle = .pi + (.pi + thisAngle)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:316:52: error: cannot find type 'JFloat' in scope
314 |     // JFloat interaction
315 |     @inlinable
316 |     static public func +=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
317 |         lhs = lhs + rhs
318 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:309:53: error: cannot find type 'JFloat' in scope
307 |     // JFloat interaction
308 |     @inlinable
309 |     static public func += (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
310 |         lhs = lhs + rhs
311 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:328:52: error: cannot find type 'JFloat' in scope
326 |     }
327 |     @inlinable
328 |     static public func /=(lhs: inout Vector2, rhs: JFloat) {
    |                                                    `- error: cannot find type 'JFloat' in scope
329 |         lhs = lhs / rhs
330 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:321:53: error: cannot find type 'JFloat' in scope
319 |     }
320 |     @inlinable
321 |     static public func /= (lhs: inout Vector3, rhs: JFloat) {
    |                                                     `- error: cannot find type 'JFloat' in scope
322 |         lhs = lhs / rhs
323 |     }
/host/spi-builder-workspace/Sources/Body.swift:479:18: error: cannot find 'JFloat' in scope
 477 |         }
 478 |
 479 |         angle /= JFloat(c)
     |                  `- error: cannot find 'JFloat' in scope
 480 |
 481 |         derivedAngle = angle
/host/spi-builder-workspace/Sources/Body.swift:486:59: error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                           `- error: binary operator '>=' cannot be applied to operands of type 'Matrix3x3' and '_'
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Body.swift:486:63: error: reference to member 'pi' cannot be resolved without a contextual type
 484 |         var angleChange = (derivedAngle - lastAngle)
 485 |
 486 |         if (angleChange < 0 ? -angleChange : angleChange) >= .pi {
     |                                                               `- error: reference to member 'pi' cannot be resolved without a contextual type
 487 |             if angleChange < 0 {
 488 |                 angleChange = angleChange + (.pi * 2)
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:279:45: error: cannot find type 'JFloat' in scope
277 |
278 |     @inlinable
279 |     static public func /(lhs: Vector2, rhs: JFloat) -> Vector2 {
    |                                             `- error: cannot find type 'JFloat' in scope
280 |         return Vector2(x: lhs.x / rhs, y: lhs.y / rhs)
281 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:290:31: error: cannot find type 'JFloat' in scope
288 |
289 |     @inlinable
290 |     static public func /(lhs: JFloat, rhs: Vector2) -> Vector2 {
    |                               `- error: cannot find type 'JFloat' in scope
291 |         return Vector2(x: lhs / rhs.x, y: lhs / rhs.y)
292 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:269:46: error: cannot find type 'JFloat' in scope
267 |
268 |     @inlinable
269 |     static public func / (lhs: Vector3, rhs: JFloat) -> Vector3 {
    |                                              `- error: cannot find type 'JFloat' in scope
270 |         return Vector3(x: lhs.x / rhs, y: lhs.y / rhs, z: lhs.z / rhs)
271 |     }
/host/spi-builder-workspace/Sources/Geometry/Vector3.swift:283:32: error: cannot find type 'JFloat' in scope
281 |
282 |     @inlinable
283 |     static public func / (lhs: JFloat, rhs: Vector3) -> Vector3 {
    |                                `- error: cannot find type 'JFloat' in scope
284 |         return Vector3(x: lhs / rhs.x, y: lhs / rhs.y, z: lhs / rhs.z)
285 |     }
/host/spi-builder-workspace/Sources/PointMass.swift:45:47: error: cannot find type 'JFloat' in scope
43 |     /// seconds
44 |     @inlinable
45 |     public mutating func integrate(_ elapsed: JFloat) {
   |                                               `- error: cannot find type 'JFloat' in scope
46 |         if mass.isFinite {
47 |             let elapsedMass = elapsed / mass
/host/spi-builder-workspace/Sources/Body.swift:544:13: error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 542 |             let pointMass = pointMasses[i]
 543 |
 544 |             applyVelocity(-(pointMass.velocity - (pointMass.velocity * velDamping)) * (elapsed * 200), toPointMassAt: i)
     |             `- error: the compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions
 545 |         }
 546 |     }
/host/spi-builder-workspace/Sources/Geometry/AABB.swift:53:22: error: cannot find type 'JFloat' in scope
 51 |     /// Gets the middle X position of this AABB
 52 |     @inlinable
 53 |     public var midX: JFloat {
    |                      `- error: cannot find type 'JFloat' in scope
 54 |         return (minimum.x + maximum.x) / 2
 55 |     }
/host/spi-builder-workspace/Sources/Body.swift:638:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 636 |                     // this line crosses the test line at some point... does it
 637 |                     // do so within our test range?
 638 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 639 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 640 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Body.swift:665:56: error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 663 |                     // this line crosses the test line at some point... does it
 664 |                     // do so within our test range?
 665 |                     let slope = (edgeEnd.x - edgeSt.x) / (edgeEnd.y - edgeSt.y)
     |                                                        `- error: referencing operator function '/' on 'DurationProtocol' requires that 'Matrix3x3' conform to 'DurationProtocol'
 666 |                     let hitX = edgeSt.x + ((pt.y - edgeSt.y) * slope)
 667 |
Swift.DurationProtocol:2:17: note: where 'Self' = 'Matrix3x3'
1 | @available(macOS 13.0, iOS 16.0, watchOS 9.0, tvOS 16.0, *)
2 | public protocol DurationProtocol : AdditiveArithmetic, Comparable, Sendable {
  |                 `- note: where 'Self' = 'Matrix3x3'
3 |     static func / (lhs: Self, rhs: Int) -> Self
4 |     static func /= (lhs: inout Self, rhs: Int)
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:27: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                           `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Geometry/GeomUtils.swift:35:39: error: cannot find type 'JFloat' in scope
33 |     lineA: (start: Vector2, end: Vector2),
34 |     lineB: (start: Vector2, end: Vector2)
35 | ) -> (hitPt: Vector2, Ua: JFloat, Ub: JFloat)? {
   |                                       `- error: cannot find type 'JFloat' in scope
36 |     let denom = ((lineB.end.y - lineB.start.y) * (lineA.end.x - lineA.start.x)) - ((lineB.end.x - lineB.start.x) * (lineA.end.y - lineA.start.y))
37 |
/host/spi-builder-workspace/Sources/Body.swift:748:20: error: cannot find type 'JFloat' in scope
 746 |         var hitPt: Vector2 = .zero
 747 |         var normal: Vector2 = .zero
 748 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 749 |
 750 |         var dist: JFloat = 0
/host/spi-builder-workspace/Sources/Body.swift:750:19: error: cannot find type 'JFloat' in scope
 748 |         var edgeD: JFloat = 0
 749 |
 750 |         var dist: JFloat = 0
     |                   `- error: cannot find type 'JFloat' in scope
 751 |
 752 |         let edge = edges[edgeNum]
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:108:53: error: cannot find type 'JFloat' in scope
106 |     /// Returns the distance squared between this Vector2 and another Vector2
107 |     @inlinable
108 |     public func distanceSquared(to vec: Vector2) -> JFloat {
    |                                                     `- error: cannot find type 'JFloat' in scope
109 |         let d = self - vec
110 |
/host/spi-builder-workspace/Sources/Body.swift:840:20: error: cannot find type 'JFloat' in scope
 838 |         var pointA = -1
 839 |         var pointB = -1
 840 |         var edgeD: JFloat = 0
     |                    `- error: cannot find type 'JFloat' in scope
 841 |         var normal: Vector2 = .zero
 842 |         var hitPt: Vector2 = .zero
/host/spi-builder-workspace/Sources/Body.swift:844:24: error: cannot find 'JFloat' in scope
 842 |         var hitPt: Vector2 = .zero
 843 |
 844 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 845 |
 846 |         let c = pointMasses.count
/host/spi-builder-workspace/Sources/Body.swift:900:24: error: cannot find type 'JFloat' in scope
 898 |         var closestP2 = 0// closestP1
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
     |                        `- error: cannot find type 'JFloat' in scope
 901 |         var closestD = JFloat.infinity
 902 |
/host/spi-builder-workspace/Sources/Body.swift:901:24: error: cannot find 'JFloat' in scope
 899 |         var edgePosition = Vector2.zero
 900 |         var edgeRatio: JFloat = 0
 901 |         var closestD = JFloat.infinity
     |                        `- error: cannot find 'JFloat' in scope
 902 |
 903 |         for edge in edges {
/host/spi-builder-workspace/Sources/Body.swift:939:26: error: cannot find 'JFloat' in scope
 937 |         assert(pointMasses.count > 0)
 938 |
 939 |         var closestSQD = JFloat.greatestFiniteMagnitude
     |                          `- error: cannot find 'JFloat' in scope
 940 |         var closest: Int!
 941 |
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:29:23: error: cannot find type 'JFloat' in scope
27 |     /// A value from 0 - 1 specifying at which point in the edge
28 |     /// bodyBpmA - bodyBpmB is the penetration occurring.
29 |     public var edgeD: JFloat = 0
   |                       `- error: cannot find type 'JFloat' in scope
30 |     /// Global normal for the collision. Always the penetrated edge's normal.
31 |     public var normal = Vector2.zero
/host/spi-builder-workspace/Sources/BodyCollisionInformation.swift:34:29: error: cannot find type 'JFloat' in scope
32 |     /// Penetration distance.
33 |     /// Is the distance required to move bodyApm in order to solve the collision
34 |     public var penetration: JFloat = 0
   |                             `- error: cannot find type 'JFloat' in scope
35 |
36 |     /// Inits this collision information with no edge information.
/host/spi-builder-workspace/Sources/BodyEdge.swift:10:15: error: type 'BodyEdge' does not conform to protocol 'Encodable'
 8 |
 9 | /// Contains information about the edge of a body
10 | public struct BodyEdge: Codable {
   |               `- error: type 'BodyEdge' does not conform to protocol 'Encodable'
11 |
12 |     /// The index of the edge on the body
   :
34 |
35 |     /// The edge's length
36 |     public var length: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
37 |
38 |     /// The edge's length, squared
39 |     public var lengthSquared: JFloat = 0
   |                `- note: cannot automatically synthesize 'Encodable' because 'JFloat' does not conform to 'Encodable'
40 |
41 |     public init() {
Swift.Encodable.encode:2:6: note: protocol requires function 'encode(to:)' with type 'Encodable'
1 | protocol Encodable {
2 | func encode(to encoder: any Encoder) throws}
  |      `- note: protocol requires function 'encode(to:)' with type 'Encodable'
3 |
/host/spi-builder-workspace/Sources/Geometry/Vector2.swift:100:46: error: cannot find type 'JFloat' in scope
 98 |     /// Returns the distance between this Vector2 and another Vector2
 99 |     @inlinable
100 |     public func distance(to vec: Vector2) -> JFloat {
    |                                              `- error: cannot find type 'JFloat' in scope
101 |         let d = self - vec
102 |
BUILD FAILURE 6.1 wasm