leaflet-city-mapper 0.1.0 → 0.1.1

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 (515) hide show
  1. package/README.md +1 -1
  2. package/dist/leaflet-city-mapper-src.js.map +1 -1
  3. package/dist/leaflet-city-mapper-worker-src.js.map +1 -1
  4. package/dist/leaflet-city-mapper-worker.js.map +1 -1
  5. package/dist/leaflet-city-mapper.js.map +1 -1
  6. package/libs/leaflet-lens.js +151 -151
  7. package/libs/leaflet.js +3 -3
  8. package/libs/openlayers-bindings.js +1129 -1129
  9. package/libs/openlayers-bindings.min.js.map +1 -1
  10. package/package.json +2 -4
  11. package/src/animations/cancelCameraAnimation.js +19 -19
  12. package/src/animations/mapStopPitchBearingAnimation.js +10 -10
  13. package/src/animations/scheduleCameraAnimation.js +15 -15
  14. package/src/animations/scheduleMarkerPan.js +14 -14
  15. package/src/animations/updateZoomCamera.js +25 -25
  16. package/src/archives/findDirectoryEntry.js +17 -17
  17. package/src/archives/findTile.js +45 -45
  18. package/src/archives/getDirectoryEntries.js +30 -30
  19. package/src/archives/getTileData.js +26 -26
  20. package/src/archives/readArchiveRange.js +48 -48
  21. package/src/astronomy/solarTime.js +21 -21
  22. package/src/camera/cameraMapReady.js +9 -9
  23. package/src/camera/cleanupCameraMap.js +13 -13
  24. package/src/camera/constrainCameraToBounds.js +3 -3
  25. package/src/camera/createSceneCamera.js +25 -25
  26. package/src/camera/getBearing.js +10 -10
  27. package/src/camera/getPitch.js +10 -10
  28. package/src/camera/mapGetBoundsCenterZoom.js +14 -14
  29. package/src/camera/mapLimitOffset.js +17 -17
  30. package/src/camera/mapPanBy.js +14 -14
  31. package/src/camera/setBearing.js +13 -13
  32. package/src/camera/setPitch.js +13 -13
  33. package/src/cog/decodeCogTile.js +37 -37
  34. package/src/cog/finiteCogValues.js +12 -12
  35. package/src/cog/getCogAssetEntry.js +26 -26
  36. package/src/cog/getCogBase.js +22 -22
  37. package/src/cog/getCogHeader.js +10 -10
  38. package/src/cog/getCogProfile.js +25 -25
  39. package/src/cog/getCogTile.js +25 -25
  40. package/src/cog/getColorTile.js +38 -38
  41. package/src/cog/getElevationTile.js +29 -29
  42. package/src/cog/hasCogProjection.js +16 -16
  43. package/src/cog/initCog.js +13 -13
  44. package/src/cog/invalidCogFullResponse.js +10 -10
  45. package/src/cog/openCog.js +40 -40
  46. package/src/cog/openCogAsset.js +22 -22
  47. package/src/cog/readCog.js +39 -39
  48. package/src/cog/readCogBlock.js +19 -19
  49. package/src/cog/readCogBody.js +30 -30
  50. package/src/cog/readCogDirectories.js +32 -32
  51. package/src/cog/readCogDirectory.js +34 -34
  52. package/src/cog/readCogLevel.js +36 -36
  53. package/src/cog/readCogTag.js +28 -28
  54. package/src/cog/validCogDimensions.js +15 -15
  55. package/src/cog/validCogEncoding.js +18 -18
  56. package/src/cog/validCogGeoArrays.js +17 -17
  57. package/src/cog/validCogGrid.js +22 -22
  58. package/src/cog/validCogTileCoordinates.js +13 -13
  59. package/src/cog/validateCogContainer.js +17 -17
  60. package/src/cog/validateCogContentRange.js +18 -18
  61. package/src/cog/validateCogOffsets.js +19 -19
  62. package/src/cog/validateCogRange.js +16 -16
  63. package/src/cog/validateCogResponse.js +26 -26
  64. package/src/collision/collectIntersections.js +41 -41
  65. package/src/collision/hiddenLightHit.js +19 -19
  66. package/src/collision/indexTriangle.js +18 -18
  67. package/src/collision/insideMesh.js +47 -47
  68. package/src/collision/insideWalker.js +52 -52
  69. package/src/collision/intersectMeshes.js +40 -40
  70. package/src/collision/localRay.js +31 -31
  71. package/src/collision/mergeHits.js +19 -19
  72. package/src/collision/rayBounds.js +28 -28
  73. package/src/collision/readTriangle.js +32 -32
  74. package/src/collision/trafficCollision.js +23 -23
  75. package/src/collision/transformTriangle.js +18 -18
  76. package/src/collision/triangleDistance.js +34 -34
  77. package/src/collision/vertexCount.js +11 -11
  78. package/src/collision/worldHit.js +30 -30
  79. package/src/controls/acceptPitchDrag.js +10 -10
  80. package/src/controls/acceptRotateDrag.js +9 -9
  81. package/src/controls/addCameraHandler.js +18 -18
  82. package/src/controls/adjustCameraDrag.js +13 -13
  83. package/src/controls/cameraDragContextMenu.js +12 -12
  84. package/src/controls/cameraDragEnd.js +10 -10
  85. package/src/controls/cameraDragMove.js +31 -31
  86. package/src/controls/changeCameraTouch.js +17 -17
  87. package/src/controls/compassOrientation.js +12 -12
  88. package/src/controls/compassRemoveHooks.js +2 -2
  89. package/src/controls/containerResizeRemoveHooks.js +2 -2
  90. package/src/controls/endCameraTouch.js +18 -18
  91. package/src/controls/failCompassPermission.js +10 -10
  92. package/src/controls/finishCameraDrag.js +14 -14
  93. package/src/controls/finishCompassPermission.js +24 -24
  94. package/src/controls/isEditableTarget.js +9 -9
  95. package/src/controls/loadCameraControls.js +18 -18
  96. package/src/controls/moveCameraTouch.js +34 -34
  97. package/src/controls/refreshRotateFocus.js +5 -5
  98. package/src/controls/removeCameraDrag.js +28 -28
  99. package/src/controls/resizeMap.js +7 -7
  100. package/src/controls/rotateButtonClick.js +16 -16
  101. package/src/controls/rotateButtonKeydown.js +20 -20
  102. package/src/controls/rotateControl.js +12 -12
  103. package/src/controls/shiftRotateRemoveHooks.js +2 -2
  104. package/src/controls/shiftRotateWheel.js +15 -15
  105. package/src/core/cameraMarkerOnDrag.js +16 -16
  106. package/src/core/constructLayer.js +16 -16
  107. package/src/core/extendLeafletClass.js +12 -12
  108. package/src/core/extendTerrainPixelBounds.js +41 -41
  109. package/src/core/layerAddInitHook.js +12 -12
  110. package/src/core/layerMergeOptions.js +14 -14
  111. package/src/core/markerInitInteraction.js +10 -10
  112. package/src/core/markerSetIcon.js +14 -14
  113. package/src/core/markerSetRotation.js +19 -19
  114. package/src/core/projectNativePath.js +30 -30
  115. package/src/core/redrawPath.js +11 -11
  116. package/src/core/removeLayer.js +26 -26
  117. package/src/core/setRotation.js +12 -12
  118. package/src/core/whenReady.js +14 -14
  119. package/src/geometry/addBridges.js +36 -36
  120. package/src/geometry/addGeneratedTriangle.js +10 -10
  121. package/src/geometry/appendAreaTriangle.js +32 -32
  122. package/src/geometry/appendNativeTriangle.js +17 -17
  123. package/src/geometry/appendRouteDash.js +33 -33
  124. package/src/geometry/appendRouteSegment.js +28 -28
  125. package/src/geometry/assembleAreaGeometry.js +48 -48
  126. package/src/geometry/bridgeEdge.js +18 -18
  127. package/src/geometry/bridgeFaces.js +22 -22
  128. package/src/geometry/bridgePaths.js +19 -19
  129. package/src/geometry/bridgePolygon.js +37 -37
  130. package/src/geometry/bridgeSides.js +18 -18
  131. package/src/geometry/buildProjectedPoint.js +32 -32
  132. package/src/geometry/buildProjectedPolygon.js +34 -34
  133. package/src/geometry/circleAt.js +20 -20
  134. package/src/geometry/circleGeometry.js +41 -41
  135. package/src/geometry/createModelGeometry.js +44 -44
  136. package/src/geometry/crossVector.js +15 -15
  137. package/src/geometry/dashValues.js +23 -23
  138. package/src/geometry/dashedSegment.js +33 -33
  139. package/src/geometry/diskAt.js +18 -18
  140. package/src/geometry/emitter.js +18 -18
  141. package/src/geometry/fillNativePolygon.js +28 -28
  142. package/src/geometry/generateTreeGeometry.js +18 -18
  143. package/src/geometry/indexBridge.js +36 -36
  144. package/src/geometry/instanceAreaGeometry.js +37 -37
  145. package/src/geometry/line.js +28 -28
  146. package/src/geometry/lineJoin.js +35 -35
  147. package/src/geometry/markerImageBounds.js +20 -20
  148. package/src/geometry/meshShadowBounds.js +33 -33
  149. package/src/geometry/offsetBelowGround.js +10 -10
  150. package/src/geometry/quad.js +23 -23
  151. package/src/geometry/restoreGeometry.js +29 -29
  152. package/src/geometry/roofCoverage.js +33 -33
  153. package/src/geometry/roofFootprint.js +40 -40
  154. package/src/geometry/samePoint.js +11 -11
  155. package/src/geometry/segment.js +32 -32
  156. package/src/geometry/subtractRoofTile.js +28 -28
  157. package/src/geometry/terrainBuffers.js +36 -36
  158. package/src/geometry/terrainTileGeometry.js +28 -28
  159. package/src/geometry/validateTree.js +19 -19
  160. package/src/globals/L.js +6 -6
  161. package/src/globals/cameraFov.js +8 -8
  162. package/src/globals/cogTags.js +6 -6
  163. package/src/globals/colorTexture.js +11 -11
  164. package/src/globals/cosObliquity.js +8 -8
  165. package/src/globals/degrees.js +6 -6
  166. package/src/globals/earthCirc.js +6 -6
  167. package/src/globals/geometryWorkerUrl.js +8 -8
  168. package/src/globals/halfRadians.js +6 -6
  169. package/src/globals/lampDirections.js +13 -13
  170. package/src/globals/layerControlAddItem.js +8 -8
  171. package/src/globals/leafletLayer.js +8 -8
  172. package/src/globals/lightScale.js +6 -6
  173. package/src/globals/mvtTextDecoder.js +6 -6
  174. package/src/globals/nativeScalableStyleKeys.js +6 -6
  175. package/src/globals/sinObliquity.js +8 -8
  176. package/src/globals/tau.js +6 -6
  177. package/src/globals/vectorStyleNamedColors.js +13 -13
  178. package/src/globals/vectorTileEvents.js +6 -6
  179. package/src/globals/workerCogSource.js +6 -6
  180. package/src/gpu/initializeRendererResources.js +39 -39
  181. package/src/gpu/initializeSharedRenderer.js +59 -59
  182. package/src/gpu/mountRenderer.js +25 -25
  183. package/src/layer-controls/layerControlInputId.js +18 -18
  184. package/src/layer-controls/layerCountTitle.js +16 -16
  185. package/src/layer-controls/placeEntryElement.js +29 -29
  186. package/src/layer-controls/renderLayerCount.js +28 -28
  187. package/src/lighting/visitLightCells.js +26 -26
  188. package/src/lighting/writeLightCell.js +14 -14
  189. package/src/materials/createProgramLayout.js +44 -44
  190. package/src/materials/createProgramUniforms.js +25 -25
  191. package/src/materials/modelMaterialFor.js +29 -29
  192. package/src/materials/prepareMeshCutout.js +21 -21
  193. package/src/materials/terrainRasterProgram.js +65 -65
  194. package/src/materials/validateRoofMaterial.js +17 -17
  195. package/src/models/applyModelTransform.js +18 -18
  196. package/src/models/buildModelNodes.js +24 -24
  197. package/src/models/createModelContext.js +24 -24
  198. package/src/models/loadBuffer.js +16 -16
  199. package/src/models/loadModelResources.js +22 -22
  200. package/src/models/normalizeAccessor.js +21 -21
  201. package/src/models/prepareModel.js +29 -29
  202. package/src/models/prepareModelGeometry.js +35 -35
  203. package/src/models/prepareModelPrimitive.js +25 -25
  204. package/src/models/readAccessorValue.js +16 -16
  205. package/src/models/readModelAttributes.js +32 -32
  206. package/src/models/readModelIndices.js +28 -28
  207. package/src/models/readSparseAccessor.js +31 -31
  208. package/src/models/releaseModelResources.js +15 -15
  209. package/src/mvt/addMvtCrossings.js +23 -23
  210. package/src/mvt/appendMvtBandTriangles.js +42 -42
  211. package/src/mvt/appendMvtCoordinates.js +20 -20
  212. package/src/mvt/appendMvtPolygonTriangles.js +29 -29
  213. package/src/mvt/beginMvtPath.js +19 -19
  214. package/src/mvt/closeMvtPath.js +16 -16
  215. package/src/mvt/collectMvtEdges.js +29 -29
  216. package/src/mvt/createMvtReader.js +14 -14
  217. package/src/mvt/decodeVectorTile.js +39 -39
  218. package/src/mvt/expectMvtWire.js +11 -11
  219. package/src/mvt/finishMvtPath.js +14 -14
  220. package/src/mvt/finiteMvtCoordinate.js +14 -14
  221. package/src/mvt/groupMvtPolygons.js +35 -35
  222. package/src/mvt/isMvtFallbackError.js +13 -13
  223. package/src/mvt/mergeMvtActiveEdges.js +18 -18
  224. package/src/mvt/mvtEdgeX.js +12 -12
  225. package/src/mvt/mvtPathsVertices.js +15 -15
  226. package/src/mvt/mvtPolygonPaths.js +19 -19
  227. package/src/mvt/numericMvtValue.js +11 -11
  228. package/src/mvt/readMvtFeature.js +46 -46
  229. package/src/mvt/readMvtField.js +17 -17
  230. package/src/mvt/readMvtGeometry.js +42 -42
  231. package/src/mvt/readMvtInteger.js +22 -22
  232. package/src/mvt/readMvtKnownValue.js +30 -30
  233. package/src/mvt/readMvtLayer.js +40 -40
  234. package/src/mvt/readMvtMessage.js +18 -18
  235. package/src/mvt/readMvtNumber.js +18 -18
  236. package/src/mvt/readMvtNumbers.js +18 -18
  237. package/src/mvt/readMvtString.js +14 -14
  238. package/src/mvt/readMvtValue.js +29 -29
  239. package/src/mvt/skipMvtField.js +22 -22
  240. package/src/mvt/sortMvtActiveEdges.js +20 -20
  241. package/src/mvt/sortedMvtLevels.js +29 -29
  242. package/src/mvt/takeMvtBytes.js +18 -18
  243. package/src/mvt/tessellateVectorRings.js +26 -26
  244. package/src/mvt/triangulateVectorRings.js +23 -23
  245. package/src/native/beforeNativeRender.js +21 -21
  246. package/src/native/bypassNativeEvent.js +21 -21
  247. package/src/native/canScaleNativeStyle.js +26 -26
  248. package/src/native/compareNativeHits.js +10 -10
  249. package/src/native/createNativeMesh.js +46 -46
  250. package/src/native/forwardNativeError.js +8 -8
  251. package/src/native/getGridTerrainTile.js +47 -47
  252. package/src/native/gridTerrainElevation.js +34 -34
  253. package/src/native/isCurrentNativeLayer.js +11 -11
  254. package/src/native/loadGridTerrain.js +36 -36
  255. package/src/native/nativeEventSource.js +27 -27
  256. package/src/native/nativeProgram.js +28 -28
  257. package/src/native/nativeTerrainElevation.js +27 -27
  258. package/src/native/nativeVectorGeometry.js +30 -30
  259. package/src/native/orderNativeGridLayer.js +20 -20
  260. package/src/native/prepareGridTerrainRequests.js +23 -23
  261. package/src/native/pruneNativeResources.js +25 -25
  262. package/src/native/readyNativeGPU.js +13 -13
  263. package/src/native/rejectNativeReady.js +2 -2
  264. package/src/native/removeNativeEvents.js +20 -20
  265. package/src/native/resolveNativeReady.js +2 -2
  266. package/src/native/restoreNativeEvents.js +8 -8
  267. package/src/native/retainGridTerrain.js +15 -15
  268. package/src/native/styleNativeMesh.js +20 -20
  269. package/src/native/syncGridTile.js +28 -28
  270. package/src/native/syncImageOverlay.js +13 -13
  271. package/src/native/syncNativeStrokeAnchors.js +18 -18
  272. package/src/native/syncNativeStrokeZoom.js +34 -34
  273. package/src/native/syncTerrainGridTile.js +38 -38
  274. package/src/native/terrainGridMesh.js +47 -47
  275. package/src/native/updateNativeHover.js +15 -15
  276. package/src/native/updateNativeStrokeRadius.js +14 -14
  277. package/src/picking/hitColliderCell.js +29 -29
  278. package/src/picking/validateCameraInverse.js +15 -15
  279. package/src/projections/displayContainerPoint.js +32 -32
  280. package/src/projections/projectBridgePoint.js +17 -17
  281. package/src/projections/toPoint.js +13 -13
  282. package/src/projections/transformZoomAnimationPoint.js +8 -8
  283. package/src/projections/verticalGroundY.js +14 -14
  284. package/src/raster/rasterTileRange.js +32 -32
  285. package/src/raster/retainRasterTiles.js +21 -21
  286. package/src/rendering/collectVisibleMesh.js +48 -48
  287. package/src/rendering/compareMeshDepth.js +14 -14
  288. package/src/rendering/drawPipeline.js +44 -44
  289. package/src/rendering/nativeStrokeExpansion.js +11 -11
  290. package/src/rendering/prepareFrameBuffer.js +24 -24
  291. package/src/rendering/prepareMeshUniforms.js +36 -36
  292. package/src/rendering/revealRoofMesh.js +43 -43
  293. package/src/scene/addSceneLayer.js +24 -24
  294. package/src/scene/callLayer.js +34 -34
  295. package/src/scene/createLayer.js +13 -13
  296. package/src/scene/getLocation.js +12 -12
  297. package/src/scene/isNativeLayer.js +19 -19
  298. package/src/scene/removeSceneLayer.js +22 -22
  299. package/src/scene/reportLayerError.js +9 -9
  300. package/src/shaders/materialBaseShader.js +26 -26
  301. package/src/shaders/materialSurfaceShader.js +60 -60
  302. package/src/shaders/materialVertexShader.js +89 -89
  303. package/src/shaders/nativeStrokeShader.js +13 -13
  304. package/src/shaders/roofVertexShader.js +16 -16
  305. package/src/shadows/shadowMeshMatches.js +19 -19
  306. package/src/sources/buildAreaFeatures.js +23 -23
  307. package/src/sources/extrusionStyle.js +21 -21
  308. package/src/sources/featureAnchor.js +21 -21
  309. package/src/sources/groundOffset.js +9 -9
  310. package/src/sources/initVectorTiles.js +21 -21
  311. package/src/sources/isVectorTileSource.js +11 -11
  312. package/src/sources/matchesAreaTile.js +17 -17
  313. package/src/sources/pendingSourceAreas.js +28 -28
  314. package/src/sources/prepareAreaGeometryJob.js +34 -34
  315. package/src/sources/projectAreaPolygons.js +25 -25
  316. package/src/sources/readyVectorTiles.js +17 -17
  317. package/src/sunlight/addTimeControlToMap.js +18 -18
  318. package/src/sunlight/addTimeLayer.js +12 -12
  319. package/src/sunlight/initializeTimeControl.js +18 -18
  320. package/src/sunlight/onAddSun.js +37 -37
  321. package/src/sunlight/onAddTimeControl.js +12 -12
  322. package/src/sunlight/onRemoveSun.js +10 -10
  323. package/src/sunlight/removeSun.js +25 -25
  324. package/src/sunlight/removeTimeControl.js +14 -14
  325. package/src/sunlight/removeTimeLayer.js +11 -11
  326. package/src/sunlight/requestSunlightRender.js +12 -12
  327. package/src/sunlight/styleTimeControl.js +13 -13
  328. package/src/sunlight/tickSun.js +10 -10
  329. package/src/sunlight/updateCelestialDisc.js +23 -23
  330. package/src/sunlight/updateSun.js +44 -44
  331. package/src/sunlight/useLiveTime.js +11 -11
  332. package/src/sunlight/useSelectedTime.js +26 -26
  333. package/src/terrain/applyTerrain.js +30 -30
  334. package/src/terrain/copyTerrainTile.js +20 -20
  335. package/src/terrain/loadReadyTerrain.js +6 -6
  336. package/src/terrain/mapElevationOf.js +19 -19
  337. package/src/terrain/readBridges.js +13 -13
  338. package/src/terrain/readyTerrainOf.js +14 -14
  339. package/src/terrain/sampleTerrainTile.js +16 -16
  340. package/src/terrain/terrainTileQueue.js +34 -34
  341. package/src/textures/addImageState.js +13 -13
  342. package/src/textures/bindMeshTextures.js +57 -57
  343. package/src/textures/collectRoofTiles.js +23 -23
  344. package/src/textures/loadModelImage.js +29 -29
  345. package/src/textures/modelTextureFor.js +47 -47
  346. package/src/textures/prepareMeshTextures.js +31 -31
  347. package/src/textures/removeImageState.js +13 -13
  348. package/src/textures/resizeRoofTexture.js +32 -32
  349. package/src/textures/restoreMaterialTextures.js +22 -22
  350. package/src/textures/updateRoofAtlas.js +29 -29
  351. package/src/textures/uploadMeshTexture.js +32 -32
  352. package/src/textures/uploadNativeImage.js +26 -26
  353. package/src/textures/uploadRoofTile.js +29 -29
  354. package/src/traffic/createTrafficMesh.js +17 -17
  355. package/src/traffic/disposeTrafficObject.js +19 -19
  356. package/src/traffic/failTraffic.js +12 -12
  357. package/src/traffic/failedTrafficLoad.js +10 -10
  358. package/src/traffic/fetchTrafficLanes.js +21 -21
  359. package/src/traffic/loadedTrafficLanes.js +21 -21
  360. package/src/traffic/locateTraffic.js +20 -20
  361. package/src/traffic/moveTraffic.js +21 -21
  362. package/src/traffic/readyTraffic.js +10 -10
  363. package/src/traffic/refreshTrafficTrips.js +42 -42
  364. package/src/traffic/routeColor.js +13 -13
  365. package/src/traffic/startTraffic.js +12 -12
  366. package/src/traffic/trafficNow.js +15 -15
  367. package/src/traffic/trafficStatusText.js +13 -13
  368. package/src/traffic/trafficStorage.js +13 -13
  369. package/src/traffic/updateTraffic.js +13 -13
  370. package/src/traffic/updateTrafficLights.js +23 -23
  371. package/src/traffic/updateTrafficPose.js +15 -15
  372. package/src/traffic/updateTrafficTerrain.js +15 -15
  373. package/src/traffic/uploadTrafficLanes.js +27 -27
  374. package/src/transforms/composeLocalTransform.js +23 -23
  375. package/src/transforms/transformNativePoint.js +19 -19
  376. package/src/transforms/worldMatrixChanged.js +26 -26
  377. package/src/triangulation/clipEars.js +32 -32
  378. package/src/triangulation/connectHole.js +30 -30
  379. package/src/triangulation/cross.js +12 -12
  380. package/src/triangulation/equal.js +11 -11
  381. package/src/triangulation/intersects.js +21 -21
  382. package/src/triangulation/mergeHoles.js +19 -19
  383. package/src/triangulation/on.js +13 -13
  384. package/src/triangulation/polygonRings.js +22 -22
  385. package/src/triangulation/validateArea.js +19 -19
  386. package/src/utils/compareDistance.js +11 -11
  387. package/src/utils/yieldTask.js +12 -12
  388. package/src/vector-style/appendQuotedStyleCharacter.js +30 -30
  389. package/src/vector-style/arrayContainsRange.js +18 -18
  390. package/src/vector-style/evaluateBoolean.js +31 -31
  391. package/src/vector-style/evaluateCoalesceOrCase.js +34 -34
  392. package/src/vector-style/evaluateComparison.js +29 -29
  393. package/src/vector-style/evaluateIExpression.js +21 -21
  394. package/src/vector-style/evaluateInput.js +16 -16
  395. package/src/vector-style/evaluateInterpolate.js +36 -36
  396. package/src/vector-style/evaluateMatch.js +21 -21
  397. package/src/vector-style/evaluateMath.js +26 -26
  398. package/src/vector-style/evaluateMembership.js +29 -29
  399. package/src/vector-style/evaluateNegation.js +26 -26
  400. package/src/vector-style/evaluatePrimitive.js +21 -21
  401. package/src/vector-style/evaluateStep.js +20 -20
  402. package/src/vector-style/evaluateStyle.js +43 -43
  403. package/src/vector-style/evaluateToExpression.js +27 -27
  404. package/src/vector-style/fillVectorPaint.js +26 -26
  405. package/src/vector-style/lineVectorPaint.js +31 -31
  406. package/src/vector-style/parseFunctionalColor.js +23 -23
  407. package/src/vector-style/parseHexColor.js +20 -20
  408. package/src/vector-style/parseVectorStyle.js +20 -20
  409. package/src/vector-style/readPaintValue.js +17 -17
  410. package/src/vector-style/removeTrailingCommas.js +19 -19
  411. package/src/vector-style/scaleDashArray.js +25 -25
  412. package/src/vector-style/skipStyleComment.js +20 -20
  413. package/src/vector-style/stripStyleComments.js +28 -28
  414. package/src/vector-style/styleColor.js +18 -18
  415. package/src/vector-style/validateVectorLayers.js +18 -18
  416. package/src/vector-style/vectorPaint.js +17 -17
  417. package/src/vector-style/visibleStyle.js +16 -16
  418. package/src/vector-tiles/appendVectorBatch.js +34 -34
  419. package/src/vector-tiles/attachVectorTileBatch.js +25 -25
  420. package/src/vector-tiles/attachVectorTileBatches.js +26 -26
  421. package/src/vector-tiles/compareVectorLabelPriority.js +11 -11
  422. package/src/vector-tiles/compareVectorTileDistance.js +11 -11
  423. package/src/vector-tiles/createVectorLabel.js +37 -37
  424. package/src/vector-tiles/forwardVectorTileError.js +10 -10
  425. package/src/vector-tiles/loadVectorSprite.js +14 -14
  426. package/src/vector-tiles/loadVectorTile.js +45 -45
  427. package/src/vector-tiles/onVectorTileAdd.js +44 -44
  428. package/src/vector-tiles/onVectorTileMessage.js +15 -15
  429. package/src/vector-tiles/onVectorTileRemove.js +25 -25
  430. package/src/vector-tiles/onVectorTileWorkerError.js +16 -16
  431. package/src/vector-tiles/paintVectorTileBatch.js +18 -18
  432. package/src/vector-tiles/prepareVectorLabel.js +34 -34
  433. package/src/vector-tiles/prepareVectorStyleLayer.js +38 -38
  434. package/src/vector-tiles/prepareVectorTile.js +29 -29
  435. package/src/vector-tiles/projectVectorPaths.js +25 -25
  436. package/src/vector-tiles/projectVectorPoint.js +15 -15
  437. package/src/vector-tiles/projectVectorTriangles.js +28 -28
  438. package/src/vector-tiles/pruneVectorTiles.js +14 -14
  439. package/src/vector-tiles/pumpVectorTiles.js +21 -21
  440. package/src/vector-tiles/readTileJSON.js +27 -27
  441. package/src/vector-tiles/readVectorStyle.js +28 -28
  442. package/src/vector-tiles/refreshVectorTiles.js +8 -8
  443. package/src/vector-tiles/reserveVectorLabelCells.js +14 -14
  444. package/src/vector-tiles/retireVectorTileGroup.js +20 -20
  445. package/src/vector-tiles/revokeVectorWorkerUrl.js +14 -14
  446. package/src/vector-tiles/rotateVectorLabel.js +19 -19
  447. package/src/vector-tiles/rotateVectorLabels.js +9 -9
  448. package/src/vector-tiles/simplifyVectorPath.js +29 -29
  449. package/src/vector-tiles/updateVectorLabelMarker.js +36 -36
  450. package/src/vector-tiles/updateVectorLabelStyle.js +14 -14
  451. package/src/vector-tiles/updateVectorTileLabels.js +33 -33
  452. package/src/vector-tiles/updateVectorTilePaint.js +25 -25
  453. package/src/vector-tiles/updateVectorTiles.js +32 -32
  454. package/src/vector-tiles/validateVectorTileZooms.js +15 -15
  455. package/src/vector-tiles/vectorFeaturePaint.js +25 -25
  456. package/src/vector-tiles/vectorFeaturePaths.js +26 -26
  457. package/src/vector-tiles/vectorFeatureZoom.js +18 -18
  458. package/src/vector-tiles/vectorLabelAnchors.js +31 -31
  459. package/src/vector-tiles/vectorLabelCandidates.js +18 -18
  460. package/src/vector-tiles/vectorLabelCells.js +32 -32
  461. package/src/vector-tiles/vectorLabelIcon.js +38 -38
  462. package/src/vector-tiles/vectorLabelProperty.js +12 -12
  463. package/src/vector-tiles/vectorLabelText.js +19 -19
  464. package/src/vector-tiles/vectorSpriteIcon.js +19 -19
  465. package/src/vector-tiles/vectorStraightRun.js +23 -23
  466. package/src/vector-tiles/vectorStyleDependencies.js +22 -22
  467. package/src/vector-tiles/vectorStyleValue.js +16 -16
  468. package/src/vector-tiles/vectorStyleZoom.js +12 -12
  469. package/src/vector-tiles/vectorTileAwaited.js +17 -17
  470. package/src/vector-tiles/vectorTileOverlaps.js +12 -12
  471. package/src/vector-tiles/vectorTilePaint.js +18 -18
  472. package/src/vector-tiles/vectorTileSettings.js +27 -27
  473. package/src/vector-tiles/vectorTilesIdle.js +11 -11
  474. package/src/vector-tiles/vectorTolerance.js +11 -11
  475. package/src/vector-tiles/wrapVectorLabel.js +17 -17
  476. package/src/vehicles/boatModel.js +35 -35
  477. package/src/vehicles/busModel.js +13 -13
  478. package/src/vehicles/carModel.js +39 -39
  479. package/src/walk/initializeWalkControl.js +12 -12
  480. package/src/walk/isWalkBlocked.js +15 -15
  481. package/src/walk/landWalker.js +41 -41
  482. package/src/walk/moveWalker.js +37 -37
  483. package/src/walk/onAddWalkControl.js +40 -40
  484. package/src/walk/onRemoveWalkControl.js +17 -17
  485. package/src/walk/onWalkBlur.js +3 -3
  486. package/src/walk/onWalkTerrain.js +3 -3
  487. package/src/walk/resolveWalkerPosition.js +33 -33
  488. package/src/walk/stepWalkerHeight.js +18 -18
  489. package/src/walk/toggleWalking.js +4 -4
  490. package/src/walk/updateWalkerFrame.js +29 -29
  491. package/src/walk/updateWalkerView.js +31 -31
  492. package/src/weakmaps/cameraHandlersByMap.js +6 -6
  493. package/src/weakmaps/geometryWorkersByMap.js +6 -6
  494. package/src/weakmaps/nativeProgramsByRenderer.js +6 -6
  495. package/src/weakmaps/pathProjectionByMap.js +6 -6
  496. package/src/weakmaps/streamTerrainByLayer.js +6 -6
  497. package/src/weakmaps/streamTerrainByMap.js +6 -6
  498. package/src/weakmaps/sunByMap.js +6 -6
  499. package/src/weakmaps/vectorTileOptionsByLayer.js +6 -6
  500. package/src/weakmaps/vectorWorkerByLayer.js +6 -6
  501. package/src/weakmaps/walkByMap.js +6 -6
  502. package/src/weakmaps/workerMapByLayer.js +6 -6
  503. package/src/workers/acquireGeometryWorker.js +39 -39
  504. package/src/workers/buildAreaInWorker.js +24 -24
  505. package/src/workers/closeGeometryWorkers.js +16 -16
  506. package/src/workers/cogWorker.js +27 -27
  507. package/src/workers/createGeometryWorker.js +30 -30
  508. package/src/workers/geometryWorker.js +34 -34
  509. package/src/workers/getCogInWorker.js +18 -18
  510. package/src/workers/modelWorker.js +17 -17
  511. package/src/workers/openCogInWorker.js +22 -22
  512. package/src/workers/runSourceWorker.js +44 -44
  513. package/src/workers/settleGeometryWorker.js +16 -16
  514. package/src/workers/startGeometryWorker.js +23 -23
  515. package/src/workers/vectorTileWorker.js +15 -15
