@driftengine/core 3.61.0

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 (955) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +9 -0
  4. package/dist/behavior/behaviorTree.d.ts +140 -0
  5. package/dist/behavior/behaviorTree.js +289 -0
  6. package/dist/build/shaderComments.d.ts +64 -0
  7. package/dist/build/shaderComments.js +0 -0
  8. package/dist/cinematic/player.d.ts +80 -0
  9. package/dist/cinematic/player.js +184 -0
  10. package/dist/cinematic/script.d.ts +63 -0
  11. package/dist/cinematic/script.js +141 -0
  12. package/dist/core/bootGate.d.ts +37 -0
  13. package/dist/core/bootGate.js +47 -0
  14. package/dist/core/loadTracker.d.ts +78 -0
  15. package/dist/core/loadTracker.js +106 -0
  16. package/dist/core/loop.d.ts +118 -0
  17. package/dist/core/loop.js +84 -0
  18. package/dist/core/messageQueue.d.ts +61 -0
  19. package/dist/core/messageQueue.js +104 -0
  20. package/dist/core/onceSet.d.ts +27 -0
  21. package/dist/core/onceSet.js +62 -0
  22. package/dist/core/preferences.d.ts +47 -0
  23. package/dist/core/preferences.js +140 -0
  24. package/dist/core/remoteSave.d.ts +154 -0
  25. package/dist/core/remoteSave.js +249 -0
  26. package/dist/core/rng.d.ts +64 -0
  27. package/dist/core/rng.js +72 -0
  28. package/dist/core/stepBudget.d.ts +91 -0
  29. package/dist/core/stepBudget.js +105 -0
  30. package/dist/core/storage.d.ts +52 -0
  31. package/dist/core/storage.js +85 -0
  32. package/dist/core/tickTrace.d.ts +72 -0
  33. package/dist/core/tickTrace.js +102 -0
  34. package/dist/core/timeCurve.d.ts +83 -0
  35. package/dist/core/timeCurve.js +107 -0
  36. package/dist/core/withDefaults.d.ts +21 -0
  37. package/dist/core/withDefaults.js +29 -0
  38. package/dist/dev/contactProbe.d.ts +41 -0
  39. package/dist/dev/contactProbe.js +58 -0
  40. package/dist/dev/fpsMeter.d.ts +45 -0
  41. package/dist/dev/fpsMeter.js +86 -0
  42. package/dist/environment/celestialClock.d.ts +141 -0
  43. package/dist/environment/celestialClock.js +262 -0
  44. package/dist/geometry/decal.d.ts +61 -0
  45. package/dist/geometry/decal.js +178 -0
  46. package/dist/geometry/filmPatch.d.ts +35 -0
  47. package/dist/geometry/filmPatch.js +112 -0
  48. package/dist/geometry/growable.d.ts +70 -0
  49. package/dist/geometry/growable.js +167 -0
  50. package/dist/geometry/lightVolume.d.ts +76 -0
  51. package/dist/geometry/lightVolume.js +65 -0
  52. package/dist/geometry/meshBuilder.d.ts +426 -0
  53. package/dist/geometry/meshBuilder.js +1184 -0
  54. package/dist/geometry/pixelFont.d.ts +59 -0
  55. package/dist/geometry/pixelFont.js +179 -0
  56. package/dist/geometry/ribbon.d.ts +101 -0
  57. package/dist/geometry/ribbon.js +546 -0
  58. package/dist/geometry/shellFill.d.ts +101 -0
  59. package/dist/geometry/shellFill.js +203 -0
  60. package/dist/geometry/spline.d.ts +162 -0
  61. package/dist/geometry/spline.js +527 -0
  62. package/dist/geometry/tangents.d.ts +30 -0
  63. package/dist/geometry/tangents.js +142 -0
  64. package/dist/geometry/textMesh.d.ts +51 -0
  65. package/dist/geometry/textMesh.js +57 -0
  66. package/dist/geometry/treeBuilder.d.ts +37 -0
  67. package/dist/geometry/treeBuilder.js +56 -0
  68. package/dist/host/display.d.ts +135 -0
  69. package/dist/host/display.js +114 -0
  70. package/dist/host/files.d.ts +25 -0
  71. package/dist/host/files.js +44 -0
  72. package/dist/host/lifecycle.d.ts +45 -0
  73. package/dist/host/lifecycle.js +28 -0
  74. package/dist/host/platformServices.d.ts +23 -0
  75. package/dist/host/platformServices.js +1 -0
  76. package/dist/host/screen.d.ts +49 -0
  77. package/dist/host/screen.js +90 -0
  78. package/dist/index.d.ts +289 -0
  79. package/dist/index.js +320 -0
  80. package/dist/input/actionMap.d.ts +181 -0
  81. package/dist/input/actionMap.js +314 -0
  82. package/dist/input/activeDevice.d.ts +55 -0
  83. package/dist/input/activeDevice.js +83 -0
  84. package/dist/input/gamepadIdentity.d.ts +43 -0
  85. package/dist/input/gamepadIdentity.js +108 -0
  86. package/dist/input/gamepadMapping.d.ts +56 -0
  87. package/dist/input/gamepadMapping.js +91 -0
  88. package/dist/input/input.d.ts +281 -0
  89. package/dist/input/input.js +703 -0
  90. package/dist/input/inputHarness.d.ts +42 -0
  91. package/dist/input/inputHarness.js +193 -0
  92. package/dist/input/rightGesture.d.ts +57 -0
  93. package/dist/input/rightGesture.js +49 -0
  94. package/dist/input/rumble.d.ts +71 -0
  95. package/dist/input/rumble.js +119 -0
  96. package/dist/input/touchControls.d.ts +138 -0
  97. package/dist/input/touchControls.js +352 -0
  98. package/dist/input/typingTarget.d.ts +6 -0
  99. package/dist/input/typingTarget.js +27 -0
  100. package/dist/math/bounds.d.ts +61 -0
  101. package/dist/math/bounds.js +121 -0
  102. package/dist/math/color.d.ts +8 -0
  103. package/dist/math/color.js +35 -0
  104. package/dist/math/exact.d.ts +66 -0
  105. package/dist/math/exact.js +262 -0
  106. package/dist/math/frustum.d.ts +44 -0
  107. package/dist/math/frustum.js +90 -0
  108. package/dist/math/intersect.d.ts +76 -0
  109. package/dist/math/intersect.js +185 -0
  110. package/dist/math/scalar.d.ts +51 -0
  111. package/dist/math/scalar.js +99 -0
  112. package/dist/math/spring.d.ts +59 -0
  113. package/dist/math/spring.js +88 -0
  114. package/dist/nav/navGraph.d.ts +71 -0
  115. package/dist/nav/navGraph.js +111 -0
  116. package/dist/nav/navPath.d.ts +93 -0
  117. package/dist/nav/navPath.js +162 -0
  118. package/dist/nav/navSearch.d.ts +74 -0
  119. package/dist/nav/navSearch.js +198 -0
  120. package/dist/physics/boxSurface.d.ts +48 -0
  121. package/dist/physics/boxSurface.js +73 -0
  122. package/dist/physics/colliderSurface.d.ts +46 -0
  123. package/dist/physics/colliderSurface.js +146 -0
  124. package/dist/physics/compositeSurface.d.ts +33 -0
  125. package/dist/physics/compositeSurface.js +108 -0
  126. package/dist/physics/heightSurface.d.ts +103 -0
  127. package/dist/physics/heightSurface.js +153 -0
  128. package/dist/physics/ribbonSurface.d.ts +239 -0
  129. package/dist/physics/ribbonSurface.js +522 -0
  130. package/dist/render/ambientOcclusionPass.d.ts +53 -0
  131. package/dist/render/ambientOcclusionPass.js +179 -0
  132. package/dist/render/areaLights.d.ts +116 -0
  133. package/dist/render/areaLights.js +91 -0
  134. package/dist/render/areaShadowSet.d.ts +184 -0
  135. package/dist/render/areaShadowSet.js +277 -0
  136. package/dist/render/atmosphere.d.ts +94 -0
  137. package/dist/render/atmosphere.js +91 -0
  138. package/dist/render/backend/api.d.ts +496 -0
  139. package/dist/render/backend/api.js +1 -0
  140. package/dist/render/backend/budget.d.ts +82 -0
  141. package/dist/render/backend/budget.js +99 -0
  142. package/dist/render/backend/createRenderer.d.ts +135 -0
  143. package/dist/render/backend/createRenderer.js +201 -0
  144. package/dist/render/backend/deadline.d.ts +24 -0
  145. package/dist/render/backend/deadline.js +38 -0
  146. package/dist/render/backend/probe.d.ts +30 -0
  147. package/dist/render/backend/probe.js +129 -0
  148. package/dist/render/backend/select.d.ts +70 -0
  149. package/dist/render/backend/select.js +249 -0
  150. package/dist/render/backend/timer.d.ts +50 -0
  151. package/dist/render/backend/timer.js +1 -0
  152. package/dist/render/backend/webgl2/instanced.d.ts +21 -0
  153. package/dist/render/backend/webgl2/instanced.js +42 -0
  154. package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
  155. package/dist/render/backend/webgl2/morphTexture.js +55 -0
  156. package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
  157. package/dist/render/backend/webgl2/renderer.js +6041 -0
  158. package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
  159. package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
  160. package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
  161. package/dist/render/backend/webgpu/boltPass.js +160 -0
  162. package/dist/render/backend/webgpu/buffers.d.ts +159 -0
  163. package/dist/render/backend/webgpu/buffers.js +402 -0
  164. package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
  165. package/dist/render/backend/webgpu/causticsPass.js +138 -0
  166. package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
  167. package/dist/render/backend/webgpu/clusterBinner.js +206 -0
  168. package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
  169. package/dist/render/backend/webgpu/depthPass.js +228 -0
  170. package/dist/render/backend/webgpu/device.d.ts +52 -0
  171. package/dist/render/backend/webgpu/device.js +121 -0
  172. package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
  173. package/dist/render/backend/webgpu/drawCommand.js +54 -0
  174. package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
  175. package/dist/render/backend/webgpu/environmentTexels.js +79 -0
  176. package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
  177. package/dist/render/backend/webgpu/filmPass.js +97 -0
  178. package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
  179. package/dist/render/backend/webgpu/flatPass.js +482 -0
  180. package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
  181. package/dist/render/backend/webgpu/flockPass.js +129 -0
  182. package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
  183. package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
  184. package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
  185. package/dist/render/backend/webgpu/insetPass.js +108 -0
  186. package/dist/render/backend/webgpu/instanced.d.ts +27 -0
  187. package/dist/render/backend/webgpu/instanced.js +49 -0
  188. package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
  189. package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
  190. package/dist/render/backend/webgpu/linePass.d.ts +90 -0
  191. package/dist/render/backend/webgpu/linePass.js +220 -0
  192. package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
  193. package/dist/render/backend/webgpu/morphTexture.js +51 -0
  194. package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
  195. package/dist/render/backend/webgpu/panelPass.js +114 -0
  196. package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
  197. package/dist/render/backend/webgpu/particlePass.js +280 -0
  198. package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
  199. package/dist/render/backend/webgpu/pipelineCache.js +140 -0
  200. package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
  201. package/dist/render/backend/webgpu/plumePass.js +213 -0
  202. package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
  203. package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
  204. package/dist/render/backend/webgpu/postPass.d.ts +342 -0
  205. package/dist/render/backend/webgpu/postPass.js +366 -0
  206. package/dist/render/backend/webgpu/probePass.d.ts +108 -0
  207. package/dist/render/backend/webgpu/probePass.js +188 -0
  208. package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
  209. package/dist/render/backend/webgpu/reflectionPass.js +87 -0
  210. package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
  211. package/dist/render/backend/webgpu/renderer.js +10911 -0
  212. package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
  213. package/dist/render/backend/webgpu/scatterPass.js +266 -0
  214. package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
  215. package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
  216. package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
  217. package/dist/render/backend/webgpu/shaderModules.js +45 -0
  218. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
  219. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
  220. package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
  221. package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
  222. package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
  223. package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
  224. package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
  225. package/dist/render/backend/webgpu/skyPass.js +70 -0
  226. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
  227. package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
  228. package/dist/render/backend/webgpu/textPass.d.ts +73 -0
  229. package/dist/render/backend/webgpu/textPass.js +190 -0
  230. package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
  231. package/dist/render/backend/webgpu/uniformRing.js +208 -0
  232. package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
  233. package/dist/render/backend/webgpu/waterPass.js +160 -0
  234. package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
  235. package/dist/render/backend/webgpu/windStreakPass.js +153 -0
  236. package/dist/render/billboard.d.ts +27 -0
  237. package/dist/render/billboard.js +79 -0
  238. package/dist/render/bloomChain.d.ts +66 -0
  239. package/dist/render/bloomChain.js +83 -0
  240. package/dist/render/bloomPass.d.ts +54 -0
  241. package/dist/render/bloomPass.js +219 -0
  242. package/dist/render/boltBatch.d.ts +39 -0
  243. package/dist/render/boltBatch.js +121 -0
  244. package/dist/render/boltPool.d.ts +135 -0
  245. package/dist/render/boltPool.js +259 -0
  246. package/dist/render/boom.d.ts +46 -0
  247. package/dist/render/boom.js +81 -0
  248. package/dist/render/camera.d.ts +119 -0
  249. package/dist/render/camera.js +304 -0
  250. package/dist/render/causticsRenderer.d.ts +63 -0
  251. package/dist/render/causticsRenderer.js +119 -0
  252. package/dist/render/cinematicCamera.d.ts +102 -0
  253. package/dist/render/cinematicCamera.js +227 -0
  254. package/dist/render/clusteredLights.d.ts +260 -0
  255. package/dist/render/clusteredLights.js +479 -0
  256. package/dist/render/colourGrade.d.ts +62 -0
  257. package/dist/render/colourGrade.js +91 -0
  258. package/dist/render/compute.d.ts +74 -0
  259. package/dist/render/compute.js +8 -0
  260. package/dist/render/contextLoss.d.ts +32 -0
  261. package/dist/render/contextLoss.js +46 -0
  262. package/dist/render/debugLines.d.ts +75 -0
  263. package/dist/render/debugLines.js +281 -0
  264. package/dist/render/decalPass.d.ts +34 -0
  265. package/dist/render/decalPass.js +103 -0
  266. package/dist/render/decalProjector.d.ts +140 -0
  267. package/dist/render/decalProjector.js +282 -0
  268. package/dist/render/decalQueue.d.ts +53 -0
  269. package/dist/render/decalQueue.js +87 -0
  270. package/dist/render/depthConvention.d.ts +314 -0
  271. package/dist/render/depthConvention.js +346 -0
  272. package/dist/render/drawingBuffer.d.ts +52 -0
  273. package/dist/render/drawingBuffer.js +67 -0
  274. package/dist/render/emptyTexture.d.ts +60 -0
  275. package/dist/render/emptyTexture.js +103 -0
  276. package/dist/render/envProbeArray.d.ts +85 -0
  277. package/dist/render/envProbeArray.js +164 -0
  278. package/dist/render/equirectToCube.d.ts +54 -0
  279. package/dist/render/equirectToCube.js +123 -0
  280. package/dist/render/flockGeometry.d.ts +23 -0
  281. package/dist/render/flockGeometry.js +43 -0
  282. package/dist/render/flockRenderer.d.ts +37 -0
  283. package/dist/render/flockRenderer.js +70 -0
  284. package/dist/render/frame/arena.d.ts +32 -0
  285. package/dist/render/frame/arena.js +65 -0
  286. package/dist/render/frame/index.d.ts +18 -0
  287. package/dist/render/frame/index.js +4 -0
  288. package/dist/render/frame/replay.d.ts +34 -0
  289. package/dist/render/frame/replay.js +48 -0
  290. package/dist/render/frame/resources.d.ts +25 -0
  291. package/dist/render/frame/resources.js +55 -0
  292. package/dist/render/frame/schedule.d.ts +37 -0
  293. package/dist/render/frame/schedule.js +61 -0
  294. package/dist/render/frameView.d.ts +19 -0
  295. package/dist/render/frameView.js +1 -0
  296. package/dist/render/gizmo.d.ts +236 -0
  297. package/dist/render/gizmo.js +727 -0
  298. package/dist/render/globalMedium.d.ts +124 -0
  299. package/dist/render/globalMedium.js +100 -0
  300. package/dist/render/globalMediumPass.d.ts +101 -0
  301. package/dist/render/globalMediumPass.js +250 -0
  302. package/dist/render/gpuCapability.d.ts +111 -0
  303. package/dist/render/gpuCapability.js +194 -0
  304. package/dist/render/gpuTimer.d.ts +87 -0
  305. package/dist/render/gpuTimer.js +145 -0
  306. package/dist/render/halfFloat.d.ts +4 -0
  307. package/dist/render/halfFloat.js +38 -0
  308. package/dist/render/handleRegistry.d.ts +54 -0
  309. package/dist/render/handleRegistry.js +84 -0
  310. package/dist/render/iesProfile.d.ts +64 -0
  311. package/dist/render/iesProfile.js +179 -0
  312. package/dist/render/imageTexels.d.ts +50 -0
  313. package/dist/render/imageTexels.js +91 -0
  314. package/dist/render/instancedMesh.d.ts +48 -0
  315. package/dist/render/instancedMesh.js +127 -0
  316. package/dist/render/instances.d.ts +69 -0
  317. package/dist/render/instances.js +52 -0
  318. package/dist/render/lightBudget.d.ts +397 -0
  319. package/dist/render/lightBudget.js +524 -0
  320. package/dist/render/lightMatrix.d.ts +3 -0
  321. package/dist/render/lightMatrix.js +45 -0
  322. package/dist/render/lightVolumeDraw.d.ts +132 -0
  323. package/dist/render/lightVolumeDraw.js +181 -0
  324. package/dist/render/lineBatch.d.ts +60 -0
  325. package/dist/render/lineBatch.js +160 -0
  326. package/dist/render/linePoints.d.ts +33 -0
  327. package/dist/render/linePoints.js +46 -0
  328. package/dist/render/livePointShadowSet.d.ts +72 -0
  329. package/dist/render/livePointShadowSet.js +258 -0
  330. package/dist/render/lod.d.ts +35 -0
  331. package/dist/render/lod.js +65 -0
  332. package/dist/render/mesh.d.ts +177 -0
  333. package/dist/render/mesh.js +466 -0
  334. package/dist/render/occlusion.d.ts +81 -0
  335. package/dist/render/occlusion.js +378 -0
  336. package/dist/render/oitPass.d.ts +67 -0
  337. package/dist/render/oitPass.js +213 -0
  338. package/dist/render/orderIndependent.d.ts +92 -0
  339. package/dist/render/orderIndependent.js +108 -0
  340. package/dist/render/particleBatch.d.ts +140 -0
  341. package/dist/render/particleBatch.js +186 -0
  342. package/dist/render/particleMaterial.d.ts +54 -0
  343. package/dist/render/particleMaterial.js +42 -0
  344. package/dist/render/particlePool.d.ts +124 -0
  345. package/dist/render/particlePool.js +182 -0
  346. package/dist/render/pass.d.ts +195 -0
  347. package/dist/render/pass.js +9 -0
  348. package/dist/render/passTarget.d.ts +86 -0
  349. package/dist/render/passTarget.js +121 -0
  350. package/dist/render/pickable.d.ts +31 -0
  351. package/dist/render/pickable.js +172 -0
  352. package/dist/render/planarReflection.d.ts +59 -0
  353. package/dist/render/planarReflection.js +194 -0
  354. package/dist/render/planarReflectionDraw.d.ts +31 -0
  355. package/dist/render/planarReflectionDraw.js +65 -0
  356. package/dist/render/plumeGeometry.d.ts +25 -0
  357. package/dist/render/plumeGeometry.js +61 -0
  358. package/dist/render/plumeMaterial.d.ts +31 -0
  359. package/dist/render/plumeMaterial.js +64 -0
  360. package/dist/render/plumeRenderer.d.ts +96 -0
  361. package/dist/render/plumeRenderer.js +185 -0
  362. package/dist/render/pointLightSelection.d.ts +175 -0
  363. package/dist/render/pointLightSelection.js +301 -0
  364. package/dist/render/pointShadowArray.d.ts +95 -0
  365. package/dist/render/pointShadowArray.js +219 -0
  366. package/dist/render/pointShadowBudget.d.ts +118 -0
  367. package/dist/render/pointShadowBudget.js +221 -0
  368. package/dist/render/pointShadowImage.d.ts +265 -0
  369. package/dist/render/pointShadowImage.js +339 -0
  370. package/dist/render/pointShadowMap.d.ts +93 -0
  371. package/dist/render/pointShadowMap.js +167 -0
  372. package/dist/render/pointShadowSystem.d.ts +195 -0
  373. package/dist/render/pointShadowSystem.js +336 -0
  374. package/dist/render/prefilterEnvMap.d.ts +124 -0
  375. package/dist/render/prefilterEnvMap.js +146 -0
  376. package/dist/render/prefilterPass.d.ts +44 -0
  377. package/dist/render/prefilterPass.js +98 -0
  378. package/dist/render/probeGrid.d.ts +122 -0
  379. package/dist/render/probeGrid.js +174 -0
  380. package/dist/render/rainField.d.ts +99 -0
  381. package/dist/render/rainField.js +168 -0
  382. package/dist/render/reflectionProbe.d.ts +188 -0
  383. package/dist/render/reflectionProbe.js +437 -0
  384. package/dist/render/renderQuality.d.ts +699 -0
  385. package/dist/render/renderQuality.js +293 -0
  386. package/dist/render/rendererHarness.d.ts +39 -0
  387. package/dist/render/rendererHarness.js +185 -0
  388. package/dist/render/resolutionGovernor.d.ts +107 -0
  389. package/dist/render/resolutionGovernor.js +144 -0
  390. package/dist/render/scatterDeform.d.ts +17 -0
  391. package/dist/render/scatterDeform.js +46 -0
  392. package/dist/render/sceneTarget.d.ts +288 -0
  393. package/dist/render/sceneTarget.js +856 -0
  394. package/dist/render/screenSpaceReflection.d.ts +233 -0
  395. package/dist/render/screenSpaceReflection.js +415 -0
  396. package/dist/render/sdfFont.d.ts +77 -0
  397. package/dist/render/sdfFont.js +86 -0
  398. package/dist/render/sdfTextLayout.d.ts +46 -0
  399. package/dist/render/sdfTextLayout.js +145 -0
  400. package/dist/render/sdfTextRenderer.d.ts +75 -0
  401. package/dist/render/sdfTextRenderer.js +194 -0
  402. package/dist/render/seaState.d.ts +25 -0
  403. package/dist/render/seaState.js +34 -0
  404. package/dist/render/segmentQuads.d.ts +29 -0
  405. package/dist/render/segmentQuads.js +75 -0
  406. package/dist/render/shader.d.ts +5 -0
  407. package/dist/render/shader.js +172 -0
  408. package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
  409. package/dist/render/shaders/ambientOcclusion.js +352 -0
  410. package/dist/render/shaders/arcane.d.ts +19 -0
  411. package/dist/render/shaders/arcane.js +102 -0
  412. package/dist/render/shaders/bloom.d.ts +70 -0
  413. package/dist/render/shaders/bloom.js +227 -0
  414. package/dist/render/shaders/bolt.d.ts +17 -0
  415. package/dist/render/shaders/bolt.js +161 -0
  416. package/dist/render/shaders/caustics.d.ts +38 -0
  417. package/dist/render/shaders/caustics.js +167 -0
  418. package/dist/render/shaders/conditionals.d.ts +21 -0
  419. package/dist/render/shaders/conditionals.js +55 -0
  420. package/dist/render/shaders/decalProject.d.ts +25 -0
  421. package/dist/render/shaders/decalProject.js +125 -0
  422. package/dist/render/shaders/depth.d.ts +14 -0
  423. package/dist/render/shaders/depth.js +114 -0
  424. package/dist/render/shaders/depthOfField.d.ts +41 -0
  425. package/dist/render/shaders/depthOfField.js +139 -0
  426. package/dist/render/shaders/film.d.ts +15 -0
  427. package/dist/render/shaders/film.js +283 -0
  428. package/dist/render/shaders/fire.d.ts +12 -0
  429. package/dist/render/shaders/fire.js +178 -0
  430. package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
  431. package/dist/render/shaders/flat/directionalShadow.js +195 -0
  432. package/dist/render/shaders/flat/index.d.ts +135 -0
  433. package/dist/render/shaders/flat/index.js +387 -0
  434. package/dist/render/shaders/flat/lobes.d.ts +1 -0
  435. package/dist/render/shaders/flat/lobes.js +398 -0
  436. package/dist/render/shaders/flat/main.d.ts +2 -0
  437. package/dist/render/shaders/flat/main.js +1630 -0
  438. package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
  439. package/dist/render/shaders/flat/pointShadow.js +322 -0
  440. package/dist/render/shaders/flat/preamble.d.ts +15 -0
  441. package/dist/render/shaders/flat/preamble.js +864 -0
  442. package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
  443. package/dist/render/shaders/flat/probeGrid.js +151 -0
  444. package/dist/render/shaders/flat/surface.d.ts +2 -0
  445. package/dist/render/shaders/flat/surface.js +40 -0
  446. package/dist/render/shaders/flock.d.ts +11 -0
  447. package/dist/render/shaders/flock.js +102 -0
  448. package/dist/render/shaders/fog.d.ts +37 -0
  449. package/dist/render/shaders/fog.js +98 -0
  450. package/dist/render/shaders/fullscreen.d.ts +16 -0
  451. package/dist/render/shaders/fullscreen.js +27 -0
  452. package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
  453. package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
  454. package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
  455. package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
  456. package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
  457. package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
  458. package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
  459. package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
  460. package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
  461. package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
  462. package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
  463. package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
  464. package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
  465. package/dist/render/shaders/generated/depth.wgsl.js +137 -0
  466. package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
  467. package/dist/render/shaders/generated/film.wgsl.js +140 -0
  468. package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
  469. package/dist/render/shaders/generated/fire.wgsl.js +134 -0
  470. package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
  471. package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
  472. package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
  473. package/dist/render/shaders/generated/flock.wgsl.js +79 -0
  474. package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
  475. package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
  476. package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
  477. package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
  478. package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
  479. package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
  480. package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
  481. package/dist/render/shaders/generated/line.wgsl.js +134 -0
  482. package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
  483. package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
  484. package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
  485. package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
  486. package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
  487. package/dist/render/shaders/generated/panel.wgsl.js +54 -0
  488. package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
  489. package/dist/render/shaders/generated/particle.wgsl.js +338 -0
  490. package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
  491. package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
  492. package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
  493. package/dist/render/shaders/generated/rush.wgsl.js +137 -0
  494. package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
  495. package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
  496. package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
  497. package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
  498. package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
  499. package/dist/render/shaders/generated/sky.wgsl.js +106 -0
  500. package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
  501. package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
  502. package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
  503. package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
  504. package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
  505. package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
  506. package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
  507. package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
  508. package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
  509. package/dist/render/shaders/generated/text.wgsl.js +104 -0
  510. package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
  511. package/dist/render/shaders/generated/water.wgsl.js +253 -0
  512. package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
  513. package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
  514. package/dist/render/shaders/gerstner.d.ts +21 -0
  515. package/dist/render/shaders/gerstner.js +110 -0
  516. package/dist/render/shaders/globalMedium.d.ts +56 -0
  517. package/dist/render/shaders/globalMedium.js +393 -0
  518. package/dist/render/shaders/lightVolume.d.ts +61 -0
  519. package/dist/render/shaders/lightVolume.js +527 -0
  520. package/dist/render/shaders/line.d.ts +18 -0
  521. package/dist/render/shaders/line.js +122 -0
  522. package/dist/render/shaders/morph.d.ts +26 -0
  523. package/dist/render/shaders/morph.js +61 -0
  524. package/dist/render/shaders/octahedral.d.ts +76 -0
  525. package/dist/render/shaders/octahedral.js +161 -0
  526. package/dist/render/shaders/octahedralResolve.d.ts +25 -0
  527. package/dist/render/shaders/octahedralResolve.js +81 -0
  528. package/dist/render/shaders/oitResolve.d.ts +17 -0
  529. package/dist/render/shaders/oitResolve.js +42 -0
  530. package/dist/render/shaders/outputTransform.d.ts +37 -0
  531. package/dist/render/shaders/outputTransform.js +106 -0
  532. package/dist/render/shaders/panel.d.ts +17 -0
  533. package/dist/render/shaders/panel.js +50 -0
  534. package/dist/render/shaders/particle.d.ts +82 -0
  535. package/dist/render/shaders/particle.js +431 -0
  536. package/dist/render/shaders/prefilter.d.ts +37 -0
  537. package/dist/render/shaders/prefilter.js +276 -0
  538. package/dist/render/shaders/rush.d.ts +21 -0
  539. package/dist/render/shaders/rush.js +355 -0
  540. package/dist/render/shaders/scatter.d.ts +14 -0
  541. package/dist/render/shaders/scatter.js +206 -0
  542. package/dist/render/shaders/sdfText.d.ts +9 -0
  543. package/dist/render/shaders/sdfText.js +65 -0
  544. package/dist/render/shaders/skinning.d.ts +17 -0
  545. package/dist/render/shaders/skinning.js +59 -0
  546. package/dist/render/shaders/sky.d.ts +10 -0
  547. package/dist/render/shaders/sky.js +242 -0
  548. package/dist/render/shaders/smoke.d.ts +8 -0
  549. package/dist/render/shaders/smoke.js +88 -0
  550. package/dist/render/shaders/ssrResolve.d.ts +15 -0
  551. package/dist/render/shaders/ssrResolve.js +28 -0
  552. package/dist/render/shaders/ssrTrace.d.ts +22 -0
  553. package/dist/render/shaders/ssrTrace.js +230 -0
  554. package/dist/render/shaders/tangentFrame.d.ts +17 -0
  555. package/dist/render/shaders/tangentFrame.js +70 -0
  556. package/dist/render/shaders/temporalResolve.d.ts +1 -0
  557. package/dist/render/shaders/temporalResolve.js +150 -0
  558. package/dist/render/shaders/text.d.ts +17 -0
  559. package/dist/render/shaders/text.js +155 -0
  560. package/dist/render/shaders/vertexChannel.d.ts +39 -0
  561. package/dist/render/shaders/vertexChannel.js +69 -0
  562. package/dist/render/shaders/water.d.ts +18 -0
  563. package/dist/render/shaders/water.js +354 -0
  564. package/dist/render/shaders/windStreaks.d.ts +14 -0
  565. package/dist/render/shaders/windStreaks.js +129 -0
  566. package/dist/render/shadowCasters.d.ts +107 -0
  567. package/dist/render/shadowCasters.js +1 -0
  568. package/dist/render/shadowMap.d.ts +10 -0
  569. package/dist/render/shadowMap.js +80 -0
  570. package/dist/render/shotPlacement.d.ts +80 -0
  571. package/dist/render/shotPlacement.js +183 -0
  572. package/dist/render/skinPalette.d.ts +90 -0
  573. package/dist/render/skinPalette.js +136 -0
  574. package/dist/render/ssrPass.d.ts +59 -0
  575. package/dist/render/ssrPass.js +196 -0
  576. package/dist/render/surfaceSheet.d.ts +52 -0
  577. package/dist/render/surfaceSheet.js +99 -0
  578. package/dist/render/surfaceTexture.d.ts +197 -0
  579. package/dist/render/surfaceTexture.js +116 -0
  580. package/dist/render/temporalAa.d.ts +104 -0
  581. package/dist/render/temporalAa.js +194 -0
  582. package/dist/render/temporalPass.d.ts +54 -0
  583. package/dist/render/temporalPass.js +135 -0
  584. package/dist/render/textLayout.d.ts +88 -0
  585. package/dist/render/textLayout.js +201 -0
  586. package/dist/render/textRenderer.d.ts +32 -0
  587. package/dist/render/textRenderer.js +176 -0
  588. package/dist/render/thirdPersonCamera.d.ts +272 -0
  589. package/dist/render/thirdPersonCamera.js +479 -0
  590. package/dist/render/trample.d.ts +57 -0
  591. package/dist/render/trample.js +134 -0
  592. package/dist/render/translucentQueue.d.ts +76 -0
  593. package/dist/render/translucentQueue.js +90 -0
  594. package/dist/render/uniformVectorBudget.d.ts +105 -0
  595. package/dist/render/uniformVectorBudget.js +201 -0
  596. package/dist/render/uploadStep.d.ts +14 -0
  597. package/dist/render/uploadStep.js +14 -0
  598. package/dist/render/vertexDefaults.d.ts +48 -0
  599. package/dist/render/vertexDefaults.js +111 -0
  600. package/dist/render/visibility.d.ts +22 -0
  601. package/dist/render/visibility.js +47 -0
  602. package/dist/render/waterDraw.d.ts +57 -0
  603. package/dist/render/waterDraw.js +102 -0
  604. package/dist/render/waterGrid.d.ts +62 -0
  605. package/dist/render/waterGrid.js +151 -0
  606. package/dist/render/waterRenderer.d.ts +163 -0
  607. package/dist/render/waterRenderer.js +165 -0
  608. package/dist/render/wind.d.ts +45 -0
  609. package/dist/render/wind.js +32 -0
  610. package/dist/render/windField.d.ts +34 -0
  611. package/dist/render/windField.js +13 -0
  612. package/dist/render/windStreakDraw.d.ts +73 -0
  613. package/dist/render/windStreakDraw.js +86 -0
  614. package/dist/render/windStreakRenderer.d.ts +37 -0
  615. package/dist/render/windStreakRenderer.js +86 -0
  616. package/dist/scene/node.d.ts +128 -0
  617. package/dist/scene/node.js +319 -0
  618. package/dist/scene/visit.d.ts +38 -0
  619. package/dist/scene/visit.js +43 -0
  620. package/dist/ui/clipMime.d.ts +46 -0
  621. package/dist/ui/clipMime.js +88 -0
  622. package/dist/ui/exportTarget.d.ts +305 -0
  623. package/dist/ui/exportTarget.js +368 -0
  624. package/dist/ui/frameOverlay.d.ts +59 -0
  625. package/dist/ui/frameOverlay.js +76 -0
  626. package/dist/ui/framePacer.d.ts +142 -0
  627. package/dist/ui/framePacer.js +284 -0
  628. package/dist/ui/frameRecorder.d.ts +188 -0
  629. package/dist/ui/frameRecorder.js +221 -0
  630. package/dist/ui/fullscreen.d.ts +72 -0
  631. package/dist/ui/fullscreen.js +92 -0
  632. package/dist/ui/pixelCursor.d.ts +28 -0
  633. package/dist/ui/pixelCursor.js +66 -0
  634. package/dist/ui/splash.d.ts +86 -0
  635. package/dist/ui/splash.js +300 -0
  636. package/dist/ui/stillFrame.d.ts +22 -0
  637. package/dist/ui/stillFrame.js +40 -0
  638. package/package.json +60 -0
  639. package/src/behavior/behaviorTree.ts +346 -0
  640. package/src/build/shaderComments.ts +0 -0
  641. package/src/cinematic/player.ts +209 -0
  642. package/src/cinematic/script.ts +231 -0
  643. package/src/core/bootGate.ts +49 -0
  644. package/src/core/loadTracker.ts +144 -0
  645. package/src/core/loop.ts +211 -0
  646. package/src/core/messageQueue.ts +145 -0
  647. package/src/core/onceSet.ts +65 -0
  648. package/src/core/preferences.ts +177 -0
  649. package/src/core/remoteSave.ts +347 -0
  650. package/src/core/rng.ts +101 -0
  651. package/src/core/stepBudget.ts +136 -0
  652. package/src/core/storage.ts +114 -0
  653. package/src/core/tickTrace.ts +129 -0
  654. package/src/core/timeCurve.ts +175 -0
  655. package/src/core/withDefaults.ts +28 -0
  656. package/src/dev/contactProbe.ts +115 -0
  657. package/src/dev/fpsMeter.ts +101 -0
  658. package/src/environment/celestialClock.ts +385 -0
  659. package/src/geometry/decal.ts +260 -0
  660. package/src/geometry/filmPatch.ts +158 -0
  661. package/src/geometry/growable.ts +165 -0
  662. package/src/geometry/lightVolume.ts +161 -0
  663. package/src/geometry/meshBuilder.ts +1397 -0
  664. package/src/geometry/pixelFont.ts +189 -0
  665. package/src/geometry/ribbon.ts +790 -0
  666. package/src/geometry/shellFill.ts +265 -0
  667. package/src/geometry/spline.ts +659 -0
  668. package/src/geometry/tangents.ts +173 -0
  669. package/src/geometry/textMesh.ts +96 -0
  670. package/src/geometry/treeBuilder.ts +114 -0
  671. package/src/host/display.ts +180 -0
  672. package/src/host/files.ts +77 -0
  673. package/src/host/lifecycle.ts +63 -0
  674. package/src/host/platformServices.ts +23 -0
  675. package/src/host/screen.ts +134 -0
  676. package/src/index.ts +730 -0
  677. package/src/input/actionMap.ts +377 -0
  678. package/src/input/activeDevice.ts +86 -0
  679. package/src/input/gamepadIdentity.ts +131 -0
  680. package/src/input/gamepadMapping.ts +121 -0
  681. package/src/input/input.ts +872 -0
  682. package/src/input/inputHarness.ts +226 -0
  683. package/src/input/rightGesture.ts +76 -0
  684. package/src/input/rumble.ts +138 -0
  685. package/src/input/touchControls.ts +451 -0
  686. package/src/input/typingTarget.ts +26 -0
  687. package/src/math/bounds.ts +153 -0
  688. package/src/math/color.ts +37 -0
  689. package/src/math/exact.ts +274 -0
  690. package/src/math/frustum.ts +115 -0
  691. package/src/math/intersect.ts +228 -0
  692. package/src/math/scalar.ts +109 -0
  693. package/src/math/spring.ts +106 -0
  694. package/src/nav/navGraph.ts +168 -0
  695. package/src/nav/navPath.ts +217 -0
  696. package/src/nav/navSearch.ts +200 -0
  697. package/src/physics/boxSurface.ts +96 -0
  698. package/src/physics/colliderSurface.ts +213 -0
  699. package/src/physics/compositeSurface.ts +111 -0
  700. package/src/physics/heightSurface.ts +234 -0
  701. package/src/physics/ribbonSurface.ts +642 -0
  702. package/src/render/ambientOcclusionPass.ts +200 -0
  703. package/src/render/areaLights.ts +194 -0
  704. package/src/render/areaShadowSet.ts +405 -0
  705. package/src/render/atmosphere.ts +186 -0
  706. package/src/render/backend/api.ts +802 -0
  707. package/src/render/backend/budget.ts +139 -0
  708. package/src/render/backend/createRenderer.ts +343 -0
  709. package/src/render/backend/deadline.ts +37 -0
  710. package/src/render/backend/probe.ts +152 -0
  711. package/src/render/backend/select.ts +288 -0
  712. package/src/render/backend/timer.ts +59 -0
  713. package/src/render/backend/webgl2/instanced.ts +46 -0
  714. package/src/render/backend/webgl2/morphTexture.ts +58 -0
  715. package/src/render/backend/webgl2/renderer.ts +7484 -0
  716. package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
  717. package/src/render/backend/webgpu/boltPass.ts +205 -0
  718. package/src/render/backend/webgpu/buffers.ts +553 -0
  719. package/src/render/backend/webgpu/causticsPass.ts +174 -0
  720. package/src/render/backend/webgpu/clusterBinner.ts +259 -0
  721. package/src/render/backend/webgpu/depthPass.ts +261 -0
  722. package/src/render/backend/webgpu/device.ts +148 -0
  723. package/src/render/backend/webgpu/drawCommand.ts +79 -0
  724. package/src/render/backend/webgpu/environmentTexels.ts +96 -0
  725. package/src/render/backend/webgpu/filmPass.ts +123 -0
  726. package/src/render/backend/webgpu/flatPass.ts +635 -0
  727. package/src/render/backend/webgpu/flockPass.ts +163 -0
  728. package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
  729. package/src/render/backend/webgpu/insetPass.ts +123 -0
  730. package/src/render/backend/webgpu/instanced.ts +55 -0
  731. package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
  732. package/src/render/backend/webgpu/linePass.ts +270 -0
  733. package/src/render/backend/webgpu/morphTexture.ts +61 -0
  734. package/src/render/backend/webgpu/panelPass.ts +138 -0
  735. package/src/render/backend/webgpu/particlePass.ts +370 -0
  736. package/src/render/backend/webgpu/pipelineCache.ts +152 -0
  737. package/src/render/backend/webgpu/plumePass.ts +292 -0
  738. package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
  739. package/src/render/backend/webgpu/postPass.ts +470 -0
  740. package/src/render/backend/webgpu/probePass.ts +218 -0
  741. package/src/render/backend/webgpu/reflectionPass.ts +137 -0
  742. package/src/render/backend/webgpu/renderer.ts +13004 -0
  743. package/src/render/backend/webgpu/scatterPass.ts +354 -0
  744. package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
  745. package/src/render/backend/webgpu/shaderModules.ts +49 -0
  746. package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
  747. package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
  748. package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
  749. package/src/render/backend/webgpu/skyPass.ts +85 -0
  750. package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
  751. package/src/render/backend/webgpu/textPass.ts +224 -0
  752. package/src/render/backend/webgpu/uniformRing.ts +228 -0
  753. package/src/render/backend/webgpu/waterPass.ts +211 -0
  754. package/src/render/backend/webgpu/windStreakPass.ts +196 -0
  755. package/src/render/billboard.ts +108 -0
  756. package/src/render/bloomChain.ts +101 -0
  757. package/src/render/bloomPass.ts +256 -0
  758. package/src/render/boltBatch.ts +141 -0
  759. package/src/render/boltPool.ts +360 -0
  760. package/src/render/boom.ts +123 -0
  761. package/src/render/camera.ts +348 -0
  762. package/src/render/causticsRenderer.ts +171 -0
  763. package/src/render/cinematicCamera.ts +278 -0
  764. package/src/render/clusteredLights.ts +598 -0
  765. package/src/render/colourGrade.ts +109 -0
  766. package/src/render/compute.ts +83 -0
  767. package/src/render/contextLoss.ts +50 -0
  768. package/src/render/debugLines.ts +411 -0
  769. package/src/render/decalPass.ts +124 -0
  770. package/src/render/decalProjector.ts +390 -0
  771. package/src/render/decalQueue.ts +110 -0
  772. package/src/render/depthConvention.ts +383 -0
  773. package/src/render/drawingBuffer.ts +89 -0
  774. package/src/render/emptyTexture.ts +130 -0
  775. package/src/render/envProbeArray.ts +201 -0
  776. package/src/render/equirectToCube.ts +160 -0
  777. package/src/render/flockGeometry.ts +53 -0
  778. package/src/render/flockRenderer.ts +111 -0
  779. package/src/render/frame/arena.ts +93 -0
  780. package/src/render/frame/index.ts +29 -0
  781. package/src/render/frame/replay.ts +50 -0
  782. package/src/render/frame/resources.ts +61 -0
  783. package/src/render/frame/schedule.ts +85 -0
  784. package/src/render/frameView.ts +20 -0
  785. package/src/render/gizmo.ts +923 -0
  786. package/src/render/globalMedium.ts +154 -0
  787. package/src/render/globalMediumPass.ts +323 -0
  788. package/src/render/gpuCapability.ts +244 -0
  789. package/src/render/gpuTimer.ts +182 -0
  790. package/src/render/halfFloat.ts +39 -0
  791. package/src/render/handleRegistry.ts +96 -0
  792. package/src/render/iesProfile.ts +215 -0
  793. package/src/render/imageTexels.ts +109 -0
  794. package/src/render/instancedMesh.ts +187 -0
  795. package/src/render/instances.ts +92 -0
  796. package/src/render/lightBudget.ts +655 -0
  797. package/src/render/lightMatrix.ts +69 -0
  798. package/src/render/lightVolumeDraw.ts +216 -0
  799. package/src/render/lineBatch.ts +180 -0
  800. package/src/render/linePoints.ts +61 -0
  801. package/src/render/livePointShadowSet.ts +285 -0
  802. package/src/render/lod.ts +86 -0
  803. package/src/render/mesh.ts +536 -0
  804. package/src/render/occlusion.ts +406 -0
  805. package/src/render/oitPass.ts +230 -0
  806. package/src/render/orderIndependent.ts +136 -0
  807. package/src/render/particleBatch.ts +299 -0
  808. package/src/render/particleMaterial.ts +84 -0
  809. package/src/render/particlePool.ts +291 -0
  810. package/src/render/pass.ts +203 -0
  811. package/src/render/passTarget.ts +225 -0
  812. package/src/render/pickable.ts +222 -0
  813. package/src/render/planarReflection.ts +233 -0
  814. package/src/render/planarReflectionDraw.ts +87 -0
  815. package/src/render/plumeGeometry.ts +75 -0
  816. package/src/render/plumeMaterial.ts +99 -0
  817. package/src/render/plumeRenderer.ts +272 -0
  818. package/src/render/pointLightSelection.ts +447 -0
  819. package/src/render/pointShadowArray.ts +276 -0
  820. package/src/render/pointShadowBudget.ts +305 -0
  821. package/src/render/pointShadowImage.ts +470 -0
  822. package/src/render/pointShadowMap.ts +228 -0
  823. package/src/render/pointShadowSystem.ts +408 -0
  824. package/src/render/prefilterEnvMap.ts +162 -0
  825. package/src/render/prefilterPass.ts +115 -0
  826. package/src/render/probeGrid.ts +248 -0
  827. package/src/render/rainField.ts +240 -0
  828. package/src/render/reflectionProbe.ts +530 -0
  829. package/src/render/renderQuality.ts +1054 -0
  830. package/src/render/rendererHarness.ts +214 -0
  831. package/src/render/resolutionGovernor.ts +189 -0
  832. package/src/render/scatterDeform.ts +72 -0
  833. package/src/render/sceneTarget.ts +1032 -0
  834. package/src/render/screenSpaceReflection.ts +524 -0
  835. package/src/render/sdfFont.ts +157 -0
  836. package/src/render/sdfTextLayout.ts +206 -0
  837. package/src/render/sdfTextRenderer.ts +233 -0
  838. package/src/render/seaState.ts +55 -0
  839. package/src/render/segmentQuads.ts +92 -0
  840. package/src/render/shader.ts +190 -0
  841. package/src/render/shaders/ambientOcclusion.ts +354 -0
  842. package/src/render/shaders/arcane.ts +103 -0
  843. package/src/render/shaders/bloom.ts +232 -0
  844. package/src/render/shaders/bolt.ts +164 -0
  845. package/src/render/shaders/caustics.ts +169 -0
  846. package/src/render/shaders/conditionals.ts +58 -0
  847. package/src/render/shaders/decalProject.ts +127 -0
  848. package/src/render/shaders/depth.ts +131 -0
  849. package/src/render/shaders/depthOfField.ts +141 -0
  850. package/src/render/shaders/film.ts +285 -0
  851. package/src/render/shaders/fire.ts +180 -0
  852. package/src/render/shaders/flat/directionalShadow.ts +196 -0
  853. package/src/render/shaders/flat/index.ts +502 -0
  854. package/src/render/shaders/flat/lobes.ts +399 -0
  855. package/src/render/shaders/flat/main.ts +1631 -0
  856. package/src/render/shaders/flat/pointShadow.ts +323 -0
  857. package/src/render/shaders/flat/preamble.ts +875 -0
  858. package/src/render/shaders/flat/probeGrid.ts +152 -0
  859. package/src/render/shaders/flat/surface.ts +41 -0
  860. package/src/render/shaders/flock.ts +103 -0
  861. package/src/render/shaders/fog.ts +99 -0
  862. package/src/render/shaders/fullscreen.ts +28 -0
  863. package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
  864. package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
  865. package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
  866. package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
  867. package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
  868. package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
  869. package/src/render/shaders/generated/depth.wgsl.ts +142 -0
  870. package/src/render/shaders/generated/film.wgsl.ts +143 -0
  871. package/src/render/shaders/generated/fire.wgsl.ts +137 -0
  872. package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
  873. package/src/render/shaders/generated/flock.wgsl.ts +82 -0
  874. package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
  875. package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
  876. package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
  877. package/src/render/shaders/generated/line.wgsl.ts +137 -0
  878. package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
  879. package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
  880. package/src/render/shaders/generated/panel.wgsl.ts +57 -0
  881. package/src/render/shaders/generated/particle.wgsl.ts +343 -0
  882. package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
  883. package/src/render/shaders/generated/rush.wgsl.ts +139 -0
  884. package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
  885. package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
  886. package/src/render/shaders/generated/sky.wgsl.ts +109 -0
  887. package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
  888. package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
  889. package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
  890. package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
  891. package/src/render/shaders/generated/text.wgsl.ts +107 -0
  892. package/src/render/shaders/generated/water.wgsl.ts +256 -0
  893. package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
  894. package/src/render/shaders/gerstner.ts +110 -0
  895. package/src/render/shaders/globalMedium.ts +396 -0
  896. package/src/render/shaders/lightVolume.ts +546 -0
  897. package/src/render/shaders/line.ts +125 -0
  898. package/src/render/shaders/morph.ts +62 -0
  899. package/src/render/shaders/octahedral.ts +170 -0
  900. package/src/render/shaders/octahedralResolve.ts +83 -0
  901. package/src/render/shaders/oitResolve.ts +42 -0
  902. package/src/render/shaders/outputTransform.ts +107 -0
  903. package/src/render/shaders/panel.ts +51 -0
  904. package/src/render/shaders/particle.ts +438 -0
  905. package/src/render/shaders/prefilter.ts +278 -0
  906. package/src/render/shaders/rush.ts +357 -0
  907. package/src/render/shaders/scatter.ts +211 -0
  908. package/src/render/shaders/sdfText.ts +68 -0
  909. package/src/render/shaders/skinning.ts +59 -0
  910. package/src/render/shaders/sky.ts +243 -0
  911. package/src/render/shaders/smoke.ts +89 -0
  912. package/src/render/shaders/ssrResolve.ts +28 -0
  913. package/src/render/shaders/ssrTrace.ts +233 -0
  914. package/src/render/shaders/tangentFrame.ts +70 -0
  915. package/src/render/shaders/temporalResolve.ts +151 -0
  916. package/src/render/shaders/text.ts +156 -0
  917. package/src/render/shaders/vertexChannel.ts +71 -0
  918. package/src/render/shaders/water.ts +356 -0
  919. package/src/render/shaders/windStreaks.ts +130 -0
  920. package/src/render/shadowCasters.ts +124 -0
  921. package/src/render/shadowMap.ts +89 -0
  922. package/src/render/shotPlacement.ts +266 -0
  923. package/src/render/skinPalette.ts +157 -0
  924. package/src/render/ssrPass.ts +241 -0
  925. package/src/render/surfaceSheet.ts +158 -0
  926. package/src/render/surfaceTexture.ts +310 -0
  927. package/src/render/temporalAa.ts +221 -0
  928. package/src/render/temporalPass.ts +153 -0
  929. package/src/render/textLayout.ts +239 -0
  930. package/src/render/textRenderer.ts +201 -0
  931. package/src/render/thirdPersonCamera.ts +578 -0
  932. package/src/render/trample.ts +140 -0
  933. package/src/render/translucentQueue.ts +161 -0
  934. package/src/render/uniformVectorBudget.ts +246 -0
  935. package/src/render/uploadStep.ts +14 -0
  936. package/src/render/vertexDefaults.ts +115 -0
  937. package/src/render/visibility.ts +56 -0
  938. package/src/render/waterDraw.ts +167 -0
  939. package/src/render/waterGrid.ts +180 -0
  940. package/src/render/waterRenderer.ts +352 -0
  941. package/src/render/wind.ts +79 -0
  942. package/src/render/windField.ts +50 -0
  943. package/src/render/windStreakDraw.ts +131 -0
  944. package/src/render/windStreakRenderer.ts +130 -0
  945. package/src/scene/node.ts +336 -0
  946. package/src/scene/visit.ts +82 -0
  947. package/src/ui/clipMime.ts +109 -0
  948. package/src/ui/exportTarget.ts +491 -0
  949. package/src/ui/frameOverlay.ts +159 -0
  950. package/src/ui/framePacer.ts +351 -0
  951. package/src/ui/frameRecorder.ts +333 -0
  952. package/src/ui/fullscreen.ts +113 -0
  953. package/src/ui/pixelCursor.ts +99 -0
  954. package/src/ui/splash.ts +347 -0
  955. package/src/ui/stillFrame.ts +44 -0
