@adobe/data 0.7.0 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/ecs/archetype/archetype.d.ts +3 -3
  2. package/dist/ecs/archetype/create-archetype.d.ts +4 -4
  3. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  4. package/dist/ecs/archetype/create-archetype.test.js +6 -6
  5. package/dist/ecs/archetype/create-archetype.test.js.map +1 -1
  6. package/dist/ecs/archetype/delete-row.d.ts +2 -2
  7. package/dist/ecs/archetype/delete-row.js.map +1 -1
  8. package/dist/ecs/archetype/delete-row.test.js +4 -4
  9. package/dist/ecs/archetype/delete-row.test.js.map +1 -1
  10. package/dist/ecs/core-components.d.ts +3 -3
  11. package/dist/ecs/database/database.d.ts +4 -4
  12. package/dist/ecs/database/index.d.ts +1 -0
  13. package/dist/ecs/database/index.js +1 -0
  14. package/dist/ecs/database/index.js.map +1 -1
  15. package/dist/ecs/database/observe-select-entities.d.ts +2 -2
  16. package/dist/ecs/database/observe-select-entities.js.map +1 -1
  17. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  18. package/dist/ecs/database/observed/observed-database.d.ts +3 -3
  19. package/dist/ecs/database/replicate.d.ts +9 -0
  20. package/dist/ecs/database/replicate.js +66 -0
  21. package/dist/ecs/database/replicate.js.map +1 -0
  22. package/dist/ecs/database/replicate.test.js +235 -0
  23. package/dist/ecs/database/replicate.test.js.map +1 -0
  24. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +20 -0
  25. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  26. package/dist/ecs/database/transactional-store/patch-entity-values.js +4 -1
  27. package/dist/ecs/database/transactional-store/patch-entity-values.js.map +1 -1
  28. package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +1 -1
  29. package/dist/ecs/entity-location-table/create-entity-location-table.js +14 -1
  30. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  31. package/dist/ecs/entity-location-table/create-entity-location-table.test.js +14 -0
  32. package/dist/ecs/entity-location-table/create-entity-location-table.test.js.map +1 -1
  33. package/dist/ecs/entity.d.ts +9 -7
  34. package/dist/ecs/entity.js +5 -2
  35. package/dist/ecs/entity.js.map +1 -1
  36. package/dist/ecs/index.d.ts +1 -1
  37. package/dist/ecs/index.js +1 -1
  38. package/dist/ecs/index.js.map +1 -1
  39. package/dist/ecs/optional-components.d.ts +3 -0
  40. package/dist/ecs/optional-components.js +2 -0
  41. package/dist/ecs/optional-components.js.map +1 -0
  42. package/dist/ecs/required-components.d.ts +4 -0
  43. package/dist/ecs/required-components.js +2 -0
  44. package/dist/ecs/required-components.js.map +1 -0
  45. package/dist/ecs/store/core/core.d.ts +15 -15
  46. package/dist/ecs/store/core/create-core.d.ts +2 -1
  47. package/dist/ecs/store/core/create-core.js +34 -14
  48. package/dist/ecs/store/core/create-core.js.map +1 -1
  49. package/dist/ecs/store/core/create-core.test.d.ts +1 -1
  50. package/dist/ecs/store/core/create-core.test.js +30 -2
  51. package/dist/ecs/store/core/create-core.test.js.map +1 -1
  52. package/dist/ecs/store/core/select-entities.d.ts +2 -2
  53. package/dist/ecs/store/core/select-entities.js.map +1 -1
  54. package/dist/ecs/store/create-store.d.ts +2 -1
  55. package/dist/ecs/store/create-store.js +3 -1
  56. package/dist/ecs/store/create-store.js.map +1 -1
  57. package/dist/ecs/store/store.d.ts +6 -6
  58. package/dist/samples/todo/services/state-service/create-todo-database.d.ts +2 -2
  59. package/dist/samples/todo/services/state-service/create-todo-store.d.ts +2 -2
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +4 -3
  62. package/dist/blob/download-handle.d.ts +0 -4
  63. package/dist/blob/download-handle.js +0 -2
  64. package/dist/blob/download-handle.js.map +0 -1
  65. package/dist/blob/upload-handle.d.ts +0 -4
  66. package/dist/blob/upload-handle.js +0 -2
  67. package/dist/blob/upload-handle.js.map +0 -1
  68. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js +0 -106
  69. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js.map +0 -1
  70. package/dist/ecs/entity/entity.d.ts +0 -8
  71. package/dist/ecs/entity/entity.js +0 -3
  72. package/dist/ecs/entity/entity.js.map +0 -1
  73. package/dist/ecs/entity/u32.d.ts +0 -8
  74. package/dist/ecs/entity/u32.js +0 -24
  75. package/dist/ecs/entity/u32.js.map +0 -1
  76. package/dist/ecs/store/store-schema/create-store-schema-test.d.ts +0 -1
  77. package/dist/ecs/store/store-schema/create-store-schema-test.js +0 -33
  78. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +0 -1
  79. package/dist/ecs/store/store-schema/create-store-schema.d.ts +0 -1
  80. package/dist/ecs/store/store-schema/create-store-schema.js +0 -45
  81. package/dist/ecs/store/store-schema/create-store-schema.js.map +0 -1
  82. package/dist/ecs/store/store-schema/index.d.ts +0 -1
  83. package/dist/ecs/store/store-schema/index.js +0 -21
  84. package/dist/ecs/store/store-schema/index.js.map +0 -1
  85. package/dist/ecs/store/store-schema/store-schema.d.ts +0 -1
  86. package/dist/ecs/store/store-schema/store-schema.js +0 -57
  87. package/dist/ecs/store/store-schema/store-schema.js.map +0 -1
  88. package/dist/ecs/world/create-world.d.ts +0 -7
  89. package/dist/ecs/world/create-world.js +0 -113
  90. package/dist/ecs/world/create-world.js.map +0 -1
  91. package/dist/ecs/world/create-world.test.d.ts +0 -1
  92. package/dist/ecs/world/create-world.test.js +0 -499
  93. package/dist/ecs/world/create-world.test.js.map +0 -1
  94. package/dist/ecs/world/index.d.ts +0 -5
  95. package/dist/ecs/world/index.js +0 -27
  96. package/dist/ecs/world/index.js.map +0 -1
  97. package/dist/ecs/world/system-phase.d.ts +0 -5
  98. package/dist/ecs/world/system-phase.js +0 -14
  99. package/dist/ecs/world/system-phase.js.map +0 -1
  100. package/dist/ecs/world/system.d.ts +0 -25
  101. package/dist/ecs/world/system.js +0 -2
  102. package/dist/ecs/world/system.js.map +0 -1
  103. package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +0 -1
  104. package/dist/ecs/world/world-schema/create-world-schema-test.js +0 -55
  105. package/dist/ecs/world/world-schema/create-world-schema-test.js.map +0 -1
  106. package/dist/ecs/world/world-schema/create-world-schema.d.ts +0 -19
  107. package/dist/ecs/world/world-schema/create-world-schema.js +0 -33
  108. package/dist/ecs/world/world-schema/create-world-schema.js.map +0 -1
  109. package/dist/ecs/world/world-schema/index.d.ts +0 -2
  110. package/dist/ecs/world/world-schema/index.js +0 -24
  111. package/dist/ecs/world/world-schema/index.js.map +0 -1
  112. package/dist/ecs/world/world-schema/world-schema.d.ts +0 -18
  113. package/dist/ecs/world/world-schema/world-schema.js +0 -23
  114. package/dist/ecs/world/world-schema/world-schema.js.map +0 -1
  115. package/dist/ecs/world/world.d.ts +0 -11
  116. package/dist/ecs/world/world.js +0 -2
  117. package/dist/ecs/world/world.js.map +0 -1
  118. package/dist/graphics/camera/camera.d.ts +0 -62
  119. package/dist/graphics/camera/camera.js +0 -17
  120. package/dist/graphics/camera/camera.js.map +0 -1
  121. package/dist/graphics/camera/index.d.ts +0 -4
  122. package/dist/graphics/camera/index.js +0 -5
  123. package/dist/graphics/camera/index.js.map +0 -1
  124. package/dist/graphics/camera/screen-to-world-ray.d.ts +0 -12
  125. package/dist/graphics/camera/screen-to-world-ray.js +0 -49
  126. package/dist/graphics/camera/screen-to-world-ray.js.map +0 -1
  127. package/dist/graphics/camera/screen-to-world-ray.test.d.ts +0 -1
  128. package/dist/graphics/camera/screen-to-world-ray.test.js +0 -171
  129. package/dist/graphics/camera/screen-to-world-ray.test.js.map +0 -1
  130. package/dist/graphics/camera/to-view-projection.d.ts +0 -3
  131. package/dist/graphics/camera/to-view-projection.js +0 -8
  132. package/dist/graphics/camera/to-view-projection.js.map +0 -1
  133. package/dist/graphics/camera/world-to-screen.d.ts +0 -12
  134. package/dist/graphics/camera/world-to-screen.js +0 -38
  135. package/dist/graphics/camera/world-to-screen.js.map +0 -1
  136. package/dist/graphics/camera/world-to-screen.test.d.ts +0 -1
  137. package/dist/graphics/camera/world-to-screen.test.js +0 -124
  138. package/dist/graphics/camera/world-to-screen.test.js.map +0 -1
  139. package/dist/graphics/create-struct-gpu-buffer.d.ts +0 -7
  140. package/dist/graphics/create-struct-gpu-buffer.js +0 -17
  141. package/dist/graphics/create-struct-gpu-buffer.js.map +0 -1
  142. package/dist/graphics/extract-wgsl-bindings.d.ts +0 -5
  143. package/dist/graphics/extract-wgsl-bindings.js +0 -10
  144. package/dist/graphics/extract-wgsl-bindings.js.map +0 -1
  145. package/dist/graphics/frame.d.ts +0 -1
  146. package/dist/graphics/frame.js +0 -15
  147. package/dist/graphics/frame.js.map +0 -1
  148. package/dist/graphics/get-web-gpu-device-and-context.d.ts +0 -1
  149. package/dist/graphics/get-web-gpu-device-and-context.js +0 -24
  150. package/dist/graphics/get-web-gpu-device-and-context.js.map +0 -1
  151. package/dist/graphics/graphics-context.d.ts +0 -1
  152. package/dist/graphics/graphics-context.js +0 -7
  153. package/dist/graphics/graphics-context.js.map +0 -1
  154. package/dist/graphics/index.d.ts +0 -5
  155. package/dist/graphics/index.js +0 -5
  156. package/dist/graphics/index.js.map +0 -1
  157. package/dist/graphics/to-gpu-buffer.d.ts +0 -2
  158. package/dist/graphics/to-gpu-buffer.js +0 -14
  159. package/dist/graphics/to-gpu-buffer.js.map +0 -1
  160. package/dist/internal/array-buffer-like/grow.d.ts +0 -1
  161. package/dist/internal/array-buffer-like/grow.js +0 -9
  162. package/dist/internal/array-buffer-like/grow.js.map +0 -1
  163. package/dist/math/aabb-face/face.d.ts +0 -51
  164. package/dist/math/aabb-face/face.js +0 -110
  165. package/dist/math/aabb-face/face.js.map +0 -1
  166. package/dist/math/aabb-face/face.test.d.ts +0 -1
  167. package/dist/math/aabb-face/face.test.js +0 -94
  168. package/dist/math/aabb-face/face.test.js.map +0 -1
  169. package/dist/math/box/box.d.ts +0 -50
  170. package/dist/math/box/box.js +0 -23
  171. package/dist/math/box/box.js.map +0 -1
  172. package/dist/math/face/face.d.ts +0 -51
  173. package/dist/math/face/face.js +0 -110
  174. package/dist/math/face/face.js.map +0 -1
  175. package/dist/math/face/face.test.d.ts +0 -1
  176. package/dist/math/face/face.test.js +0 -94
  177. package/dist/math/face/face.test.js.map +0 -1
  178. package/dist/math/picking/face.d.ts +0 -1
  179. package/dist/math/picking/face.js +0 -2
  180. package/dist/math/picking/face.js.map +0 -1
  181. package/dist/math/picking/get-closest-entity-to-line.d.ts +0 -4
  182. package/dist/math/picking/get-closest-entity-to-line.js +0 -30
  183. package/dist/math/picking/get-closest-entity-to-line.js.map +0 -1
  184. package/dist/math/picking/get-closest-entity-to-point.d.ts +0 -4
  185. package/dist/math/picking/get-closest-entity-to-point.js +0 -27
  186. package/dist/math/picking/get-closest-entity-to-point.js.map +0 -1
  187. package/dist/math/picking/get-intersecting-entities.d.ts +0 -12
  188. package/dist/math/picking/get-intersecting-entities.js +0 -15
  189. package/dist/math/picking/get-intersecting-entities.js.map +0 -1
  190. package/dist/math/picking/getClosestEntityToLine.d.ts +0 -4
  191. package/dist/math/picking/getClosestEntityToLine.js +0 -29
  192. package/dist/math/picking/getClosestEntityToLine.js.map +0 -1
  193. package/dist/math/picking/getClosestEntityToPoint.d.ts +0 -4
  194. package/dist/math/picking/getClosestEntityToPoint.js +0 -27
  195. package/dist/math/picking/getClosestEntityToPoint.js.map +0 -1
  196. package/dist/math/picking/getIntersectingEntities.d.ts +0 -12
  197. package/dist/math/picking/getIntersectingEntities.js +0 -15
  198. package/dist/math/picking/getIntersectingEntities.js.map +0 -1
  199. package/dist/math/picking/index.d.ts +0 -5
  200. package/dist/math/picking/index.js +0 -27
  201. package/dist/math/picking/index.js.map +0 -1
  202. package/dist/math/picking/pick-from-tables.d.ts +0 -19
  203. package/dist/math/picking/pick-from-tables.js +0 -63
  204. package/dist/math/picking/pick-from-tables.js.map +0 -1
  205. package/dist/math/picking/pick-result.d.ts +0 -12
  206. package/dist/math/picking/pick-result.js +0 -23
  207. package/dist/math/picking/pick-result.js.map +0 -1
  208. package/dist/math/transform/debug-inverse.d.ts +0 -1
  209. package/dist/math/transform/debug-inverse.js +0 -28
  210. package/dist/math/transform/debug-inverse.js.map +0 -1
  211. package/dist/math/transform/debug-quat.d.ts +0 -1
  212. package/dist/math/transform/debug-quat.js +0 -23
  213. package/dist/math/transform/debug-quat.js.map +0 -1
  214. package/dist/math/transform/debug-test.d.ts +0 -1
  215. package/dist/math/transform/debug-test.js +0 -34
  216. package/dist/math/transform/debug-test.js.map +0 -1
  217. package/dist/math/transform/transform.d.ts +0 -58
  218. package/dist/math/transform/transform.js +0 -101
  219. package/dist/math/transform/transform.js.map +0 -1
  220. package/dist/math/transform/transform.test.d.ts +0 -1
  221. package/dist/math/transform/transform.test.js +0 -309
  222. package/dist/math/transform/transform.test.js.map +0 -1
  223. package/dist/old-ecs/privacy/helper-functions.d.ts +0 -43
  224. package/dist/old-ecs/privacy/helper-functions.js +0 -76
  225. package/dist/old-ecs/privacy/helper-functions.js.map +0 -1
  226. package/dist/old-ecs/privacy/helper-functions.test.d.ts +0 -1
  227. package/dist/old-ecs/privacy/helper-functions.test.js +0 -173
  228. package/dist/old-ecs/privacy/helper-functions.test.js.map +0 -1
  229. /package/dist/ecs/database/{transactional-store/entity-id-preservation.test.d.ts → replicate.test.d.ts} +0 -0