@@ -1,52 +1,52 @@
1
- import { kindByLayer } from '../weakmaps/kindByLayer.js';
2
- import { layersByLayer } from '../weakmaps/layersByLayer.js';
3
- import { rootByLayer } from '../weakmaps/rootByLayer.js';
4
- import { sceneByLayer } from '../weakmaps/sceneByLayer.js';
5
- import { sharedByLayer } from '../weakmaps/sharedByLayer.js';
6
- import { updateWorldMatrix } from '../transforms/updateWorldMatrix.js';
7
- import { insideMesh } from './insideMesh.js';
8
- import { trafficCollision } from './trafficCollision.js';
9
- import { local } from '../projections/walkerLocalPosition.js';
10
-
11
- /**
12
- * Check the walker's body heights against scene geometry and current traffic bounds, excluding terrain.
13
- *
14
- * @param {Object} context Walk control state and reusable collision scratch.
15
- *
16
- * @returns {boolean} Whether the walker overlaps traffic or is enclosed by a mesh.
17
- */
18
- export function insideWalker(context) {
19
- const { layer, local: localBuffer, hitData } = context;
20
- const shared = sharedByLayer.get(layer);
21
- if (!shared || !layersByLayer.get(shared)) return false;
22
- updateWorldMatrix(sceneByLayer.get(layer));
23
- const root = rootByLayer.get(layer);
24
- const feet = local.call(context, localBuffer);
25
- const x = root.position[0] + feet[0] * root.scale[0];
26
- const y = root.position[1] + feet[1] * root.scale[1];
27
- const z = root.position[2] + feet[2] * root.scale[2];
28
- const layers = layersByLayer.get(shared);
29
- let other, node, child, nodes;
30
- for (other of layers) {
31
- if (other === layer || kindByLayer.get(other) === 'terrain') continue;
32
- if (kindByLayer.get(other) === 'traffic') {
33
- hitData.best = 0;
34
- hitData.found = false;
35
- if (trafficCollision(other, x, y, z, 0, 0, 0, hitData)) return true;
36
- continue;
37
- }
38
- nodes = hitData.nodes;
39
- nodes.length = 0;
40
- if (rootByLayer.get(other)) nodes.push(rootByLayer.get(other));
41
- while (nodes.length) {
42
- node = nodes.pop();
43
- if (!node.visible) continue;
44
- if (node.geometry && (
45
- insideMesh(node, x, y + 0.45 * root.scale[1], z, hitData.seen, hitData.intersections) ||
46
- insideMesh(node, x, y + 1.35 * root.scale[1], z, hitData.seen, hitData.intersections)
47
- )) return true;
48
- for (child of node.children) nodes.push(child);
49
- }
50
- }
51
- return false;
52
- }
1
+ import { kindByLayer } from '../weakmaps/kindByLayer.js';
2
+ import { layersByLayer } from '../weakmaps/layersByLayer.js';
3
+ import { rootByLayer } from '../weakmaps/rootByLayer.js';
4
+ import { sceneByLayer } from '../weakmaps/sceneByLayer.js';
5
+ import { sharedByLayer } from '../weakmaps/sharedByLayer.js';
6
+ import { updateWorldMatrix } from '../transforms/updateWorldMatrix.js';
7
+ import { insideMesh } from './insideMesh.js';
8
+ import { trafficCollision } from './trafficCollision.js';
9
+ import { local } from '../projections/walkerLocalPosition.js';
10
+
11
+ /**
12
+ * Check the walker's body heights against scene geometry and current traffic bounds, excluding terrain.
13
+ *
14
+ * @param {Object} context Walk control state and reusable collision scratch.
15
+ *
16
+ * @returns {boolean} Whether the walker overlaps traffic or is enclosed by a mesh.
17
+ */
18
+ export function insideWalker(context) {
19
+ const { layer, local: localBuffer, hitData } = context;
20
+ const shared = sharedByLayer.get(layer);
21
+ if (!shared || !layersByLayer.get(shared)) return false;
22
+ updateWorldMatrix(sceneByLayer.get(layer));
23
+ const root = rootByLayer.get(layer);
24
+ const feet = local.call(context, localBuffer);
25
+ const x = root.position[0] + feet[0] * root.scale[0];
26
+ const y = root.position[1] + feet[1] * root.scale[1];
27
+ const z = root.position[2] + feet[2] * root.scale[2];
28
+ const layers = layersByLayer.get(shared);
29
+ let other, node, child, nodes;
30
+ for (other of layers) {
31
+ if (other === layer || kindByLayer.get(other) === 'terrain') continue;
32
+ if (kindByLayer.get(other) === 'traffic') {
33
+ hitData.best = 0;
34
+ hitData.found = false;
35
+ if (trafficCollision(other, x, y, z, 0, 0, 0, hitData)) return true;
36
+ continue;
37
+ }
38
+ nodes = hitData.nodes;
39
+ nodes.length = 0;
40
+ if (rootByLayer.get(other)) nodes.push(rootByLayer.get(other));
41
+ while (nodes.length) {
42
+ node = nodes.pop();
43
+ if (!node.visible) continue;
44
+ if (node.geometry && (
45
+ insideMesh(node, x, y + 0.45 * root.scale[1], z, hitData.seen, hitData.intersections) ||
46
+ insideMesh(node, x, y + 1.35 * root.scale[1], z, hitData.seen, hitData.intersections)
47
+ )) return true;
48
+ for (child of node.children) nodes.push(child);
49
+ }
50
+ }
51
+ return false;
52
+ }
@@ -1,40 +1,40 @@
1
- import { sortHits } from './sortHits.js';
2
- import { localRay } from './localRay.js';
3
- import { rayBounds } from './rayBounds.js';
4
- import { readTriangle } from './readTriangle.js';
5
- import { triangleDistance } from './triangleDistance.js';
6
- import { worldHit } from './worldHit.js';
7
-
8
- /**
9
- * Find the nearest triangle hit per mesh, sorted by world-space distance.
10
- *
11
- * @param {Object} ray World-space ray with origin and direction.
12
- * @param {Object[]} meshes Meshes to test.
13
- * @param {number} [night] Night-light intensity for halo picking.
14
- *
15
- * @returns {Object[]} Nearest hit for each intersected mesh.
16
- */
17
- export function intersectMeshes(ray, meshes, night = 0) {
18
- const hits = /* alloc */ [];
19
- const a = /* alloc */ [0, 0, 0], b = /* alloc */ [0, 0, 0], c = /* alloc */ [0, 0, 0];
20
- const origin = /* alloc */ [0, 0, 0], direction = /* alloc */ [0, 0, 0];
21
- let mesh, position, index, instanceOffset, vertices, closest, faceIndex, i, distance;
22
- for (mesh of meshes) {
23
- // Test locally, then compare distances in shared world space.
24
- localRay(ray, mesh, origin, direction);
25
- if (!rayBounds(mesh, origin, direction)) continue;
26
- ({ position, index, instanceOffset } = mesh.geometry.attributes);
27
- vertices = index?.count || position.count;
28
- closest = Infinity, faceIndex = void 0;
29
- for (i = 0; i < vertices * (instanceOffset?.count ?? 1); i += 3) {
30
- readTriangle(mesh, i, a, b, c);
31
- distance = triangleDistance(mesh, i, a, b, c, origin, direction, night);
32
- if (distance > 0 && distance < closest) {
33
- closest = distance; faceIndex = i / 3;
34
- }
35
- }
36
- if (faceIndex === undefined) continue;
37
- hits.push(worldHit(ray, mesh, origin, direction, closest, faceIndex));
38
- }
39
- return sortHits(hits);
40
- }
1
+ import { sortHits } from './sortHits.js';
2
+ import { localRay } from './localRay.js';
3
+ import { rayBounds } from './rayBounds.js';
4
+ import { readTriangle } from './readTriangle.js';
5
+ import { triangleDistance } from './triangleDistance.js';
6
+ import { worldHit } from './worldHit.js';
7
+
8
+ /**
9
+ * Find the nearest triangle hit per mesh, sorted by world-space distance.
10
+ *
11
+ * @param {Object} ray World-space ray with origin and direction.
12
+ * @param {Object[]} meshes Meshes to test.
13
+ * @param {number} [night] Night-light intensity for halo picking.
14
+ *
15
+ * @returns {Object[]} Nearest hit for each intersected mesh.
16
+ */
17
+ export function intersectMeshes(ray, meshes, night = 0) {
18
+ const hits = /* alloc */ [];
19
+ const a = /* alloc */ [0, 0, 0], b = /* alloc */ [0, 0, 0], c = /* alloc */ [0, 0, 0];
20
+ const origin = /* alloc */ [0, 0, 0], direction = /* alloc */ [0, 0, 0];
21
+ let mesh, position, index, instanceOffset, vertices, closest, faceIndex, i, distance;
22
+ for (mesh of meshes) {
23
+ // Test locally, then compare distances in shared world space.
24
+ localRay(ray, mesh, origin, direction);
25
+ if (!rayBounds(mesh, origin, direction)) continue;
26
+ ({ position, index, instanceOffset } = mesh.geometry.attributes);
27
+ vertices = index?.count || position.count;
28
+ closest = Infinity, faceIndex = void 0;
29
+ for (i = 0; i < vertices * (instanceOffset?.count ?? 1); i += 3) {
30
+ readTriangle(mesh, i, a, b, c);
31
+ distance = triangleDistance(mesh, i, a, b, c, origin, direction, night);
32
+ if (distance > 0 && distance < closest) {
33
+ closest = distance; faceIndex = i / 3;
34
+ }
35
+ }
36
+ if (faceIndex === undefined) continue;
37
+ hits.push(worldHit(ray, mesh, origin, direction, closest, faceIndex));
38
+ }
39
+ return sortHits(hits);
40
+ }
@@ -1,31 +1,31 @@
1
- /**
2
- * Transform a world-space ray into mesh coordinates, normalizing its direction and rejecting singular transforms.
3
- *
4
- * @param {Object} ray World-space origin and direction.
5
- * @param {Object} mesh Mesh whose world matrix is inverted.
6
- * @param {number[]} origin Output local origin.
7
- * @param {number[]} direction Output normalized local direction.
8
- *
9
- * @throws {Error} If the inverse transform contains non-finite values.
10
- */
11
- export function localRay(ray, mesh, origin, direction) {
12
- const inverse = /* alloc */ new DOMMatrix(mesh.worldMatrix).invertSelf();
13
- const inverseValues = inverse.toFloat64Array();
14
- let value, x, y, z, w;
15
- for (value of inverseValues) {
16
- if (!Number.isFinite(value)) throw /* alloc */ new Error('Singular 3D transform');
17
- }
18
- x = ray.origin[0], y = ray.origin[1], z = ray.origin[2];
19
- w = inverseValues[3] * x + inverseValues[7] * y + inverseValues[11] * z + inverseValues[15];
20
- origin[0] = (inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z + inverseValues[12]) / w;
21
- origin[1] = (inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z + inverseValues[13]) / w;
22
- origin[2] = (inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z + inverseValues[14]) / w;
23
- x = ray.direction[0], y = ray.direction[1], z = ray.direction[2];
24
- direction[0] = inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z;
25
- direction[1] = inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z;
26
- direction[2] = inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z;
27
- const directionLength = Math.hypot(...direction) || 1;
28
- direction[0] /= directionLength;
29
- direction[1] /= directionLength;
30
- direction[2] /= directionLength;
31
- }
1
+ /**
2
+ * Transform a world-space ray into mesh coordinates, normalizing its direction and rejecting singular transforms.
3
+ *
4
+ * @param {Object} ray World-space origin and direction.
5
+ * @param {Object} mesh Mesh whose world matrix is inverted.
6
+ * @param {number[]} origin Output local origin.
7
+ * @param {number[]} direction Output normalized local direction.
8
+ *
9
+ * @throws {Error} If the inverse transform contains non-finite values.
10
+ */
11
+ export function localRay(ray, mesh, origin, direction) {
12
+ const inverse = /* alloc */ new DOMMatrix(mesh.worldMatrix).invertSelf();
13
+ const inverseValues = inverse.toFloat64Array();
14
+ let value, x, y, z, w;
15
+ for (value of inverseValues) {
16
+ if (!Number.isFinite(value)) throw /* alloc */ new Error('Singular 3D transform');
17
+ }
18
+ x = ray.origin[0], y = ray.origin[1], z = ray.origin[2];
19
+ w = inverseValues[3] * x + inverseValues[7] * y + inverseValues[11] * z + inverseValues[15];
20
+ origin[0] = (inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z + inverseValues[12]) / w;
21
+ origin[1] = (inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z + inverseValues[13]) / w;
22
+ origin[2] = (inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z + inverseValues[14]) / w;
23
+ x = ray.direction[0], y = ray.direction[1], z = ray.direction[2];
24
+ direction[0] = inverseValues[0] * x + inverseValues[4] * y + inverseValues[8] * z;
25
+ direction[1] = inverseValues[1] * x + inverseValues[5] * y + inverseValues[9] * z;
26
+ direction[2] = inverseValues[2] * x + inverseValues[6] * y + inverseValues[10] * z;
27
+ const directionLength = Math.hypot(...direction) || 1;
28
+ direction[0] /= directionLength;
29
+ direction[1] /= directionLength;
30
+ direction[2] /= directionLength;
31
+ }
@@ -1,19 +1,19 @@
1
- /**
2
- * Merge two adjacent, distance-sorted hit runs into the target buffer, preserving ties.
3
- *
4
- * @param {Object[]} source Array containing the sorted runs.
5
- * @param {Object[]} target Array receiving the merged run.
6
- * @param {number} start First index of the runs.
7
- * @param {number} width Maximum length of each run.
8
- */
9
- export function mergeHits(source, target, start, width) {
10
- const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);
11
- let left = start, right = middle, output;
12
- for (output = start; output < end; output++) {
13
- if (left < middle && (right >= end || !(source[right].distance < source[left].distance))) {
14
- target[output] = source[left++];
15
- } else {
16
- target[output] = source[right++];
17
- }
18
- }
19
- }
1
+ /**
2
+ * Merge two adjacent, distance-sorted hit runs into the target buffer, preserving ties.
3
+ *
4
+ * @param {Object[]} source Array containing the sorted runs.
5
+ * @param {Object[]} target Array receiving the merged run.
6
+ * @param {number} start First index of the runs.
7
+ * @param {number} width Maximum length of each run.
8
+ */
9
+ export function mergeHits(source, target, start, width) {
10
+ const middle = Math.min(start + width, source.length), end = Math.min(start + width * 2, source.length);
11
+ let left = start, right = middle, output;
12
+ for (output = start; output < end; output++) {
13
+ if (left < middle && (right >= end || !(source[right].distance < source[left].distance))) {
14
+ target[output] = source[left++];
15
+ } else {
16
+ target[output] = source[right++];
17
+ }
18
+ }
19
+ }
@@ -1,28 +1,28 @@
1
- import { computeBounds } from '../geometry/computeBounds.js';
2
-
3
- /**
4
- * Test a local-space ray against the mesh bounding box, calculating bounds when needed.
5
- *
6
- * @param {Object} mesh Mesh whose geometry bounds are tested.
7
- * @param {number[]} origin Local ray origin.
8
- * @param {number[]} direction Local ray direction.
9
- *
10
- * @returns {boolean} Whether the ray intersects the bounding box.
11
- */
12
- export function rayBounds(mesh, origin, direction) {
13
- if (!mesh.geometry.bounds) computeBounds(mesh.geometry);
14
- let near = 0, far = Infinity, i, a, b;
15
- for (i = 0; i < 3; i++) {
16
- if (Math.abs(direction[i]) < 1e-12) {
17
- if (origin[i] < mesh.geometry.bounds.min[i] || origin[i] > mesh.geometry.bounds.max[i]) {
18
- far = -Infinity;
19
- break;
20
- }
21
- } else {
22
- a = (mesh.geometry.bounds.min[i] - origin[i]) / direction[i], b = (mesh.geometry.bounds.max[i] - origin[i]) / direction[i];
23
- near = Math.max(near, Math.min(a, b));
24
- far = Math.min(far, Math.max(a, b));
25
- }
26
- }
27
- return !(far < near);
28
- }
1
+ import { computeBounds } from '../geometry/computeBounds.js';
2
+
3
+ /**
4
+ * Test a local-space ray against the mesh bounding box, calculating bounds when needed.
5
+ *
6
+ * @param {Object} mesh Mesh whose geometry bounds are tested.
7
+ * @param {number[]} origin Local ray origin.
8
+ * @param {number[]} direction Local ray direction.
9
+ *
10
+ * @returns {boolean} Whether the ray intersects the bounding box.
11
+ */
12
+ export function rayBounds(mesh, origin, direction) {
13
+ if (!mesh.geometry.bounds) computeBounds(mesh.geometry);
14
+ let near = 0, far = Infinity, i, a, b;
15
+ for (i = 0; i < 3; i++) {
16
+ if (Math.abs(direction[i]) < 1e-12) {
17
+ if (origin[i] < mesh.geometry.bounds.min[i] || origin[i] > mesh.geometry.bounds.max[i]) {
18
+ far = -Infinity;
19
+ break;
20
+ }
21
+ } else {
22
+ a = (mesh.geometry.bounds.min[i] - origin[i]) / direction[i], b = (mesh.geometry.bounds.max[i] - origin[i]) / direction[i];
23
+ near = Math.max(near, Math.min(a, b));
24
+ far = Math.min(far, Math.max(a, b));
25
+ }
26
+ }
27
+ return !(far < near);
28
+ }
@@ -1,32 +1,32 @@
1
- import { vertexCount } from './vertexCount.js';
2
-
3
- /**
4
- * Read an indexed or non-indexed triangle into caller-owned vectors, applying any instance offset.
5
- *
6
- * @param {Object} mesh Mesh containing geometry attributes.
7
- * @param {number} i First index or vertex offset, including instance offset.
8
- * @param {number[]} a Output first vertex.
9
- * @param {number[]} b Output second vertex.
10
- * @param {number[]} c Output third vertex.
11
- */
12
- export function readTriangle(mesh, i, a, b, c) {
13
- const { position, index, instanceOffset } = mesh.geometry.attributes;
14
- const size = position.size ?? 3;
15
- const vertices = vertexCount(position, index);
16
- const vertex = instanceOffset ? i % vertices : i;
17
- const offset = instanceOffset ? Math.floor(i / vertices) * instanceOffset.size : 0;
18
- const x = instanceOffset?.data[offset] ?? 0;
19
- const y = instanceOffset?.data[offset + 1] ?? 0;
20
- const z = instanceOffset?.data[offset + 2] ?? 0;
21
- const ai = (index ? index.data[vertex] : vertex) * size;
22
- const bi = (index ? index.data[vertex + 1] : vertex + 1) * size;
23
- const ci = (index ? index.data[vertex + 2] : vertex + 2) * size;
24
- a[0] = position.data[ai]; a[1] = position.data[ai + 1]; a[2] = position.data[ai + 2];
25
- b[0] = position.data[bi]; b[1] = position.data[bi + 1]; b[2] = position.data[bi + 2];
26
- c[0] = position.data[ci]; c[1] = position.data[ci + 1]; c[2] = position.data[ci + 2];
27
- if (instanceOffset) {
28
- a[0] = Math.fround(a[0] + x); a[1] = Math.fround(a[1] + y); a[2] = Math.fround(a[2] + z);
29
- b[0] = Math.fround(b[0] + x); b[1] = Math.fround(b[1] + y); b[2] = Math.fround(b[2] + z);
30
- c[0] = Math.fround(c[0] + x); c[1] = Math.fround(c[1] + y); c[2] = Math.fround(c[2] + z);
31
- }
32
- }
1
+ import { vertexCount } from './vertexCount.js';
2
+
3
+ /**
4
+ * Read an indexed or non-indexed triangle into caller-owned vectors, applying any instance offset.
5
+ *
6
+ * @param {Object} mesh Mesh containing geometry attributes.
7
+ * @param {number} i First index or vertex offset, including instance offset.
8
+ * @param {number[]} a Output first vertex.
9
+ * @param {number[]} b Output second vertex.
10
+ * @param {number[]} c Output third vertex.
11
+ */
12
+ export function readTriangle(mesh, i, a, b, c) {
13
+ const { position, index, instanceOffset } = mesh.geometry.attributes;
14
+ const size = position.size ?? 3;
15
+ const vertices = vertexCount(position, index);
16
+ const vertex = instanceOffset ? i % vertices : i;
17
+ const offset = instanceOffset ? Math.floor(i / vertices) * instanceOffset.size : 0;
18
+ const x = instanceOffset?.data[offset] ?? 0;
19
+ const y = instanceOffset?.data[offset + 1] ?? 0;
20
+ const z = instanceOffset?.data[offset + 2] ?? 0;
21
+ const ai = (index ? index.data[vertex] : vertex) * size;
22
+ const bi = (index ? index.data[vertex + 1] : vertex + 1) * size;
23
+ const ci = (index ? index.data[vertex + 2] : vertex + 2) * size;
24
+ a[0] = position.data[ai]; a[1] = position.data[ai + 1]; a[2] = position.data[ai + 2];
25
+ b[0] = position.data[bi]; b[1] = position.data[bi + 1]; b[2] = position.data[bi + 2];
26
+ c[0] = position.data[ci]; c[1] = position.data[ci + 1]; c[2] = position.data[ci + 2];
27
+ if (instanceOffset) {
28
+ a[0] = Math.fround(a[0] + x); a[1] = Math.fround(a[1] + y); a[2] = Math.fround(a[2] + z);
29
+ b[0] = Math.fround(b[0] + x); b[1] = Math.fround(b[1] + y); b[2] = Math.fround(b[2] + z);
30
+ c[0] = Math.fround(c[0] + x); c[1] = Math.fround(c[1] + y); c[2] = Math.fround(c[2] + z);
31
+ }
32
+ }
@@ -1,27 +1,27 @@
1
- import { rootByLayer } from '../weakmaps/rootByLayer.js';
2
- import { trafficByLayer } from '../weakmaps/trafficByLayer.js';
1
+ import { rootByLayer } from '../weakmaps/rootByLayer.js';
2
+ import { trafficByLayer } from '../weakmaps/trafficByLayer.js';
3
3
  import { collideTrip } from './collideTrip.js';