@@ -0,0 +1,352 @@
1
+ /** Configurable two-zone mobile controls over raw touch input. */
2
+ import { InputSource } from './input.js';
3
+ import { classifyRightGesture, isTapRelease } from './rightGesture.js';
4
+ /**
5
+ * Second-zone touches beyond the first, and what they may do.
6
+ *
7
+ * The first thumb in the zone owns everything continuous: the look, and the
8
+ * held form of the primary. Anything after it owns only *edges* — a tap, a
9
+ * flick — because two fingers contributing look at once is one camera being
10
+ * dragged in two directions, which is a worse control than the one this fixes.
11
+ *
12
+ * They exist at all because the zone used to drop every touch after the first
13
+ * outright: a player steering through a corner could not jump out of it without
14
+ * letting go of the corner.
15
+ */
16
+ const EXTRA_SLOTS = 3;
17
+ const NO_TOUCH = -1;
18
+ /**
19
+ * A reusable mobile scheme: dynamic stick on the first zone; look plus a
20
+ * primary tap/hold and secondary downward swipe on the second. The class
21
+ * reports generic control state. A game decides whether those signals mean
22
+ * jump, fire, crouch, slide, or anything else.
23
+ */
24
+ export class TouchControls {
25
+ moveX = 0;
26
+ moveY = 0;
27
+ primaryHeld = false;
28
+ secondaryHeld = false;
29
+ onFirstTouch = null;
30
+ primaryQueued = false;
31
+ lookDx = 0;
32
+ lookDy = 0;
33
+ leftId = null;
34
+ rightId = null;
35
+ rightMode = 'pending';
36
+ rightLastX = 0;
37
+ rightLastY = 0;
38
+ /** Greatest distance the owning touch has reached from where it landed. */
39
+ rightTravel = 0;
40
+ rightStart = null;
41
+ firstTouchSeen = false;
42
+ /*
43
+ * The extra second-zone touches, as parallel fixed arrays: a touch event
44
+ * arrives as often as a frame does while a thumb is down, so nothing on this
45
+ * path may allocate.
46
+ */
47
+ extraIds = new Int32Array(EXTRA_SLOTS).fill(NO_TOUCH);
48
+ extraTravel = new Float32Array(EXTRA_SLOTS);
49
+ extraSliding = new Uint8Array(EXTRA_SLOTS);
50
+ /** Whether the owning touch is the one holding the secondary. */
51
+ ownerSliding = false;
52
+ stickBase;
53
+ stickNub;
54
+ surface;
55
+ splitRatio;
56
+ stickRadiusPx;
57
+ stickDeadzone;
58
+ gestureMovePx;
59
+ holdResolveMs;
60
+ tapMaxMs;
61
+ fireOnHold;
62
+ swipeMaxMs;
63
+ swipeDominance;
64
+ unsubscribe;
65
+ constructor(input, second = {}, third, fourth = {}) {
66
+ /*
67
+ * **A third argument means the positional form, and nothing about the second is inspected.**
68
+ *
69
+ * Sniffing the second argument was tried first and is wrong: `instanceof HTMLElement` needs a
70
+ * DOM constructor this package is checked without, and duck-typing on `nodeType` reads a
71
+ * stand-in element as an options object — which this file's own harness supplies, so the first
72
+ * version silently dropped every option a positional caller passed. The arity carries the
73
+ * answer without asking what anything is.
74
+ */
75
+ const positional = third !== undefined;
76
+ const options = positional ? fourth : second;
77
+ this.stickBase = positional ? second : (options.stickBase ?? null);
78
+ this.stickNub = positional ? (third ?? null) : (options.stickNub ?? null);
79
+ this.surface = input.target;
80
+ this.splitRatio = options.splitRatio ?? 0.5;
81
+ this.stickRadiusPx = options.stickRadiusPx ?? 40;
82
+ this.stickDeadzone = options.stickDeadzone ?? 0.12;
83
+ /*
84
+ * Twenty rather than fourteen: a thumb rolls a little as it lands, and at
85
+ * fourteen that roll turned a tap into a two-degree camera nudge. Nothing
86
+ * is lost at the start of a look, because the travel that resolves one is
87
+ * credited to it (see `onMove`).
88
+ */
89
+ this.gestureMovePx = options.gestureMovePx ?? 20;
90
+ this.holdResolveMs = options.holdResolveMs ?? 90;
91
+ this.tapMaxMs = options.tapMaxMs ?? 180;
92
+ this.fireOnHold = options.fireOnHold ?? false;
93
+ this.swipeMaxMs = options.swipeMaxMs ?? 160;
94
+ this.swipeDominance = options.swipeDominance ?? 2.4;
95
+ this.validateOptions();
96
+ this.unsubscribe = input.subscribe({
97
+ onTouchStart: (touch) => this.onStart(touch),
98
+ onTouchMove: (touch) => this.onMove(touch),
99
+ onTouchEnd: (touch, durationMs) => this.onEnd(touch, durationMs),
100
+ });
101
+ }
102
+ /** Resolve a still second-zone touch into the generic primary hold. */
103
+ tick(nowMs) {
104
+ const start = this.rightStart;
105
+ if (this.rightMode !== 'pending' || start === null)
106
+ return;
107
+ if (nowMs - start.startTime >= this.holdResolveMs) {
108
+ // Held, not fired: see `fireOnHold`. A motionless thumb is somebody deciding
109
+ // where to look, and firing under it is the bug this exists to prevent.
110
+ if (this.fireOnHold)
111
+ this.primaryQueued = true;
112
+ this.primaryHeld = true;
113
+ this.rightMode = 'primary-hold';
114
+ }
115
+ }
116
+ /** Consume the primary edge exactly once. */
117
+ consumePrimaryPress() {
118
+ const queued = this.primaryQueued;
119
+ this.primaryQueued = false;
120
+ return queued;
121
+ }
122
+ /** Drain accumulated second-zone look motion into a caller-owned object. */
123
+ consumeLook(out) {
124
+ out.dx = this.lookDx;
125
+ out.dy = this.lookDy;
126
+ this.lookDx = 0;
127
+ this.lookDy = 0;
128
+ }
129
+ dispose() {
130
+ this.unsubscribe();
131
+ if (this.stickBase !== null)
132
+ this.stickBase.hidden = true;
133
+ this.moveX = 0;
134
+ this.moveY = 0;
135
+ this.primaryHeld = false;
136
+ this.secondaryHeld = false;
137
+ this.ownerSliding = false;
138
+ this.extraIds.fill(NO_TOUCH);
139
+ this.extraSliding.fill(0);
140
+ }
141
+ onStart(touch) {
142
+ if (!this.firstTouchSeen) {
143
+ this.firstTouchSeen = true;
144
+ this.onFirstTouch?.();
145
+ }
146
+ const bounds = this.surface.getBoundingClientRect();
147
+ const splitX = bounds.left + bounds.width * this.splitRatio;
148
+ if (touch.startX < splitX) {
149
+ if (this.leftId !== null)
150
+ return;
151
+ this.leftId = touch.id;
152
+ this.showStick(touch.startX, touch.startY);
153
+ return;
154
+ }
155
+ if (this.rightId !== null) {
156
+ this.claimExtra(touch.id);
157
+ return;
158
+ }
159
+ this.rightId = touch.id;
160
+ this.rightMode = 'pending';
161
+ this.rightStart = touch;
162
+ this.rightTravel = 0;
163
+ this.rightLastX = touch.x;
164
+ this.rightLastY = touch.y;
165
+ }
166
+ onMove(touch) {
167
+ if (touch.id === this.leftId) {
168
+ this.updateStick(touch);
169
+ return;
170
+ }
171
+ if (touch.id !== this.rightId) {
172
+ this.moveExtra(touch);
173
+ return;
174
+ }
175
+ const dx = touch.x - touch.startX;
176
+ const dy = touch.y - touch.startY;
177
+ this.rightTravel = Math.max(this.rightTravel, Math.hypot(dx, dy));
178
+ if (this.rightMode === 'pending') {
179
+ const gesture = this.classify(touch, dx, dy);
180
+ if (gesture === 'secondary') {
181
+ this.rightMode = 'secondary';
182
+ this.ownerSliding = true;
183
+ this.secondaryHeld = true;
184
+ }
185
+ else if (gesture === 'look') {
186
+ this.rightMode = 'look';
187
+ /*
188
+ * Credit the travel that resolved the gesture. Starting the count from
189
+ * here instead threw away the first dozen pixels of every drag, which
190
+ * is a dead zone at the start of each look and reads as the camera
191
+ * being slow to respond rather than as an input being dropped.
192
+ */
193
+ this.lookDx += dx;
194
+ this.lookDy += dy;
195
+ this.rightLastX = touch.x;
196
+ this.rightLastY = touch.y;
197
+ }
198
+ }
199
+ else if (this.rightMode === 'look' || this.rightMode === 'primary-hold') {
200
+ /*
201
+ * A held thumb still looks, and keeps holding while it does.
202
+ *
203
+ * The hold used to be a terminal state: once a motionless touch resolved
204
+ * into it, the same thumb could no longer move the camera for the rest of
205
+ * its life. That is the wrong half of the input to freeze — the held form
206
+ * is for verbs that last (a glide), and a verb that lasts is exactly the
207
+ * one you need to steer through.
208
+ */
209
+ this.lookDx += touch.x - this.rightLastX;
210
+ this.lookDy += touch.y - this.rightLastY;
211
+ }
212
+ this.rightLastX = touch.x;
213
+ this.rightLastY = touch.y;
214
+ }
215
+ onEnd(touch, durationMs) {
216
+ if (touch.id === this.leftId) {
217
+ this.leftId = null;
218
+ this.moveX = 0;
219
+ this.moveY = 0;
220
+ if (this.stickBase !== null)
221
+ this.stickBase.hidden = true;
222
+ return;
223
+ }
224
+ if (touch.id !== this.rightId) {
225
+ this.endExtra(touch, durationMs);
226
+ return;
227
+ }
228
+ /*
229
+ * `primary-hold` counts as a tap here, and that is the fix. It is the state
230
+ * a still thumb is promoted into after `holdResolveMs`, so the old test —
231
+ * fire only from `pending` — threw away every tap slower than 90 ms, which
232
+ * on a phone is most of them. `isTapRelease` decides on travel and duration
233
+ * instead, which is what a tap actually is.
234
+ */
235
+ if ((this.rightMode === 'pending' || this.rightMode === 'primary-hold') &&
236
+ this.isTap(this.rightTravel, durationMs)) {
237
+ this.primaryQueued = true;
238
+ }
239
+ if (this.rightMode === 'secondary') {
240
+ this.ownerSliding = false;
241
+ this.refreshSecondary();
242
+ }
243
+ if (this.rightMode === 'primary-hold')
244
+ this.primaryHeld = false;
245
+ this.rightId = null;
246
+ this.rightStart = null;
247
+ this.rightMode = 'pending';
248
+ this.rightTravel = 0;
249
+ }
250
+ claimExtra(id) {
251
+ for (let i = 0; i < EXTRA_SLOTS; i++) {
252
+ if (this.extraIds[i] !== NO_TOUCH)
253
+ continue;
254
+ this.extraIds[i] = id;
255
+ this.extraTravel[i] = 0;
256
+ this.extraSliding[i] = 0;
257
+ return;
258
+ }
259
+ }
260
+ extraSlot(id) {
261
+ for (let i = 0; i < EXTRA_SLOTS; i++) {
262
+ if (this.extraIds[i] === id)
263
+ return i;
264
+ }
265
+ return -1;
266
+ }
267
+ moveExtra(touch) {
268
+ const slot = this.extraSlot(touch.id);
269
+ if (slot < 0)
270
+ return;
271
+ const dx = touch.x - touch.startX;
272
+ const dy = touch.y - touch.startY;
273
+ this.extraTravel[slot] = Math.max(this.extraTravel[slot] ?? 0, Math.hypot(dx, dy));
274
+ // A flick still reads as one from any finger. A drag does not become a
275
+ // look: the owning thumb has the camera, and a second one joining it would
276
+ // make every two-thumb frame a fight over the same axis.
277
+ if (this.extraSliding[slot] === 0 && this.classify(touch, dx, dy) === 'secondary') {
278
+ this.extraSliding[slot] = 1;
279
+ this.secondaryHeld = true;
280
+ }
281
+ }
282
+ endExtra(touch, durationMs) {
283
+ const slot = this.extraSlot(touch.id);
284
+ if (slot < 0)
285
+ return;
286
+ if (this.isTap(this.extraTravel[slot] ?? 0, durationMs))
287
+ this.primaryQueued = true;
288
+ this.extraIds[slot] = NO_TOUCH;
289
+ this.extraSliding[slot] = 0;
290
+ this.refreshSecondary();
291
+ }
292
+ /** The secondary is held while *any* touch in the zone is holding it. */
293
+ refreshSecondary() {
294
+ let held = this.ownerSliding;
295
+ for (let i = 0; i < EXTRA_SLOTS && !held; i++)
296
+ held = this.extraSliding[i] === 1;
297
+ this.secondaryHeld = held;
298
+ }
299
+ classify(touch, dx, dy) {
300
+ return classifyRightGesture(dx, dy, performance.now() - touch.startTime, {
301
+ gestureMovePx: this.gestureMovePx,
302
+ swipeMaxMs: this.swipeMaxMs,
303
+ swipeDominance: this.swipeDominance,
304
+ });
305
+ }
306
+ isTap(travelPx, durationMs) {
307
+ return isTapRelease(travelPx, durationMs, {
308
+ gestureMovePx: this.gestureMovePx,
309
+ tapMaxMs: this.tapMaxMs,
310
+ });
311
+ }
312
+ showStick(x, y) {
313
+ if (this.stickBase !== null) {
314
+ this.stickBase.style.left = `${x}px`;
315
+ this.stickBase.style.top = `${y}px`;
316
+ this.stickBase.hidden = false;
317
+ }
318
+ if (this.stickNub !== null)
319
+ this.stickNub.style.transform = 'translate3d(0, 0, 0)';
320
+ }
321
+ updateStick(touch) {
322
+ const dx = touch.x - touch.startX;
323
+ const dy = touch.y - touch.startY;
324
+ const length = Math.hypot(dx, dy);
325
+ const strength = Math.min(length / this.stickRadiusPx, 1);
326
+ if (strength < this.stickDeadzone || length < 1e-6) {
327
+ this.moveX = 0;
328
+ this.moveY = 0;
329
+ }
330
+ else {
331
+ this.moveX = (dx / length) * strength;
332
+ this.moveY = (-dy / length) * strength;
333
+ }
334
+ const clampedLength = Math.min(length, this.stickRadiusPx);
335
+ const nx = length > 1e-6 ? (dx / length) * clampedLength : 0;
336
+ const ny = length > 1e-6 ? (dy / length) * clampedLength : 0;
337
+ if (this.stickNub !== null) {
338
+ this.stickNub.style.transform = `translate3d(${nx}px, ${ny}px, 0)`;
339
+ }
340
+ }
341
+ validateOptions() {
342
+ if (this.splitRatio <= 0 || this.splitRatio >= 1) {
343
+ throw new Error(`TouchControls.splitRatio must be between 0 and 1, got ${this.splitRatio}`);
344
+ }
345
+ if (this.stickRadiusPx <= 0) {
346
+ throw new Error(`TouchControls.stickRadiusPx must be positive, got ${this.stickRadiusPx}`);
347
+ }
348
+ if (this.stickDeadzone < 0 || this.stickDeadzone >= 1) {
349
+ throw new Error(`TouchControls.stickDeadzone must be in [0, 1), got ${this.stickDeadzone}`);
350
+ }
351
+ }
352
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `INPUT` covers buttons and checkboxes too, which do not take text — but a Space on a
3
+ * focused button is the browser's own "press it", so leaving those alone is right for
4
+ * the same reason.
5
+ */
6
+ export declare function isTypingTarget(target: EventTarget | null): boolean;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Whether the keystroke belongs to a text field rather than to the game.
3
+ *
4
+ * An input layer that swallows keys while somebody is typing is a text field that
5
+ * silently drops characters. A consumer found this the hard way: it asks for
6
+ * `Space`, `KeyE` and the arrows to be `preventDefault`ed — reasonably, since Space
7
+ * scrolls the page and the arrows move it — and a player writing a bug report could
8
+ * not type a space, an `e`, or move the caret.
9
+ *
10
+ * Game-agnostic and deliberately conservative: it asks what the event is *for*, not
11
+ * what the game wants. A consumer that genuinely wants keys while a field has focus
12
+ * can read `keys` directly; nothing here stops that.
13
+ */
14
+ const TYPING_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);
15
+ /**
16
+ * `INPUT` covers buttons and checkboxes too, which do not take text — but a Space on a
17
+ * focused button is the browser's own "press it", so leaving those alone is right for
18
+ * the same reason.
19
+ */
20
+ export function isTypingTarget(target) {
21
+ if (target === null)
22
+ return false;
23
+ const element = target;
24
+ if (typeof element.tagName === 'string' && TYPING_TAGS.has(element.tagName))
25
+ return true;
26
+ return element.isContentEditable === true;
27
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * How big a piece of geometry is, and where it sits.
3
+ *
4
+ * **Nothing in this engine knew either until now**, which is why there has never been a frustum
5
+ * test: a renderer cannot decide whether a mesh is on screen without knowing what part of space
6
+ * it occupies. `CAPABILITIES.md` recorded the consequence — no draw culling at all, only backface
7
+ * — and every track on the roadmap that wants culling, level of detail, a broadphase or a
8
+ * bounding gizmo wants this object first.
9
+ *
10
+ * Both a box and a sphere, because the two answer different questions cheaply. A sphere survives
11
+ * an arbitrary transform as a sphere, which makes it the right shape for a per-draw visibility
12
+ * test; a box is tighter and is what a physics broadphase and an editor's selection want.
13
+ */
14
+ export interface Bounds {
15
+ /** The axis-aligned box, in the geometry's own space. */
16
+ readonly min: Float32Array;
17
+ readonly max: Float32Array;
18
+ /** The box's midpoint, which is what the radius is measured from. */
19
+ readonly centre: Float32Array;
20
+ /** The furthest vertex from `centre`. See `boundsOfPositions` for why not half the diagonal. */
21
+ radius: number;
22
+ }
23
+ export declare function createBounds(): Bounds;
24
+ /**
25
+ * Measure a vertex array, into bounds the caller owns.
26
+ *
27
+ * **Two passes, and the second one is the point.** The first finds the box; the second finds the
28
+ * furthest vertex from the box's midpoint. Half the diagonal would be one pass and would be the
29
+ * box's circumradius — right for a box, and loose for anything rounded, which is most geometry.
30
+ * A sphere that reaches the corners of a box the geometry never visits answers every test too
31
+ * generously, and the cost is a second walk of an array that is already in cache.
32
+ *
33
+ * **Measured about the box's centre and never about the origin.** A mesh modelled a kilometre
34
+ * from the origin gets a kilometre-wide sphere the other way, and culls nothing for the rest of
35
+ * its life.
36
+ *
37
+ * Allocates nothing: `out` is the caller's and is returned for convenience.
38
+ */
39
+ export declare function boundsOfPositions(positions: Float32Array, out: Bounds): Bounds;
40
+ /**
41
+ * Bounds for a box the caller names itself, into bounds the caller owns.
42
+ *
43
+ * **`boundsOfPositions` was the only way to make one of these, and it demands a vertex array.**
44
+ * A consumer that wants to ask the renderer about a region rather than about a mesh — a streamed
45
+ * world testing its squares, a trigger volume, a room — has no vertices to hand it, so making the
46
+ * object meant filling `centre` and `radius` by hand and getting the sphere's invariant right. A
47
+ * consumer measured what that costs: with one mesh per material per square, a two-kilometre ring
48
+ * is 1,618 draws it walks one at a time, where the world itself knows 68 squares it could have
49
+ * tested instead.
50
+ *
51
+ * **Here the radius *is* half the diagonal**, which is the opposite of what `boundsOfPositions`
52
+ * does and is right for the same reason. That function measures the furthest actual vertex,
53
+ * because a mesh's corners are usually empty; a named box has no vertices and its corners are
54
+ * exactly the points it promises to contain, so anything tighter would report a region as off
55
+ * screen while part of it is on.
56
+ *
57
+ * Degenerate is allowed: a flat square gives a real box and a real radius, and a caller that
58
+ * passes a max below a min gets those values back rather than a silent swap — the box it asked
59
+ * for is the box it gets, and an inverted one is a bug at the call site.
60
+ */
61
+ export declare function boundsOfBox(minX: number, minY: number, minZ: number, maxX: number, maxY: number, maxZ: number, out: Bounds): Bounds;
@@ -0,0 +1,121 @@
1
+ export function createBounds() {
2
+ return {
3
+ min: new Float32Array(3),
4
+ max: new Float32Array(3),
5
+ centre: new Float32Array(3),
6
+ radius: 0,
7
+ };
8
+ }
9
+ /**
10
+ * Measure a vertex array, into bounds the caller owns.
11
+ *
12
+ * **Two passes, and the second one is the point.** The first finds the box; the second finds the
13
+ * furthest vertex from the box's midpoint. Half the diagonal would be one pass and would be the
14
+ * box's circumradius — right for a box, and loose for anything rounded, which is most geometry.
15
+ * A sphere that reaches the corners of a box the geometry never visits answers every test too
16
+ * generously, and the cost is a second walk of an array that is already in cache.
17
+ *
18
+ * **Measured about the box's centre and never about the origin.** A mesh modelled a kilometre
19
+ * from the origin gets a kilometre-wide sphere the other way, and culls nothing for the rest of
20
+ * its life.
21
+ *
22
+ * Allocates nothing: `out` is the caller's and is returned for convenience.
23
+ */
24
+ export function boundsOfPositions(positions, out) {
25
+ /* Whole vertices only. A trailing partial one has no third component and cannot be placed;
26
+ reading it as a zero would drag the box to the origin. */
27
+ const vertices = Math.floor(positions.length / 3);
28
+ if (vertices === 0) {
29
+ out.min.fill(0);
30
+ out.max.fill(0);
31
+ out.centre.fill(0);
32
+ out.radius = 0;
33
+ return out;
34
+ }
35
+ let minX = Infinity;
36
+ let minY = Infinity;
37
+ let minZ = Infinity;
38
+ let maxX = -Infinity;
39
+ let maxY = -Infinity;
40
+ let maxZ = -Infinity;
41
+ for (let i = 0; i < vertices; i += 1) {
42
+ const x = positions[i * 3] ?? 0;
43
+ const y = positions[i * 3 + 1] ?? 0;
44
+ const z = positions[i * 3 + 2] ?? 0;
45
+ if (x < minX)
46
+ minX = x;
47
+ if (y < minY)
48
+ minY = y;
49
+ if (z < minZ)
50
+ minZ = z;
51
+ if (x > maxX)
52
+ maxX = x;
53
+ if (y > maxY)
54
+ maxY = y;
55
+ if (z > maxZ)
56
+ maxZ = z;
57
+ }
58
+ out.min[0] = minX;
59
+ out.min[1] = minY;
60
+ out.min[2] = minZ;
61
+ out.max[0] = maxX;
62
+ out.max[1] = maxY;
63
+ out.max[2] = maxZ;
64
+ const cx = (minX + maxX) * 0.5;
65
+ const cy = (minY + maxY) * 0.5;
66
+ const cz = (minZ + maxZ) * 0.5;
67
+ out.centre[0] = cx;
68
+ out.centre[1] = cy;
69
+ out.centre[2] = cz;
70
+ let furthest = 0;
71
+ for (let i = 0; i < vertices; i += 1) {
72
+ const dx = (positions[i * 3] ?? 0) - cx;
73
+ const dy = (positions[i * 3 + 1] ?? 0) - cy;
74
+ const dz = (positions[i * 3 + 2] ?? 0) - cz;
75
+ const squared = dx * dx + dy * dy + dz * dz;
76
+ if (squared > furthest)
77
+ furthest = squared;
78
+ }
79
+ out.radius = Math.sqrt(furthest);
80
+ return out;
81
+ }
82
+ /**
83
+ * Bounds for a box the caller names itself, into bounds the caller owns.
84
+ *
85
+ * **`boundsOfPositions` was the only way to make one of these, and it demands a vertex array.**
86
+ * A consumer that wants to ask the renderer about a region rather than about a mesh — a streamed
87
+ * world testing its squares, a trigger volume, a room — has no vertices to hand it, so making the
88
+ * object meant filling `centre` and `radius` by hand and getting the sphere's invariant right. A
89
+ * consumer measured what that costs: with one mesh per material per square, a two-kilometre ring
90
+ * is 1,618 draws it walks one at a time, where the world itself knows 68 squares it could have
91
+ * tested instead.
92
+ *
93
+ * **Here the radius *is* half the diagonal**, which is the opposite of what `boundsOfPositions`
94
+ * does and is right for the same reason. That function measures the furthest actual vertex,
95
+ * because a mesh's corners are usually empty; a named box has no vertices and its corners are
96
+ * exactly the points it promises to contain, so anything tighter would report a region as off
97
+ * screen while part of it is on.
98
+ *
99
+ * Degenerate is allowed: a flat square gives a real box and a real radius, and a caller that
100
+ * passes a max below a min gets those values back rather than a silent swap — the box it asked
101
+ * for is the box it gets, and an inverted one is a bug at the call site.
102
+ */
103
+ export function boundsOfBox(minX, minY, minZ, maxX, maxY, maxZ, out) {
104
+ out.min[0] = minX;
105
+ out.min[1] = minY;
106
+ out.min[2] = minZ;
107
+ out.max[0] = maxX;
108
+ out.max[1] = maxY;
109
+ out.max[2] = maxZ;
110
+ const cx = (minX + maxX) * 0.5;
111
+ const cy = (minY + maxY) * 0.5;
112
+ const cz = (minZ + maxZ) * 0.5;
113
+ out.centre[0] = cx;
114
+ out.centre[1] = cy;
115
+ out.centre[2] = cz;
116
+ const dx = maxX - cx;
117
+ const dy = maxY - cy;
118
+ const dz = maxZ - cz;
119
+ out.radius = Math.sqrt(dx * dx + dy * dy + dz * dz);
120
+ return out;
121
+ }
@@ -0,0 +1,8 @@
1
+ /** RGB triplet, each channel in [0, 1]. Mutable tuple for direct uniform upload. */
2
+ export type Vec3 = [number, number, number];
3
+ /** hue in degrees (any range), saturation/lightness in [0, 1]. */
4
+ export declare function hslToRgb(hue: number, saturation: number, lightness: number): Vec3;
5
+ export declare function mixColor(a: Vec3, b: Vec3, t: number): Vec3;
6
+ /** In-place `mixColor` for per-frame use — allocating here would be a hot-path bug. */
7
+ export declare function mixColorInto(out: Vec3, a: Vec3, b: Vec3, t: number): void;
8
+ export declare function scaleColor(color: Vec3, factor: number): Vec3;
@@ -0,0 +1,35 @@
1
+ /** hue in degrees (any range), saturation/lightness in [0, 1]. */
2
+ export function hslToRgb(hue, saturation, lightness) {
3
+ const h = ((hue % 360) + 360) % 360;
4
+ const c = (1 - Math.abs(2 * lightness - 1)) * saturation;
5
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
6
+ const m = lightness - c / 2;
7
+ let r = 0;
8
+ let g = 0;
9
+ let b = 0;
10
+ if (h < 60)
11
+ [r, g, b] = [c, x, 0];
12
+ else if (h < 120)
13
+ [r, g, b] = [x, c, 0];
14
+ else if (h < 180)
15
+ [r, g, b] = [0, c, x];
16
+ else if (h < 240)
17
+ [r, g, b] = [0, x, c];
18
+ else if (h < 300)
19
+ [r, g, b] = [x, 0, c];
20
+ else
21
+ [r, g, b] = [c, 0, x];
22
+ return [r + m, g + m, b + m];
23
+ }
24
+ export function mixColor(a, b, t) {
25
+ return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t, a[2] + (b[2] - a[2]) * t];
26
+ }
27
+ /** In-place `mixColor` for per-frame use — allocating here would be a hot-path bug. */
28
+ export function mixColorInto(out, a, b, t) {
29
+ out[0] = a[0] + (b[0] - a[0]) * t;
30
+ out[1] = a[1] + (b[1] - a[1]) * t;
31
+ out[2] = a[2] + (b[2] - a[2]) * t;
32
+ }
33
+ export function scaleColor(color, factor) {
34
+ return [color[0] * factor, color[1] * factor, color[2] * factor];
35
+ }
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Transcendentals that give the same bits on every JavaScript engine.
3
+ *
4
+ * **Not more accurate than `Math`, and that is not what they are for.** These are within a couple
5
+ * of units in the last place of correctly rounded, which is about what a platform `sin` gives you.
6
+ * What they are is *reproducible*: ECMAScript declines to specify `sin`, `cos`, `exp`, `acos` and
7
+ * eighteen more, so two engines may differ by an ulp, and an ulp is enough to make two peers running
8
+ * the same simulation disagree — first invisibly, then completely.
9
+ *
10
+ * `scripts/determinism.mjs` is the gate that refuses the unspecified ones inside the simulation set
11
+ * and names the twenty-two. Its header carries the other half of the argument: `+ - * /` are IEEE
12
+ * 754 operations by specification, JavaScript permits no fused-multiply-add contraction, and
13
+ * `Math.sqrt` is required correctly rounded and is *not* on that list. **So everything below uses
14
+ * only those five operations**, which is the whole design: reproducibility by construction rather
15
+ * than by hoping two engines chose the same algorithm.
16
+ *
17
+ * ---
18
+ *
19
+ * ## What is here, and what is deliberately not
20
+ *
21
+ * `exactSin`, `exactCos`, `exactExp`, `exactAcos`. Four, because four is what the engine and its
22
+ * first consumer actually reach for: the terrain binding's slope angle needs `acos`, a lockstep
23
+ * fixture rotating anything needs `sin` and `cos`, and exponential decay needs `exp`.
24
+ *
25
+ * **`atan2` is absent.** It is the obvious fifth and nothing here needs one: `shape.ts` sorts by a
26
+ * comparison key computed from two in-plane axes rather than by an angle, and `joints.ts` compares
27
+ * a quaternion component against a half-angle's sine. *Reversed by* a site that genuinely needs a
28
+ * signed angle from two components, at which point it arrives with its own golden vectors.
29
+ *
30
+ * ## Nothing in core imports these
31
+ *
32
+ * Deliberately. `core-only` is the one size figure in this repository that every consumer pays, and
33
+ * a module reachable from `createRenderer` is in it whether anybody calls it or not. These are
34
+ * reached by the script bindings and by consumers who ask for them, so tree-shaking keeps them out
35
+ * of a bundle that does not, which is measured rather than assumed.
36
+ *
37
+ * ## The coefficients
38
+ *
39
+ * The polynomial and rational coefficients are fdlibm's, which is the ancestor of most platform
40
+ * libms and is public domain. They are written as literals: **a literal is the same number on
41
+ * every engine, which is the only property being bought.** Their provenance matters less than their
42
+ * fixity — a coefficient somebody re-derived to one more digit is a different function, and
43
+ * `exact.test.ts`'s golden bit patterns are what would catch that.
44
+ */
45
+ /** `Math.sin`, reproducibly. NaN in, NaN out; an infinity answers NaN, as `Math.sin` does. */
46
+ export declare function exactSin(x: number): number;
47
+ /** `Math.cos`, reproducibly. */
48
+ export declare function exactCos(x: number): number;
49
+ /**
50
+ * `Math.exp`, reproducibly.
51
+ *
52
+ * Reduce by a multiple of ln 2 into [-ln2/2, ln2/2], sum the Taylor series there, and scale by a
53
+ * power of two. **A degree-14 series and not a shorter minimax**, because on that interval the
54
+ * fifteenth term is about 4e-20 — below the precision of a double — so the series is exact to the
55
+ * representation and there is nothing a fitted polynomial would buy.
56
+ */
57
+ export declare function exactExp(x: number): number;
58
+ /**
59
+ * `Math.acos`, reproducibly. Outside [-1, 1] this answers NaN, as `Math.acos` does.
60
+ *
61
+ * Three branches rather than one, and the split at ±0.5 is the reason it is accurate near the ends:
62
+ * `acos` has infinite derivative at ±1, so a polynomial in `x` loses its footing there. Substituting
63
+ * `s = sqrt((1 ∓ x)/2)` moves the awkward point to zero, where a polynomial is comfortable — which
64
+ * is also why `sqrt` being exactly rounded matters here rather than being a convenience.
65
+ */
66
+ export declare function exactAcos(x: number): number;