@@ -1,38 +0,0 @@
1
- import { Mat4x4 } from "../../math/index.js";
2
- /**
3
- * Converts a world space coordinate to screen space coordinates and depth.
4
- *
5
- * @param worldPosition - The 3D world position to convert
6
- * @param camera - The camera resource containing position, target, FOV, etc.
7
- * @param canvasWidth - The width of the canvas in pixels
8
- * @param canvasHeight - The height of the canvas in pixels
9
- * @returns Screen space coordinates and depth [x, y, depth] where (0,0) is top-left and (width,height) is bottom-right, depth is 0-1 (near=0, far=1) or 2 for behind camera
10
- */
11
- export const worldToScreen = (worldPosition, camera, canvasWidth, canvasHeight) => {
12
- // Create the view-projection matrix (same as used in the shader)
13
- const perspective = Mat4x4.perspective(camera.fieldOfView, camera.aspect, camera.nearPlane, camera.farPlane);
14
- const lookAt = Mat4x4.lookAt(camera.position, camera.target, camera.up);
15
- const viewProjection = Mat4x4.multiply(perspective, lookAt);
16
- // Transform world position to clip space
17
- const clipSpace = Mat4x4.multiplyVec4(viewProjection, [...worldPosition, 1]);
18
- // Check if point is behind camera (W < 0)
19
- if (clipSpace[3] <= 0) {
20
- // Return invalid coordinates for points behind camera
21
- return [canvasWidth * 2, canvasHeight * 2, 2.0];
22
- }
23
- // Perform perspective divide to get normalized device coordinates (NDC)
24
- const ndcX = clipSpace[0] / clipSpace[3];
25
- const ndcY = clipSpace[1] / clipSpace[3];
26
- const ndcZ = clipSpace[2] / clipSpace[3];
27
- // Convert NDC to screen coordinates
28
- // NDC: (-1,-1) is bottom-left, (1,1) is top-right
29
- // Screen: (0,0) is top-left, (width,height) is bottom-right
30
- const screenX = (ndcX + 1) * 0.5 * canvasWidth;
31
- const screenY = (1 - ndcY) * 0.5 * canvasHeight; // Flip Y axis
32
- // Calculate normalized depth (0 to 1)
33
- // The perspective matrix uses reversed depth (near=1, far=0)
34
- // So we need to invert the depth calculation
35
- const depth = 1.0 - (ndcZ + 1) * 0.5;
36
- return [screenX, screenY, depth];
37
- };
38
- //# sourceMappingURL=world-to-screen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-to-screen.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,aAAmB,EACnB,MAAc,EACd,WAAmB,EACnB,YAAoB,EACI,EAAE;IAC1B,iEAAiE;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IACxE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE5D,yCAAyC;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7E,0CAA0C;IAC1C,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACpB,sDAAsD;QACtD,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,wEAAwE;IACxE,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAEzC,oCAAoC;IACpC,kDAAkD;IAClD,4DAA4D;IAC5D,MAAM,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,CAAC,cAAc;IAE/D,sCAAsC;IACtC,6DAA6D;IAC7D,6CAA6C;IAC7C,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAErC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,124 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { worldToScreen } from "./world-to-screen.js";
3
- // Helper function to create a standard camera for testing
4
- const createTestCamera = () => ({
5
- aspect: 16 / 9,
6
- fieldOfView: Math.PI / 4,
7
- nearPlane: 0.1,
8
- farPlane: 100.0,
9
- position: [0, 0, 10],
10
- target: [0, 0, 0],
11
- up: [0, 1, 0],
12
- });
13
- describe("worldToScreen", () => {
14
- const camera = createTestCamera();
15
- const canvasWidth = 1600;
16
- const canvasHeight = 900;
17
- it("should convert world position at origin to screen center", () => {
18
- const [screenX, screenY, depth] = worldToScreen([0, 0, 0], camera, canvasWidth, canvasHeight);
19
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
20
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
21
- expect(depth).toBeGreaterThanOrEqual(0);
22
- expect(depth).toBeLessThanOrEqual(1);
23
- });
24
- it("should convert positive X world position to right side of screen", () => {
25
- const [screenX, screenY, depth] = worldToScreen([5, 0, 0], camera, canvasWidth, canvasHeight);
26
- expect(screenX).toBeGreaterThan(canvasWidth / 2);
27
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
28
- expect(depth).toBeGreaterThanOrEqual(0);
29
- expect(depth).toBeLessThanOrEqual(1);
30
- });
31
- it("should convert negative X world position to left side of screen", () => {
32
- const [screenX, screenY, depth] = worldToScreen([-5, 0, 0], camera, canvasWidth, canvasHeight);
33
- expect(screenX).toBeLessThan(canvasWidth / 2);
34
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
35
- expect(depth).toBeGreaterThanOrEqual(0);
36
- expect(depth).toBeLessThanOrEqual(1);
37
- });
38
- it("should convert positive Y world position to top of screen", () => {
39
- const [screenX, screenY, depth] = worldToScreen([0, 5, 0], camera, canvasWidth, canvasHeight);
40
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
41
- expect(screenY).toBeLessThan(canvasHeight / 2);
42
- expect(depth).toBeGreaterThanOrEqual(0);
43
- expect(depth).toBeLessThanOrEqual(1);
44
- });
45
- it("should convert negative Y world position to bottom of screen", () => {
46
- const [screenX, screenY, depth] = worldToScreen([0, -5, 0], camera, canvasWidth, canvasHeight);
47
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
48
- expect(screenY).toBeGreaterThan(canvasHeight / 2);
49
- expect(depth).toBeGreaterThanOrEqual(0);
50
- expect(depth).toBeLessThanOrEqual(1);
51
- });
52
- it("should handle positions behind camera", () => {
53
- const [screenX, screenY, depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
54
- // Should be behind camera, so screen coordinates might be invalid and depth should be 2
55
- expect(screenX).toBeGreaterThan(canvasWidth);
56
- expect(screenY).toBeGreaterThan(canvasHeight);
57
- expect(depth).toBe(2);
58
- });
59
- it("should handle positions very close to camera", () => {
60
- const [screenX, screenY, depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
61
- expect(screenX).toBeCloseTo(canvasWidth / 2, 0);
62
- expect(screenY).toBeCloseTo(canvasHeight / 2, 0);
63
- expect(depth).toBeGreaterThanOrEqual(0);
64
- expect(depth).toBeLessThanOrEqual(1);
65
- });
66
- it("should handle different canvas aspect ratios", () => {
67
- const [squareX, squareY, squareDepth] = worldToScreen([0, 0, 0], camera, 1000, 1000);
68
- const [wideX, wideY, wideDepth] = worldToScreen([0, 0, 0], camera, 2000, 1000);
69
- expect(squareX).toBeCloseTo(500, 0);
70
- expect(squareY).toBeCloseTo(500, 0);
71
- expect(wideX).toBeCloseTo(1000, 0);
72
- expect(wideY).toBeCloseTo(500, 0);
73
- expect(squareDepth).toBeCloseTo(wideDepth, 2);
74
- });
75
- it("should return consistent depth values", () => {
76
- const [x1, y1, depth1] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
77
- const [x2, y2, depth2] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
78
- expect(depth1).toBeCloseTo(depth2, 6);
79
- });
80
- describe("depth calculation", () => {
81
- it("should return ~0.5 for position at near plane", () => {
82
- const [, , depth] = worldToScreen([0, 0, 0.1], camera, canvasWidth, canvasHeight);
83
- expect(depth).toBeCloseTo(0.5, 2);
84
- });
85
- it("should return 2 for position at far plane (behind camera)", () => {
86
- const [, , depth] = worldToScreen([0, 0, 100], camera, canvasWidth, canvasHeight);
87
- expect(depth).toBe(2);
88
- });
89
- it("should return ~0.5 for position at middle distance in front of camera", () => {
90
- const [, , depth] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
91
- expect(depth).toBeCloseTo(0.5, 2);
92
- });
93
- it("should return values between 0 and 1 for positions in range", () => {
94
- const [, , depth1] = worldToScreen([0, 0, 1], camera, canvasWidth, canvasHeight);
95
- const [, , depth2] = worldToScreen([0, 0, 2], camera, canvasWidth, canvasHeight);
96
- const [, , depth3] = worldToScreen([0, 0, 5], camera, canvasWidth, canvasHeight);
97
- expect(depth1).toBeGreaterThanOrEqual(0);
98
- expect(depth1).toBeLessThanOrEqual(1);
99
- expect(depth2).toBeGreaterThanOrEqual(0);
100
- expect(depth2).toBeLessThanOrEqual(1);
101
- expect(depth3).toBeGreaterThanOrEqual(0);
102
- expect(depth3).toBeLessThanOrEqual(1);
103
- });
104
- it("should handle positions behind camera", () => {
105
- const [, , depth] = worldToScreen([0, 0, 20], camera, canvasWidth, canvasHeight);
106
- expect(depth).toBe(2);
107
- });
108
- it("should handle positions very close to camera", () => {
109
- const [, , depth] = worldToScreen([0, 0, 0.5], camera, canvasWidth, canvasHeight);
110
- expect(depth).toBeCloseTo(0.5, 2);
111
- });
112
- it("should be consistent for visible positions", () => {
113
- const worldPos = [2, 1, 5];
114
- const [screenX, screenY, depth] = worldToScreen(worldPos, camera, canvasWidth, canvasHeight);
115
- expect(depth).toBeGreaterThanOrEqual(0);
116
- expect(depth).toBeLessThanOrEqual(1);
117
- expect(screenX).toBeGreaterThanOrEqual(0);
118
- expect(screenX).toBeLessThanOrEqual(canvasWidth);
119
- expect(screenY).toBeGreaterThanOrEqual(0);
120
- expect(screenY).toBeLessThanOrEqual(canvasHeight);
121
- });
122
- });
123
- });
124
- //# sourceMappingURL=world-to-screen.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"world-to-screen.test.js","sourceRoot":"","sources":["../../../src/graphics/camera/world-to-screen.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { FromSchema, Schema } from "../schema/schema.js";
2
- export declare const createStructGPUBuffer: <S extends Schema>(args: {
3
- device: GPUDevice;
4
- schema: S;
5
- elements: FromSchema<S>[];
6
- usage: GPUBufferUsageFlags;
7
- }) => GPUBuffer;
@@ -1,17 +0,0 @@
1
- import { createStructBuffer, getStructLayout } from "../typed-buffer/index.js";
2
- export const createStructGPUBuffer = (args) => {
3
- const { device, schema, elements, usage = GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST } = args;
4
- const layout = getStructLayout(schema);
5
- const buffer = device.createBuffer({
6
- size: Math.max(elements.length, 1) * layout.size,
7
- usage: usage,
8
- mappedAtCreation: true,
9
- });
10
- const typedBuffer = createStructBuffer(schema, buffer.getMappedRange());
11
- for (let i = 0; i < elements.length; i++) {
12
- typedBuffer.set(i, elements[i]);
13
- }
14
- buffer.unmap();
15
- return buffer;
16
- };
17
- //# sourceMappingURL=create-struct-gpu-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-struct-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/create-struct-gpu-buffer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE/E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACjC,IAKC,EACQ,EAAE;IACX,MAAM,EACF,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,GAAG,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ,EAC3D,GAAG,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAE,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC;QAC/B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI;QAChD,KAAK,EAAE,KAAK;QACZ,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAClB,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- export declare function extractWGSLBindings(wgsl: string): {
2
- name: string;
3
- binding: number;
4
- group: number;
5
- }[];
@@ -1,10 +0,0 @@
1
- export function extractWGSLBindings(wgsl) {
2
- const regex = /@binding\((\d+)\)\s+@group\((\d+)\)\s+var<[^>]+>\s+(\w+)\s*:/g;
3
- const result = [];
4
- let match;
5
- while ((match = regex.exec(wgsl))) {
6
- result.push({ name: match[3], binding: +match[1], group: +match[2] });
7
- }
8
- return result;
9
- }
10
- //# sourceMappingURL=extract-wgsl-bindings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-wgsl-bindings.js","sourceRoot":"","sources":["../../src/graphics/extract-wgsl-bindings.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAG,+DAA+D,CAAC;IAC9E,MAAM,MAAM,GAAG,EAAE,CAAC;IAClB,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,15 +0,0 @@
1
- // import { FromSchema, Schema } from "../schema/schema.js";
2
- export {};
3
- // export const FrameSchema = {
4
- // type: "object",
5
- // properties: {
6
- // count: { type: "number", default: 0 },
7
- // deltaTime: { type: "number", default: 0 },
8
- // },
9
- // required: ["count", "deltaTime"],
10
- // additionalProperties: false,
11
- // default: { count: 0 as number, deltaTime: 1 / 60 as number },
12
- // transient: true,
13
- // } as const satisfies Schema;
14
- // export type Frame = FromSchema<typeof FrameSchema>;
15
- //# sourceMappingURL=frame.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame.js","sourceRoot":"","sources":["../../src/graphics/frame.ts"],"names":[],"mappings":"AAAA,4DAA4D;;AAE5D,+BAA+B;AAC/B,sBAAsB;AACtB,oBAAoB;AACpB,iDAAiD;AACjD,qDAAqD;AACrD,SAAS;AACT,wCAAwC;AACxC,mCAAmC;AACnC,oEAAoE;AACpE,uBAAuB;AACvB,+BAA+B;AAE/B,sDAAsD"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,24 +0,0 @@
1
- // import { GraphicsContext } from "./graphics-context.js";
2
- export {};
3
- // export const getWebGPUGraphicsContext = async (canvas: HTMLCanvasElement)
4
- // : Promise<GraphicsContext> => {
5
- // if (!canvas) {
6
- // throw new Error('Canvas not found');
7
- // }
8
- // const adapter = await navigator.gpu?.requestAdapter();
9
- // if (!adapter) {
10
- // throw new Error('No GPU adapter found');
11
- // }
12
- // const device = await adapter.requestDevice();
13
- // const context = canvas.getContext('webgpu');
14
- // if (!context) {
15
- // throw new Error('No WebGPU context');
16
- // }
17
- // context.configure({
18
- // device,
19
- // format: navigator.gpu.getPreferredCanvasFormat(),
20
- // alphaMode: 'premultiplied',
21
- // });
22
- // return { context, device, canvas }
23
- // }
24
- //# sourceMappingURL=get-web-gpu-device-and-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-web-gpu-device-and-context.js","sourceRoot":"","sources":["../../src/graphics/get-web-gpu-device-and-context.ts"],"names":[],"mappings":"AAAA,2DAA2D;;AAE3D,4EAA4E;AAC5E,kCAAkC;AAClC,qBAAqB;AACrB,+CAA+C;AAC/C,QAAQ;AAER,6DAA6D;AAC7D,sBAAsB;AACtB,mDAAmD;AACnD,QAAQ;AAER,oDAAoD;AAEpD,mDAAmD;AACnD,sBAAsB;AACtB,gDAAgD;AAChD,QAAQ;AAER,0BAA0B;AAC1B,kBAAkB;AAClB,4DAA4D;AAC5D,sCAAsC;AACtC,UAAU;AACV,yCAAyC;AACzC,IAAI"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,7 +0,0 @@
1
- export {};
2
- // export type GraphicsContext = {
3
- // readonly canvas: HTMLCanvasElement;
4
- // readonly device: GPUDevice;
5
- // readonly context: GPUCanvasContext;
6
- // }
7
- //# sourceMappingURL=graphics-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"graphics-context.js","sourceRoot":"","sources":["../../src/graphics/graphics-context.ts"],"names":[],"mappings":";AACA,kCAAkC;AAClC,0CAA0C;AAC1C,kCAAkC;AAClC,0CAA0C;AAC1C,IAAI"}
@@ -1,5 +0,0 @@
1
- export * from './graphics-context.js';
2
- export * from './get-web-gpu-device-and-context.js';
3
- export * from './create-struct-gpu-buffer.js';
4
- export * from './to-gpu-buffer.js';
5
- export { type Camera } from './camera/index.js';
@@ -1,5 +0,0 @@
1
- export * from './graphics-context.js';
2
- export * from './get-web-gpu-device-and-context.js';
3
- export * from './create-struct-gpu-buffer.js';
4
- export * from './to-gpu-buffer.js';
5
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/graphics/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oBAAoB,CAAC"}
@@ -1,2 +0,0 @@
1
- import { TypedBuffer } from "../typed-buffer/index.js";
2
- export declare const toGPUBuffer: <T>(buffer: TypedBuffer<T>, device: GPUDevice, byteLength?: number, offset?: number) => Promise<GPUBuffer>;
@@ -1,14 +0,0 @@
1
- import { copyToGPUBuffer } from "../typed-buffer/index.js";
2
- export const toGPUBuffer = async (buffer, device, byteLength, offset) => {
3
- const array = buffer.getTypedArray();
4
- byteLength ??= array.byteLength;
5
- offset ??= 0;
6
- const gpuBuffer = device.createBuffer({
7
- size: byteLength,
8
- usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
9
- mappedAtCreation: true,
10
- });
11
- await copyToGPUBuffer(buffer, device, gpuBuffer, byteLength, offset);
12
- return gpuBuffer;
13
- };
14
- //# sourceMappingURL=to-gpu-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"to-gpu-buffer.js","sourceRoot":"","sources":["../../src/graphics/to-gpu-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAExE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAC5B,MAAsB,EACtB,MAAiB,EACjB,UAAmB,EACnB,MAAe,EACG,EAAE;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACrC,UAAU,KAAK,KAAK,CAAC,UAAU,CAAC;IAChC,MAAM,KAAK,CAAC,CAAC;IACb,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC;QAClC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;QACvD,gBAAgB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACrE,OAAO,SAAS,CAAC;AACrB,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export declare function grow<T extends ArrayBufferLike>(arrayBuffer: T, newCapacity: number): T;
@@ -1,9 +0,0 @@
1
- import { copy } from "./copy.js";
2
- export function grow(arrayBuffer, newCapacity) {
3
- // create a new array buffer using the same constructor, copy the data, and return it
4
- const constructor = arrayBuffer.constructor;
5
- const newArrayBuffer = new constructor(newCapacity);
6
- copy(arrayBuffer, newArrayBuffer);
7
- return newArrayBuffer;
8
- }
9
- //# sourceMappingURL=grow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"grow.js","sourceRoot":"","sources":["../../../src/internal/array-buffer-like/grow.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,MAAM,UAAU,IAAI,CAA4B,WAAc,EAAE,WAAmB;IAC/E,qFAAqF;IACrF,MAAM,WAAW,GAAG,WAAW,CAAC,WAAsC,CAAC;IACvE,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClC,OAAO,cAAc,CAAC;AAC1B,CAAC"}
@@ -1,51 +0,0 @@
1
- import { FromSchema } from "../../schema/index.js";
2
- import { Vec3 } from "../index.js";
3
- export declare const schema: {
4
- readonly type: "number";
5
- readonly minimum: 0;
6
- readonly maximum: 5;
7
- };
8
- export type Type = FromSchema<typeof schema>;
9
- type Face = Type;
10
- /**
11
- * Face direction constants for cube faces
12
- */
13
- export declare const POS_Z: 0;
14
- export declare const POS_X: 1;
15
- export declare const NEG_Z: 2;
16
- export declare const NEG_X: 3;
17
- export declare const POS_Y: 4;
18
- export declare const NEG_Y: 5;
19
- /**
20
- * Array of all face directions
21
- */
22
- export declare const ALL_FACES: readonly [0, 1, 2, 3, 4, 5];
23
- /**
24
- * Face direction names for debugging/logging
25
- */
26
- export declare const FACE_NAMES: readonly ["POS_Z", "POS_X", "NEG_Z", "NEG_X", "POS_Y", "NEG_Y"];
27
- /**
28
- * Get the face name for debugging/logging
29
- */
30
- export declare const getName: (face: Face) => string;
31
- /**
32
- * Get the normal vector for a given face
33
- */
34
- export declare const getNormal: (face: Face) => Vec3;
35
- /**
36
- * Get the opposite face
37
- */
38
- export declare const getOpposite: (face: Face) => Face;
39
- /**
40
- * Check if two faces are opposite
41
- */
42
- export declare const isOpposite: (face1: Face, face2: Face) => boolean;
43
- /**
44
- * Get all faces adjacent to the given face (faces that share an edge)
45
- */
46
- export declare const getAdjacent: (face: Face) => readonly Face[];
47
- /**
48
- * Check if two faces are adjacent (share an edge)
49
- */
50
- export declare const isAdjacent: (face1: Face, face2: Face) => boolean;
51
- export {};
@@ -1,110 +0,0 @@
1
- /*MIT License
2
-
3
- © Copyright 2025 Adobe. All rights reserved.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.*/
22
- export const schema = {
23
- type: 'number',
24
- minimum: 0,
25
- maximum: 5,
26
- };
27
- /**
28
- * Face direction constants for cube faces
29
- */
30
- export const POS_Z = 0;
31
- export const POS_X = 1;
32
- export const NEG_Z = 2;
33
- export const NEG_X = 3;
34
- export const POS_Y = 4;
35
- export const NEG_Y = 5;
36
- /**
37
- * Array of all face directions
38
- */
39
- export const ALL_FACES = [POS_Z, POS_X, NEG_Z, NEG_X, POS_Y, NEG_Y];
40
- /**
41
- * Face direction names for debugging/logging
42
- */
43
- export const FACE_NAMES = [
44
- 'POS_Z', 'POS_X', 'NEG_Z', 'NEG_X', 'POS_Y', 'NEG_Y'
45
- ];
46
- /**
47
- * Get the face name for debugging/logging
48
- */
49
- export const getName = (face) => {
50
- return FACE_NAMES[face];
51
- };
52
- /**
53
- * Get the normal vector for a given face
54
- */
55
- export const getNormal = (face) => {
56
- switch (face) {
57
- case POS_Z: return [0, 0, 1];
58
- case NEG_Z: return [0, 0, -1];
59
- case POS_X: return [1, 0, 0];
60
- case NEG_X: return [-1, 0, 0];
61
- case POS_Y: return [0, 1, 0];
62
- case NEG_Y: return [0, -1, 0];
63
- default: throw new Error(`Invalid face index: ${face}`);
64
- }
65
- };
66
- /**
67
- * Get the opposite face
68
- */
69
- export const getOpposite = (face) => {
70
- switch (face) {
71
- case POS_Z: return NEG_Z;
72
- case NEG_Z: return POS_Z;
73
- case POS_X: return NEG_X;
74
- case NEG_X: return POS_X;
75
- case POS_Y: return NEG_Y;
76
- case NEG_Y: return POS_Y;
77
- default: throw new Error(`Invalid face index: ${face}`);
78
- }
79
- };
80
- /**
81
- * Check if two faces are opposite
82
- */
83
- export const isOpposite = (face1, face2) => {
84
- return getOpposite(face1) === face2;
85
- };
86
- /**
87
- * Get all faces adjacent to the given face (faces that share an edge)
88
- */
89
- export const getAdjacent = (face) => {
90
- switch (face) {
91
- case POS_Z:
92
- case NEG_Z:
93
- return [POS_X, NEG_X, POS_Y, NEG_Y];
94
- case POS_X:
95
- case NEG_X:
96
- return [POS_Z, NEG_Z, POS_Y, NEG_Y];
97
- case POS_Y:
98
- case NEG_Y:
99
- return [POS_Z, NEG_Z, POS_X, NEG_X];
100
- default:
101
- throw new Error(`Invalid face index: ${face}`);
102
- }
103
- };
104
- /**
105
- * Check if two faces are adjacent (share an edge)
106
- */
107
- export const isAdjacent = (face1, face2) => {
108
- return getAdjacent(face1).includes(face2);
109
- };
110
- //# sourceMappingURL=face.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"face.js","sourceRoot":"","sources":["../../../src/math/aabb-face/face.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,94 +0,0 @@
1
- /*MIT License
2
-
3
- © Copyright 2025 Adobe. All rights reserved.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.*/
22
- import { describe, it, expect } from 'vitest';
23
- import * as Face from './face.js';
24
- describe('Face', () => {
25
- it('should have correct constants', () => {
26
- expect(Face.POS_Z).toBe(0);
27
- expect(Face.POS_X).toBe(1);
28
- expect(Face.NEG_Z).toBe(2);
29
- expect(Face.NEG_X).toBe(3);
30
- expect(Face.POS_Y).toBe(4);
31
- expect(Face.NEG_Y).toBe(5);
32
- });
33
- it('should get correct face names', () => {
34
- expect(Face.getName(Face.POS_Z)).toBe('POS_Z');
35
- expect(Face.getName(Face.POS_X)).toBe('POS_X');
36
- expect(Face.getName(Face.NEG_Z)).toBe('NEG_Z');
37
- expect(Face.getName(Face.NEG_X)).toBe('NEG_X');
38
- expect(Face.getName(Face.POS_Y)).toBe('POS_Y');
39
- expect(Face.getName(Face.NEG_Y)).toBe('NEG_Y');
40
- });
41
- it('should get correct normal vectors', () => {
42
- expect(Face.getNormal(Face.POS_Z)).toEqual([0, 0, 1]);
43
- expect(Face.getNormal(Face.NEG_Z)).toEqual([0, 0, -1]);
44
- expect(Face.getNormal(Face.POS_X)).toEqual([1, 0, 0]);
45
- expect(Face.getNormal(Face.NEG_X)).toEqual([-1, 0, 0]);
46
- expect(Face.getNormal(Face.POS_Y)).toEqual([0, 1, 0]);
47
- expect(Face.getNormal(Face.NEG_Y)).toEqual([0, -1, 0]);
48
- });
49
- it('should get correct opposite faces', () => {
50
- expect(Face.getOpposite(Face.POS_Z)).toBe(Face.NEG_Z);
51
- expect(Face.getOpposite(Face.NEG_Z)).toBe(Face.POS_Z);
52
- expect(Face.getOpposite(Face.POS_X)).toBe(Face.NEG_X);
53
- expect(Face.getOpposite(Face.NEG_X)).toBe(Face.POS_X);
54
- expect(Face.getOpposite(Face.POS_Y)).toBe(Face.NEG_Y);
55
- expect(Face.getOpposite(Face.NEG_Y)).toBe(Face.POS_Y);
56
- });
57
- it('should correctly identify opposite faces', () => {
58
- expect(Face.isOpposite(Face.POS_Z, Face.NEG_Z)).toBe(true);
59
- expect(Face.isOpposite(Face.POS_X, Face.NEG_X)).toBe(true);
60
- expect(Face.isOpposite(Face.POS_Y, Face.NEG_Y)).toBe(true);
61
- expect(Face.isOpposite(Face.POS_Z, Face.POS_X)).toBe(false);
62
- expect(Face.isOpposite(Face.POS_Z, Face.POS_Z)).toBe(false);
63
- });
64
- it('should get correct adjacent faces', () => {
65
- const posZAdjacent = Face.getAdjacent(Face.POS_Z);
66
- expect(posZAdjacent).toContain(Face.POS_X);
67
- expect(posZAdjacent).toContain(Face.NEG_X);
68
- expect(posZAdjacent).toContain(Face.POS_Y);
69
- expect(posZAdjacent).toContain(Face.NEG_Y);
70
- expect(posZAdjacent).not.toContain(Face.NEG_Z);
71
- expect(posZAdjacent).not.toContain(Face.POS_Z);
72
- const posXAdjacent = Face.getAdjacent(Face.POS_X);
73
- expect(posXAdjacent).toContain(Face.POS_Z);
74
- expect(posXAdjacent).toContain(Face.NEG_Z);
75
- expect(posXAdjacent).toContain(Face.POS_Y);
76
- expect(posXAdjacent).toContain(Face.NEG_Y);
77
- expect(posXAdjacent).not.toContain(Face.NEG_X);
78
- expect(posXAdjacent).not.toContain(Face.POS_X);
79
- });
80
- it('should correctly identify adjacent faces', () => {
81
- expect(Face.isAdjacent(Face.POS_Z, Face.POS_X)).toBe(true);
82
- expect(Face.isAdjacent(Face.POS_Z, Face.NEG_X)).toBe(true);
83
- expect(Face.isAdjacent(Face.POS_Z, Face.POS_Y)).toBe(true);
84
- expect(Face.isAdjacent(Face.POS_Z, Face.NEG_Y)).toBe(true);
85
- expect(Face.isAdjacent(Face.POS_Z, Face.NEG_Z)).toBe(false);
86
- expect(Face.isAdjacent(Face.POS_Z, Face.POS_Z)).toBe(false);
87
- });
88
- it('should throw error for invalid face indices', () => {
89
- expect(() => Face.getNormal(6)).toThrow('Invalid face index: 6');
90
- expect(() => Face.getOpposite(6)).toThrow('Invalid face index: 6');
91
- expect(() => Face.getAdjacent(6)).toThrow('Invalid face index: 6');
92
- });
93
- });
94
- //# sourceMappingURL=face.test.js.map