4
- import { trafficBounds } from './trafficBounds.js';
5
-
6
- /**
7
- * Test a walker point or movement ray against oriented traffic bounds, updating the nearest hit in data.
8
- *
9
- * @param {L.Layer} layer Traffic layer.
10
- * @param {number} x Walker world-space x coordinate.
11
- * @param {number} y Walker world-space feet height.
12
- * @param {number} z Walker world-space z coordinate.
13
- * @param {number} dx Movement direction x.
14
- * @param {number} dz Movement direction z.
15
- * @param {number} reach Movement distance, or zero to test overlap.
16
- * @param {Object} data Reusable hit record, updated when a collision is found.
17
- *
18
- * @returns {boolean} Whether a collision was found.
19
- */
20
- export function trafficCollision(layer, x, y, z, dx, dz, reach, data) {
21
- const state = trafficByLayer.get(layer);
22
- if (!state?.mesh || !state.trips.length) return false;
23
- const root = rootByLayer.get(layer), bounds = trafficBounds(state);
24
- let trip;
4
+ import { trafficBounds } from './trafficBounds.js';
5
+
6
+ /**
7
+ * Test a walker point or movement ray against oriented traffic bounds, updating the nearest hit in data.
8
+ *
9
+ * @param {L.Layer} layer Traffic layer.
10
+ * @param {number} x Walker world-space x coordinate.
11
+ * @param {number} y Walker world-space feet height.
12
+ * @param {number} z Walker world-space z coordinate.
13
+ * @param {number} dx Movement direction x.
14
+ * @param {number} dz Movement direction z.
15
+ * @param {number} reach Movement distance, or zero to test overlap.
16
+ * @param {Object} data Reusable hit record, updated when a collision is found.
17
+ *
18
+ * @returns {boolean} Whether a collision was found.
19
+ */
20
+ export function trafficCollision(layer, x, y, z, dx, dz, reach, data) {
21
+ const state = trafficByLayer.get(layer);
22
+ if (!state?.mesh || !state.trips.length) return false;
23
+ const root = rootByLayer.get(layer), bounds = trafficBounds(state);
24
+ let trip;
25
25
  for (trip of state.trips) {
26
26
  collideTrip(state, trip, root, bounds, x, y, z, dx, dz, reach, data);
27
27
  if (!reach && data.found) break;
@@ -1,18 +1,18 @@
1
- /**
2
- * Write three indexed or sequential positions transformed by matrix m into v.
3
- *
4
- * @param {number[]} v Output packed triangle coordinates.
5
- * @param {ArrayLike<number>} p Packed input positions.
6
- * @param {Object|undefined} index Optional geometry index attribute.
7
- * @param {number} i First vertex or index offset.
8
- * @param {ArrayLike<number>} m Column-major transformation matrix.
9
- */
10
- export function transformTriangle(v, p, index, i, m) {
11
- let k, j, x, y, z;
12
- for (k = 0; k < 3; k++) {
13
- j = (index ? index.data[i + k] : i + k) * 3, x = p[j], y = p[j + 1], z = p[j + 2];
14
- v[k * 3] = m[0] * x + m[4] * y + m[8] * z + m[12];
15
- v[k * 3 + 1] = m[1] * x + m[5] * y + m[9] * z + m[13];
16
- v[k * 3 + 2] = m[2] * x + m[6] * y + m[10] * z + m[14];
17
- }
18
- }
1
+ /**
2
+ * Write three indexed or sequential positions transformed by matrix m into v.
3
+ *
4
+ * @param {number[]} v Output packed triangle coordinates.
5
+ * @param {ArrayLike<number>} p Packed input positions.
6
+ * @param {Object|undefined} index Optional geometry index attribute.
7
+ * @param {number} i First vertex or index offset.
8
+ * @param {ArrayLike<number>} m Column-major transformation matrix.
9
+ */
10
+ export function transformTriangle(v, p, index, i, m) {
11
+ let k, j, x, y, z;
12
+ for (k = 0; k < 3; k++) {
13
+ j = (index ? index.data[i + k] : i + k) * 3, x = p[j], y = p[j + 1], z = p[j + 2];
14
+ v[k * 3] = m[0] * x + m[4] * y + m[8] * z + m[12];
15
+ v[k * 3 + 1] = m[1] * x + m[5] * y + m[9] * z + m[13];
16
+ v[k * 3 + 2] = m[2] * x + m[6] * y + m[10] * z + m[14];
17
+ }
18
+ }
@@ -1,34 +1,34 @@
1
- import { hiddenLightHit } from './hiddenLightHit.js';
2
-
3
- /**
4
- * Compute ray-triangle distance using the renderer's culling and light-halo rules.
5
- *
6
- * @param {Object} mesh Mesh containing material and geometry attributes.
7
- * @param {number} i Triangle's first vertex or index offset.
8
- * @param {number[]} a First vertex.
9
- * @param {number[]} b Second vertex.
10
- * @param {number[]} c Third vertex.
11
- * @param {number[]} origin Local ray origin.
12
- * @param {number[]} direction Local ray direction.
13
- * @param {number} night Night-light intensity.
14
- *
15
- * @returns {number} Signed ray distance, or Infinity when the hit is rejected.
16
- */
17
- export function triangleDistance(mesh, i, a, b, c, origin, direction, night) {
18
- const ex = b[0] - a[0], ey = b[1] - a[1], ez = b[2] - a[2];
19
- const fx = c[0] - a[0], fy = c[1] - a[1], fz = c[2] - a[2];
20
- const px = direction[1] * fz - direction[2] * fy;
21
- const py = direction[2] * fx - direction[0] * fz;
22
- const pz = direction[0] * fy - direction[1] * fx;
23
- const det = ex * px + ey * py + ez * pz;
24
- if (mesh.program.cullMode === 'none' || mesh.program.cullFace === null
25
- ? Math.abs(det) < 1e-9 : det < 1e-9) return Infinity;
26
- const tx = origin[0] - a[0], ty = origin[1] - a[1], tz = origin[2] - a[2];
27
- const u = (tx * px + ty * py + tz * pz) / det;
28
- if (u < 0 || u > 1) return Infinity;
29
- const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex;
30
- const v = (direction[0] * qx + direction[1] * qy + direction[2] * qz) / det;
31
- if (v < 0 || u + v > 1) return Infinity;
32
- if (hiddenLightHit(mesh, i, u, v, night)) return Infinity;
33
- return (fx * qx + fy * qy + fz * qz) / det;
34
- }
1
+ import { hiddenLightHit } from './hiddenLightHit.js';
2
+
3
+ /**
4
+ * Compute ray-triangle distance using the renderer's culling and light-halo rules.
5
+ *
6
+ * @param {Object} mesh Mesh containing material and geometry attributes.
7
+ * @param {number} i Triangle's first vertex or index offset.
8
+ * @param {number[]} a First vertex.
9
+ * @param {number[]} b Second vertex.
10
+ * @param {number[]} c Third vertex.
11
+ * @param {number[]} origin Local ray origin.
12
+ * @param {number[]} direction Local ray direction.
13
+ * @param {number} night Night-light intensity.
14
+ *
15
+ * @returns {number} Signed ray distance, or Infinity when the hit is rejected.
16
+ */
17
+ export function triangleDistance(mesh, i, a, b, c, origin, direction, night) {
18
+ const ex = b[0] - a[0], ey = b[1] - a[1], ez = b[2] - a[2];
19
+ const fx = c[0] - a[0], fy = c[1] - a[1], fz = c[2] - a[2];
20
+ const px = direction[1] * fz - direction[2] * fy;
21
+ const py = direction[2] * fx - direction[0] * fz;
22
+ const pz = direction[0] * fy - direction[1] * fx;
23
+ const det = ex * px + ey * py + ez * pz;
24
+ if (mesh.program.cullMode === 'none' || mesh.program.cullFace === null
25
+ ? Math.abs(det) < 1e-9 : det < 1e-9) return Infinity;
26
+ const tx = origin[0] - a[0], ty = origin[1] - a[1], tz = origin[2] - a[2];
27
+ const u = (tx * px + ty * py + tz * pz) / det;
28
+ if (u < 0 || u > 1) return Infinity;
29
+ const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex;
30
+ const v = (direction[0] * qx + direction[1] * qy + direction[2] * qz) / det;
31
+ if (v < 0 || u + v > 1) return Infinity;
32
+ if (hiddenLightHit(mesh, i, u, v, night)) return Infinity;
33
+ return (fx * qx + fy * qy + fz * qz) / det;
34
+ }
@@ -1,11 +1,11 @@
1
- /**
2
- * Return the number of indexed or sequential vertices represented by the geometry attributes.
3
- *
4
- * @param {Object} position Position attribute.
5
- * @param {Object|undefined} index Optional index attribute.
6
- *
7
- * @returns {number} Number of indices or sequential vertices.
8
- */
9
- export function vertexCount(position, index) {
10
- return index?.count ?? index?.data.length ?? position.count ?? position.data.length / (position.size ?? 3);
11
- }
1
+ /**
2
+ * Return the number of indexed or sequential vertices represented by the geometry attributes.
3
+ *
4
+ * @param {Object} position Position attribute.
5
+ * @param {Object|undefined} index Optional index attribute.
6
+ *
7
+ * @returns {number} Number of indices or sequential vertices.
8
+ */
9
+ export function vertexCount(position, index) {
10
+ return index?.count ?? index?.data.length ?? position.count ?? position.data.length / (position.size ?? 3);
11
+ }