leaflet-city-mapper 0.0.2 → 0.0.4

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 (1283) hide show
  1. package/README.md +56 -14
  2. package/cucumber.mjs +2 -2
  3. package/dist/leaflet-city-mapper-src.js +15326 -0
  4. package/dist/leaflet-city-mapper-src.js.map +7 -0
  5. package/dist/leaflet-city-mapper.js +4 -1
  6. package/dist/leaflet-city-mapper.js.map +4 -4
  7. package/libs/leaflet-lens.js +122 -0
  8. package/libs/leaflet.js +76 -0
  9. package/libs/openlayers-bindings.js +1128 -0
  10. package/libs/openlayers-bindings.min.js +99 -0
  11. package/libs/openlayers-bindings.min.js.map +7 -0
  12. package/package.json +5 -3
  13. package/src/archives/decodeDirectory.js +50 -0
  14. package/src/archives/decodeHeader.js +23 -0
  15. package/src/archives/decompress.js +10 -0
  16. package/src/archives/findDirectoryEntry.js +9 -0
  17. package/src/archives/findTile.js +31 -0
  18. package/src/archives/getDirectoryEntries.js +18 -0
  19. package/src/archives/getHeader.js +13 -0
  20. package/src/archives/getTileData.js +13 -0
  21. package/src/archives/getZxy.js +19 -0
  22. package/src/archives/loadDirectory.js +7 -0
  23. package/src/archives/loadSource.js +31 -0
  24. package/src/archives/read.js +32 -0
  25. package/src/archives/tileId.js +23 -0
  26. package/src/archives/varint.js +19 -0
  27. package/src/camera/angles.js +14 -0
  28. package/src/camera/animationPoint.js +11 -0
  29. package/src/camera/cameraMapReady.js +11 -0
  30. package/src/camera/cancelCameraAnimation.js +15 -0
  31. package/src/camera/cleanupCameraMap.js +14 -0
  32. package/src/camera/constrainCameraToBounds.js +3 -0
  33. package/src/camera/displayPoint.js +3 -0
  34. package/src/camera/fitCameraBounds.js +58 -0
  35. package/src/camera/getBearing.js +5 -0
  36. package/src/camera/getPitch.js +5 -0
  37. package/src/camera/groundBounds.js +18 -0
  38. package/src/camera/initializeCameraMap.js +30 -0
  39. package/src/camera/mapAnimateCamera.js +24 -0
  40. package/src/camera/mapCamera.js +103 -0
  41. package/src/camera/mapContainerPointToLayerPoint.js +9 -0
  42. package/src/camera/mapGetBearing.js +4 -0
  43. package/src/camera/mapGetBounds.js +20 -0
  44. package/src/camera/mapGetBoundsCenterZoom.js +10 -0
  45. package/src/camera/mapGetBoundsZoom.js +24 -0
  46. package/src/camera/mapGetCenterLayerPoint.js +6 -0
  47. package/src/camera/mapGetPitch.js +4 -0
  48. package/src/camera/mapLayerPointToContainerPoint.js +8 -0
  49. package/src/camera/mapLimitCenter.js +17 -0
  50. package/src/camera/mapLimitOffset.js +14 -0
  51. package/src/camera/mapPanBy.js +10 -0
  52. package/src/camera/mapPanInside.js +20 -0
  53. package/src/camera/mapResetNorth.js +4 -0
  54. package/src/camera/mapResetNorthPitch.js +4 -0
  55. package/src/camera/mapSetBearing.js +3 -0
  56. package/src/camera/mapSetPitch.js +3 -0
  57. package/src/camera/mapSetPitchAndBearing.js +22 -0
  58. package/src/camera/mapSetZoomAround.js +15 -0
  59. package/src/camera/mapStopPitchBearingAnimation.js +6 -0
  60. package/src/camera/mapTryAnimatedPan.js +10 -0
  61. package/src/camera/mapUpdateCameraOverlays.js +8 -0
  62. package/src/camera/pointOf.js +5 -0
  63. package/src/camera/project.js +27 -0
  64. package/src/camera/runCameraAnimations.js +31 -0
  65. package/src/camera/scheduleCameraAnimation.js +13 -0
  66. package/src/camera/updateSky.js +22 -0
  67. package/src/camera/verticalGroundY.js +4 -0
  68. package/src/cog/decodeCogTile.js +24 -0
  69. package/src/cog/finiteCogValues.js +5 -0
  70. package/src/cog/getCogAssetEntry.js +15 -0
  71. package/src/cog/getCogBase.js +10 -0
  72. package/src/cog/getCogHeader.js +3 -0
  73. package/src/cog/getCogProfile.js +16 -0
  74. package/src/cog/getCogTile.js +12 -0
  75. package/src/cog/getColorTile.js +25 -0
  76. package/src/cog/getElevationTile.js +16 -0
  77. package/src/cog/hasCogProjection.js +9 -0
  78. package/src/cog/initCog.js +7 -0
  79. package/src/cog/invalidCogFullResponse.js +3 -0
  80. package/src/cog/openCog.js +30 -0
  81. package/src/cog/openCogAsset.js +14 -0
  82. package/src/cog/readCog.js +25 -0
  83. package/src/cog/readCogBlock.js +8 -0
  84. package/src/cog/readCogBody.js +20 -0
  85. package/src/cog/readCogDirectories.js +20 -0
  86. package/src/cog/readCogDirectory.js +21 -0
  87. package/src/cog/readCogLevel.js +27 -0
  88. package/src/cog/readCogTag.js +15 -0
  89. package/src/cog/validCogDimensions.js +6 -0
  90. package/src/cog/validCogEncoding.js +5 -0
  91. package/src/cog/validCogGeoArrays.js +8 -0
  92. package/src/cog/validCogGrid.js +9 -0
  93. package/src/cog/validCogTileCoordinates.js +4 -0
  94. package/src/cog/validateCogContainer.js +9 -0
  95. package/src/cog/validateCogContentRange.js +8 -0
  96. package/src/cog/validateCogOffsets.js +10 -0
  97. package/src/cog/validateCogRange.js +7 -0
  98. package/src/cog/validateCogResponse.js +15 -0
  99. package/src/collision/collectMeshes.js +5 -0
  100. package/src/collision/collider.js +56 -0
  101. package/src/collision/hiddenLightHit.js +8 -0
  102. package/src/collision/indexTriangle.js +11 -0
  103. package/src/collision/intersectMeshes.js +32 -0
  104. package/src/collision/localRay.js +21 -0
  105. package/src/collision/mergeHits.js +11 -0
  106. package/src/collision/rayBounds.js +19 -0
  107. package/src/collision/readTriangle.js +20 -0
  108. package/src/collision/sortHits.js +17 -0
  109. package/src/collision/transformTriangle.js +9 -0
  110. package/src/collision/triangleDistance.js +21 -0
  111. package/src/collision/worldHit.js +18 -0
  112. package/src/controls/acceptPitchDrag.js +4 -0
  113. package/src/controls/acceptRotateDrag.js +3 -0
  114. package/src/controls/addCameraHandler.js +9 -0
  115. package/src/controls/adjustCameraDrag.js +15 -0
  116. package/src/controls/cameraControls.js +91 -0
  117. package/src/controls/cameraDragClick.js +10 -0
  118. package/src/controls/cameraDragContextMenu.js +9 -0
  119. package/src/controls/cameraDragDown.js +23 -0
  120. package/src/controls/cameraDragEnd.js +7 -0
  121. package/src/controls/cameraDragMove.js +28 -0
  122. package/src/controls/changeCameraTouch.js +17 -0
  123. package/src/controls/cleanupCameraTouch.js +29 -0
  124. package/src/controls/compassAddHooks.js +18 -0
  125. package/src/controls/compassOrientation.js +7 -0
  126. package/src/controls/compassRemoveHooks.js +5 -0
  127. package/src/controls/containerResizeAddHooks.js +8 -0
  128. package/src/controls/containerResizeRemoveHooks.js +5 -0
  129. package/src/controls/dragCamera.js +26 -0
  130. package/src/controls/editable.js +3 -0
  131. package/src/controls/endAllCameraDrags.js +9 -0
  132. package/src/controls/endAllCameraTouches.js +9 -0
  133. package/src/controls/endCameraTouch.js +12 -0
  134. package/src/controls/endCameraTouchEvent.js +8 -0
  135. package/src/controls/failCompassPermission.js +4 -0
  136. package/src/controls/finishCameraDrag.js +9 -0
  137. package/src/controls/finishCompassPermission.js +17 -0
  138. package/src/controls/loadCameraControls.js +9 -0
  139. package/src/controls/moveCameraTouch.js +29 -0
  140. package/src/controls/notifyCameraTouchChange.js +1 -0
  141. package/src/controls/pitchDragAddHooks.js +8 -0
  142. package/src/controls/pitchDragRemoveHooks.js +5 -0
  143. package/src/controls/refreshRotateControl.js +10 -0
  144. package/src/controls/refreshRotateFocus.js +5 -0
  145. package/src/controls/removeCameraDrag.js +26 -0
  146. package/src/controls/resizeMap.js +3 -0
  147. package/src/controls/rotateButtonClick.js +11 -0
  148. package/src/controls/rotateButtonKeydown.js +15 -0
  149. package/src/controls/rotateControl.js +4 -0
  150. package/src/controls/rotateOnAdd.js +42 -0
  151. package/src/controls/rotateOnRemove.js +6 -0
  152. package/src/controls/shiftRotateAddHooks.js +10 -0
  153. package/src/controls/shiftRotateRemoveHooks.js +5 -0
  154. package/src/controls/shiftRotateWheel.js +11 -0
  155. package/src/controls/startCameraTouch.js +33 -0
  156. package/src/core/addImageState.js +8 -0
  157. package/src/core/addRasterImage.js +12 -0
  158. package/src/core/adjustCameraMarkerPan.js +28 -0
  159. package/src/core/beforeNativeRender.js +10 -0
  160. package/src/core/boundsQuad.js +12 -0
  161. package/src/core/bringNativeLayerToBack.js +8 -0
  162. package/src/core/bringNativeLayerToFront.js +8 -0
  163. package/src/core/bypassNativeEvent.js +11 -0
  164. package/src/core/cameraCircleBounds.js +7 -0
  165. package/src/core/cameraMarkerDrag.js +21 -0
  166. package/src/core/cameraMarkerOnDrag.js +13 -0
  167. package/src/core/cancelGridFade.js +14 -0
  168. package/src/core/closestCameraLayerPoint.js +8 -0
  169. package/src/core/compareNativeHits.js +3 -0
  170. package/src/core/current.js +6 -0
  171. package/src/core/disposeNativeLayer.js +39 -0
  172. package/src/core/fireRasterLoad.js +6 -0
  173. package/src/core/forwardNativeError.js +3 -0
  174. package/src/core/gridlayerGetEvents.js +10 -0
  175. package/src/core/gridlayerGetTiledPixelBounds.js +12 -0
  176. package/src/core/handleNativeMapEvent.js +27 -0
  177. package/src/core/hideTargets.js +18 -0
  178. package/src/core/initNativeGPU.js +25 -0
  179. package/src/core/initializeGridContainer.js +7 -0
  180. package/src/core/initializeNativeLayer.js +40 -0
  181. package/src/core/layerCallInitHooks.js +14 -0
  182. package/src/core/localPixel.js +5 -0
  183. package/src/core/localPixelForGeometry.js +7 -0
  184. package/src/core/localPosition.js +10 -0
  185. package/src/core/markerCameraIconPoint.js +12 -0
  186. package/src/core/markerGetEvents.js +9 -0
  187. package/src/core/markerImageBounds.js +11 -0
  188. package/src/core/markerInitInteraction.js +10 -0
  189. package/src/core/markerQuadCorners.js +48 -0
  190. package/src/core/markerSetIcon.js +12 -0
  191. package/src/core/markerSetPos.js +19 -0
  192. package/src/core/markerSetRotation.js +9 -0
  193. package/src/core/markerUpdateZIndex.js +12 -0
  194. package/src/core/nativeAddLatLng.js +3 -0
  195. package/src/core/nativeBringToBack.js +3 -0
  196. package/src/core/nativeBringToFront.js +3 -0
  197. package/src/core/nativeEventSource.js +18 -0
  198. package/src/core/nativeEvents.js +31 -0
  199. package/src/core/nativeImageError.js +13 -0
  200. package/src/core/nativeImageRefresh.js +11 -0
  201. package/src/core/nativeLayer.js +100 -0
  202. package/src/core/nativeLayerMethod.js +26 -0
  203. package/src/core/nativeRedraw.js +3 -0
  204. package/src/core/nativeSetBounds.js +3 -0
  205. package/src/core/nativeSetIcon.js +3 -0
  206. package/src/core/nativeSetLatLng.js +3 -0
  207. package/src/core/nativeSetLatLngs.js +3 -0
  208. package/src/core/nativeSetOpacity.js +3 -0
  209. package/src/core/nativeSetRadius.js +3 -0
  210. package/src/core/nativeSetStyle.js +3 -0
  211. package/src/core/nativeSetUrl.js +3 -0
  212. package/src/core/nativeSetZIndex.js +3 -0
  213. package/src/core/nativeSetZIndexOffset.js +3 -0
  214. package/src/core/popupAdjustPan.js +29 -0
  215. package/src/core/popupGetEvents.js +8 -0
  216. package/src/core/popupUpdatePosition.js +17 -0
  217. package/src/core/pruneNativeResources.js +20 -0
  218. package/src/core/putNativeMesh.js +36 -0
  219. package/src/core/quadNativeMesh.js +20 -0
  220. package/src/core/readyNativeGPU.js +9 -0
  221. package/src/core/redrawPath.js +6 -0
  222. package/src/core/refreshNativeEvent.js +5 -0
  223. package/src/core/refreshNativeLayer.js +34 -0
  224. package/src/core/refreshNativeLayerContract.js +8 -0
  225. package/src/core/rejectNativeReady.js +4 -0
  226. package/src/core/removeImageState.js +9 -0
  227. package/src/core/removeLayer.js +22 -0
  228. package/src/core/removeNativeEvents.js +17 -0
  229. package/src/core/removeTargets.js +12 -0
  230. package/src/core/reorderNativeLayer.js +9 -0
  231. package/src/core/resolveNativeReady.js +4 -0
  232. package/src/core/restoreNativeEvents.js +6 -0
  233. package/src/core/runGridFades.js +19 -0
  234. package/src/core/runMarkerPanFrame.js +14 -0
  235. package/src/core/scheduleGridFade.js +14 -0
  236. package/src/core/scheduleMarkerPan.js +11 -0
  237. package/src/core/setRotation.js +5 -0
  238. package/src/core/styleNativeMesh.js +14 -0
  239. package/src/core/syncGridLayer.js +29 -0
  240. package/src/core/syncImageOverlay.js +9 -0
  241. package/src/core/syncMarker.js +14 -0
  242. package/src/core/syncVectorLayer.js +29 -0
  243. package/src/core/synchronizeNativeLayer.js +26 -0
  244. package/src/core/textureFor.js +46 -0
  245. package/src/core/tooltipGetEvents.js +8 -0
  246. package/src/core/tooltipSetPosition.js +11 -0
  247. package/src/core/transformNativePoint.js +7 -0
  248. package/src/core/updateGridOpacity.js +27 -0
  249. package/src/core/updateNativeHover.js +7 -0
  250. package/src/core/updateNativeLayerView.js +9 -0
  251. package/src/core/uploadCanvasTexture.js +22 -0
  252. package/src/core/uploadNativeImage.js +13 -0
  253. package/src/geometry/addBridges.js +29 -0
  254. package/src/geometry/below.js +3 -0
  255. package/src/geometry/box.js +8 -0
  256. package/src/geometry/bridgeEdge.js +11 -0
  257. package/src/geometry/bridgeElevation.js +21 -0
  258. package/src/geometry/bridgeFaces.js +15 -0
  259. package/src/geometry/bridgeLocal.js +5 -0
  260. package/src/geometry/bridgePaths.js +11 -0
  261. package/src/geometry/bridgePolygon.js +31 -0
  262. package/src/geometry/bridgeSides.js +11 -0
  263. package/src/geometry/build.js +23 -0
  264. package/src/geometry/circleAt.js +7 -0
  265. package/src/geometry/circleGeometry.js +34 -0
  266. package/src/geometry/clipLine.js +23 -0
  267. package/src/geometry/clipSegment.js +23 -0
  268. package/src/geometry/computeBounds.js +38 -0
  269. package/src/geometry/conformModelToTerrain.js +72 -0
  270. package/src/geometry/cross.js +7 -0
  271. package/src/geometry/dashValues.js +14 -0
  272. package/src/geometry/dashedSegment.js +16 -0
  273. package/src/geometry/disk.js +11 -0
  274. package/src/geometry/diskAt.js +6 -0
  275. package/src/geometry/dot.js +6 -0
  276. package/src/geometry/emitter.js +8 -0
  277. package/src/geometry/indexBridge.js +29 -0
  278. package/src/geometry/lampPostGeometry.js +30 -0
  279. package/src/geometry/lampRing.js +14 -0
  280. package/src/geometry/lightGeometry.js +15 -0
  281. package/src/geometry/line.js +21 -0
  282. package/src/geometry/lineJoin.js +26 -0
  283. package/src/geometry/nativeGeometry.js +21 -0
  284. package/src/geometry/nativeTriangle.js +3 -0
  285. package/src/geometry/polygon.js +23 -0
  286. package/src/geometry/push.js +3 -0
  287. package/src/geometry/quad.js +9 -0
  288. package/src/geometry/roofCoverage.js +23 -0
  289. package/src/geometry/roofFootprint.js +29 -0
  290. package/src/geometry/samePoint.js +3 -0
  291. package/src/geometry/segment.js +22 -0
  292. package/src/geometry/setVertexColor.js +17 -0
  293. package/src/geometry/sub.js +6 -0
  294. package/src/geometry/subtractRoofTile.js +19 -0
  295. package/src/geometry/surface.js +18 -0
  296. package/src/geometry/treeGeometry.js +30 -0
  297. package/src/geometry/treeRing.js +15 -0
  298. package/src/geometry/triangle.js +13 -0
  299. package/src/geometry/validateTree.js +7 -0
  300. package/src/geometry/vertexNormals.js +26 -0
  301. package/src/geometry/visit.js +10 -0
  302. package/src/globals/CELL.js +3 -0
  303. package/src/globals/Compass.js +1 -0
  304. package/src/globals/ContainerResize.js +1 -0
  305. package/src/globals/HEIGHT.js +1 -0
  306. package/src/globals/L.js +1 -0
  307. package/src/globals/PitchDrag.js +1 -0
  308. package/src/globals/ShiftRotate.js +1 -0
  309. package/src/globals/TILE_RADIUS.js +1 -0
  310. package/src/globals/TILE_SIZE.js +1 -0
  311. package/src/globals/TouchMode.js +1 -0
  312. package/src/globals/alphaBlend.js +12 -0
  313. package/src/globals/archiveDecoder.js +1 -0
  314. package/src/globals/archiveNorthWest.js +1 -0
  315. package/src/globals/archiveSouthEast.js +1 -0
  316. package/src/globals/atmosphereColor.js +1 -0
  317. package/src/globals/atmosphereStops.js +22 -0
  318. package/src/globals/blobParts.js +1 -0
  319. package/src/globals/boundsMethods.js +1 -0
  320. package/src/globals/cameraAngles.js +1 -0
  321. package/src/globals/cameraAnimatedOptions.js +3 -0
  322. package/src/globals/cameraAnimationFrame.js +1 -0
  323. package/src/globals/cameraAnimations.js +1 -0
  324. package/src/globals/cameraBearingSensitivity.js +1 -0
  325. package/src/globals/cameraByMap.js +1 -0
  326. package/src/globals/cameraDragSensitivity.js +1 -0
  327. package/src/globals/cameraDrags.js +1 -0
  328. package/src/globals/cameraEmptyOptions.js +1 -0
  329. package/src/globals/cameraFocusOptions.js +3 -0
  330. package/src/globals/cameraFov.js +3 -0
  331. package/src/globals/cameraListenerOptions.js +4 -0
  332. package/src/globals/cameraTouchStates.js +1 -0
  333. package/src/globals/cameraZeroPadding.js +1 -0
  334. package/src/globals/closestMethods.js +1 -0
  335. package/src/globals/cogTags.js +1 -0
  336. package/src/globals/colliders.js +1 -0
  337. package/src/globals/colorLayout.js +8 -0
  338. package/src/globals/coreEventTypes.js +4 -0
  339. package/src/globals/coreMatrixKeys.js +4 -0
  340. package/src/globals/coreQuadIndices.js +1 -0
  341. package/src/globals/coreQuadUV.js +1 -0
  342. package/src/globals/coreSampler.js +4 -0
  343. package/src/globals/coreWhite.js +1 -0
  344. package/src/globals/cosObliquity.js +3 -0
  345. package/src/globals/coverageTiles.js +1 -0
  346. package/src/globals/dark.js +1 -0
  347. package/src/globals/defaultMaterial.js +1 -0
  348. package/src/globals/degrees.js +1 -0
  349. package/src/globals/demBuffer.js +4 -0
  350. package/src/globals/demLayout.js +3 -0
  351. package/src/globals/demSize.js +1 -0
  352. package/src/globals/demTarget.js +3 -0
  353. package/src/globals/demTexture.js +5 -0
  354. package/src/globals/depthBindGroup.js +9 -0
  355. package/src/globals/depthTexture.js +5 -0
  356. package/src/globals/directoryReader.js +4 -0
  357. package/src/globals/disabledShadow.js +1 -0
  358. package/src/globals/dragByHandler.js +1 -0
  359. package/src/globals/dragStates.js +1 -0
  360. package/src/globals/drawEntries.js +1 -0
  361. package/src/globals/drawFrameEntry.js +7 -0
  362. package/src/globals/drawMeshEntry.js +7 -0
  363. package/src/globals/drawSamplerEntries.js +18 -0
  364. package/src/globals/drawTerrainEntry.js +4 -0
  365. package/src/globals/drawTextureEntries.js +18 -0
  366. package/src/globals/earthCirc.js +1 -0
  367. package/src/globals/elevationWGSL.js +27 -0
  368. package/src/globals/fragmentShader.js +3 -0
  369. package/src/globals/frameBuffer.js +4 -0
  370. package/src/globals/frameCommands.js +1 -0
  371. package/src/globals/frameLayoutEntry.js +7 -0
  372. package/src/globals/geometryDecoder.js +1 -0
  373. package/src/globals/geometryEmpty.js +1 -0
  374. package/src/globals/geometryImageOptions.js +4 -0
  375. package/src/globals/geometryPixelStates.js +1 -0
  376. package/src/globals/geometryQuaternion.js +1 -0
  377. package/src/globals/geometryScale.js +1 -0
  378. package/src/globals/geometrySemantics.js +5 -0
  379. package/src/globals/geometryTranslation.js +1 -0
  380. package/src/globals/glass.js +1 -0
  381. package/src/globals/gridEvents.js +1 -0
  382. package/src/globals/gridFadeFrame.js +1 -0
  383. package/src/globals/gridInitializers.js +1 -0
  384. package/src/globals/halfRadians.js +1 -0
  385. package/src/globals/headerBounds.js +1 -0
  386. package/src/globals/headerFlags.js +1 -0
  387. package/src/globals/headerOffsets.js +5 -0
  388. package/src/globals/hull.js +10 -0
  389. package/src/globals/imageStates.js +1 -0
  390. package/src/globals/instanceLayout.js +9 -0
  391. package/src/globals/lampDirections.js +8 -0
  392. package/src/globals/layerCallInitHooks.js +1 -0
  393. package/src/globals/layerProto.js +1 -0
  394. package/src/globals/lightScale.js +1 -0
  395. package/src/globals/limbs.js +8 -0
  396. package/src/globals/loading.js +1 -0
  397. package/src/globals/mapMethods.js +1 -0
  398. package/src/globals/markerMethods.js +1 -0
  399. package/src/globals/markerPanFrame.js +1 -0
  400. package/src/globals/meshBindGroup.js +4 -0
  401. package/src/globals/meshBuffer.js +4 -0
  402. package/src/globals/meshCopySize.js +1 -0
  403. package/src/globals/meshImage.js +4 -0
  404. package/src/globals/meshLayoutEntry.js +8 -0
  405. package/src/globals/meshOffsets.js +1 -0
  406. package/src/globals/meshPipeline.js +27 -0
  407. package/src/globals/meshStack.js +3 -0
  408. package/src/globals/meshTarget.js +3 -0
  409. package/src/globals/nativeEventMaps.js +1 -0
  410. package/src/globals/nativeMethodHandlers.js +31 -0
  411. package/src/globals/nativeRenderByLayer.js +1 -0
  412. package/src/globals/nextId.js +1 -0
  413. package/src/globals/normalLayout.js +8 -0
  414. package/src/globals/parts.js +24 -0
  415. package/src/globals/pendingGridFades.js +1 -0
  416. package/src/globals/pendingInitializations.js +1 -0
  417. package/src/globals/pendingMapChanges.js +1 -0
  418. package/src/globals/pendingMarkerPan.js +1 -0
  419. package/src/globals/pendingPlacements.js +1 -0
  420. package/src/globals/pendingRasterLoads.js +1 -0
  421. package/src/globals/pendingUpdates.js +1 -0
  422. package/src/globals/pendingZoomAnimations.js +1 -0
  423. package/src/globals/pipelineLayout.js +3 -0
  424. package/src/globals/popupEvents.js +1 -0
  425. package/src/globals/popupPan.js +1 -0
  426. package/src/globals/popupPosition.js +1 -0
  427. package/src/globals/positionLayout.js +8 -0
  428. package/src/globals/programEntries.js +1 -0
  429. package/src/globals/programLayout.js +3 -0
  430. package/src/globals/radians.js +1 -0
  431. package/src/globals/rasterBuffer.js +4 -0
  432. package/src/globals/rasterIndices.js +1 -0
  433. package/src/globals/rasterNormals.js +1 -0
  434. package/src/globals/rasterPoint.js +4 -0
  435. package/src/globals/rasterPositions.js +1 -0
  436. package/src/globals/rasterSampler.js +6 -0
  437. package/src/globals/rasterTexture.js +5 -0
  438. package/src/globals/rasterUVs.js +1 -0
  439. package/src/globals/removeLayer.js +1 -0
  440. package/src/globals/renderEmpty.js +1 -0
  441. package/src/globals/rendererDevices.js +1 -0
  442. package/src/globals/ringDirections.js +49 -0
  443. package/src/globals/roofBindGroup.js +17 -0
  444. package/src/globals/roofBlitSampler.js +4 -0
  445. package/src/globals/roofBuffer.js +4 -0
  446. package/src/globals/roofCommands.js +1 -0
  447. package/src/globals/roofCopySize.js +1 -0
  448. package/src/globals/roofImage.js +3 -0
  449. package/src/globals/roofMin.js +4 -0
  450. package/src/globals/roofOpacities.js +1 -0
  451. package/src/globals/roofPass.js +13 -0
  452. package/src/globals/roofPipeline.js +29 -0
  453. package/src/globals/roofSampler.js +4 -0
  454. package/src/globals/roofShader.js +16 -0
  455. package/src/globals/roofSignatures.js +1 -0
  456. package/src/globals/roofSize.js +4 -0
  457. package/src/globals/roofTarget.js +3 -0
  458. package/src/globals/roofTexture.js +5 -0
  459. package/src/globals/roofTiles.js +1 -0
  460. package/src/globals/roundProfile.js +7 -0
  461. package/src/globals/samplerLayoutEntries.js +36 -0
  462. package/src/globals/sceneByLayer.js +1 -0
  463. package/src/globals/sceneCleanupFields.js +1 -0
  464. package/src/globals/sceneEmptyOptions.js +1 -0
  465. package/src/globals/scenePass.js +19 -0
  466. package/src/globals/sceneSunlightUniforms.js +3 -0
  467. package/src/globals/sceneTransferFields.js +1 -0
  468. package/src/globals/sceneWalkHandlers.js +1 -0
  469. package/src/globals/shadowBindGroup.js +10 -0
  470. package/src/globals/shadowBounds.js +4 -0
  471. package/src/globals/shadowCamera.js +15 -0
  472. package/src/globals/shadowDepthLayout.js +9 -0
  473. package/src/globals/shadowHigh.js +1 -0
  474. package/src/globals/shadowInstanceLayouts.js +4 -0
  475. package/src/globals/shadowLayouts.js +3 -0
  476. package/src/globals/shadowLow.js +1 -0
  477. package/src/globals/shadowMeshLayout.js +10 -0
  478. package/src/globals/shadowOffsets.js +1 -0
  479. package/src/globals/shadowPass.js +9 -0
  480. package/src/globals/shadowPipeline.js +24 -0
  481. package/src/globals/shadowPipelineLayout.js +3 -0
  482. package/src/globals/shadowShader.js +3 -0
  483. package/src/globals/shadowTexture.js +5 -0
  484. package/src/globals/shadowValues.js +1 -0
  485. package/src/globals/shirt.js +1 -0
  486. package/src/globals/sinObliquity.js +3 -0
  487. package/src/globals/sizes.js +6 -0
  488. package/src/globals/skin.js +2 -0
  489. package/src/globals/sunBindGroup.js +20 -0
  490. package/src/globals/sunByMap.js +1 -0
  491. package/src/globals/sunlightByControl.js +1 -0
  492. package/src/globals/tau.js +1 -0
  493. package/src/globals/terrainLayoutEntry.js +8 -0
  494. package/src/globals/textureLayoutEntries.js +41 -0
  495. package/src/globals/tiledBounds.js +1 -0
  496. package/src/globals/tooltipEvents.js +1 -0
  497. package/src/globals/tooltipPosition.js +1 -0
  498. package/src/globals/touchByContainer.js +1 -0
  499. package/src/globals/trafficByLayer.js +1 -0
  500. package/src/globals/trafficClocks.js +1 -0
  501. package/src/globals/trafficEmptyList.js +1 -0
  502. package/src/globals/trafficEmptyOptions.js +1 -0
  503. package/src/globals/trafficRouteMaterial.js +1 -0
  504. package/src/globals/trafficShader.js +49 -0
  505. package/src/globals/triangleContexts.js +1 -0
  506. package/src/globals/trousers.js +1 -0
  507. package/src/globals/tyre.js +1 -0
  508. package/src/globals/uVLayout.js +8 -0
  509. package/src/globals/vehicles.js +55 -0
  510. package/src/globals/vertexShader.js +3 -0
  511. package/src/globals/walkByMap.js +1 -0
  512. package/src/globals/wantedTiles.js +1 -0
  513. package/src/index.js +48 -328
  514. package/src/lighting/cacheLightGrid.js +32 -0
  515. package/src/lighting/collectLightMeshes.js +9 -0
  516. package/src/lighting/lightGrid.js +43 -0
  517. package/src/lighting/updatePointLights.js +38 -0
  518. package/src/lighting/visitCells.js +8 -0
  519. package/src/lighting/visitLightCells.js +13 -0
  520. package/src/lighting/worldLights.js +25 -0
  521. package/src/lighting/writeLightCell.js +5 -0
  522. package/src/models/applyModelTransform.js +13 -0
  523. package/src/models/buildModelNodes.js +14 -0
  524. package/src/models/createModelContext.js +15 -0
  525. package/src/models/createModelGeometry.js +40 -0
  526. package/src/models/decodeModel.js +48 -0
  527. package/src/models/hasUnsupportedPrimitives.js +10 -0
  528. package/src/models/loadBuffer.js +6 -0
  529. package/src/models/loadImage.js +19 -0
  530. package/src/models/loadModel.js +44 -0
  531. package/src/models/loadModelResources.js +19 -0
  532. package/src/models/materialFor.js +21 -0
  533. package/src/models/modelNode.js +49 -0
  534. package/src/models/nodeMatrix.js +27 -0
  535. package/src/models/normalizeAccessor.js +11 -0
  536. package/src/models/readAccessor.js +33 -0
  537. package/src/models/readAccessorValue.js +7 -0
  538. package/src/models/readAccessorValues.js +20 -0
  539. package/src/models/readModelAttributes.js +20 -0
  540. package/src/models/readModelIndices.js +16 -0
  541. package/src/models/readSparseAccessor.js +19 -0
  542. package/src/models/releaseModelResources.js +10 -0
  543. package/src/models/textureFor.js +38 -0
  544. package/src/models/textureSampler.js +10 -0
  545. package/src/picking/collectVisibleMesh.js +4 -0
  546. package/src/picking/findFeature.js +52 -0
  547. package/src/picking/hit.js +24 -0
  548. package/src/picking/hitColliderCell.js +19 -0
  549. package/src/picking/hitMesh.js +26 -0
  550. package/src/picking/onClick.js +16 -0
  551. package/src/picking/onPointerLeave.js +14 -0
  552. package/src/picking/onPointerMove.js +18 -0
  553. package/src/picking/pointerClick.js +5 -0
  554. package/src/picking/pointerLeave.js +5 -0
  555. package/src/picking/pointerMove.js +5 -0
  556. package/src/picking/raycast.js +66 -0
  557. package/src/picking/setHighlight.js +20 -0
  558. package/src/picking/shouldSkipOther.js +6 -0
  559. package/src/picking/showFeature.js +37 -0
  560. package/src/picking/validateCameraInverse.js +8 -0
  561. package/src/raster/addRasterTile.js +69 -0
  562. package/src/raster/comparePendingTiles.js +5 -0
  563. package/src/raster/createGeometry.js +29 -0
  564. package/src/raster/createRasterMesh.js +76 -0
  565. package/src/raster/finishAttachment.js +15 -0
  566. package/src/raster/finishRasterTile.js +61 -0
  567. package/src/raster/getRasterEvents.js +6 -0
  568. package/src/raster/getRasterTileSize.js +7 -0
  569. package/src/raster/initRaster.js +33 -0
  570. package/src/raster/isLoading.js +7 -0
  571. package/src/raster/loadRasterTile.js +13 -0
  572. package/src/raster/onPMTileAdd.js +13 -0
  573. package/src/raster/onPMTileRemove.js +11 -0
  574. package/src/raster/pruneRasterTiles.js +40 -0
  575. package/src/raster/pumpRasterTiles.js +26 -0
  576. package/src/raster/rasterTileRange.js +23 -0
  577. package/src/raster/readyRaster.js +16 -0
  578. package/src/raster/registerTerrainTile.js +15 -0
  579. package/src/raster/releaseRasterTile.js +21 -0
  580. package/src/raster/releaseRasterTiles.js +18 -0
  581. package/src/raster/removeRasterTile.js +16 -0
  582. package/src/raster/reportError.js +6 -0
  583. package/src/raster/retainRasterTiles.js +15 -0
  584. package/src/raster/setPMTileOpacity.js +7 -0
  585. package/src/raster/setPMTileZIndex.js +7 -0
  586. package/src/raster/setRasterOpacity.js +14 -0
  587. package/src/raster/setRasterTerrain.js +25 -0
  588. package/src/raster/setRasterZIndex.js +14 -0
  589. package/src/raster/terrainTileGeometry.js +16 -0
  590. package/src/raster/updateAttachedTiles.js +13 -0
  591. package/src/raster/updateRasterTiles.js +51 -0
  592. package/src/rendering/bindMeshTextures.js +50 -0
  593. package/src/rendering/collectFrameMeshes.js +38 -0
  594. package/src/rendering/collectMeshes.js +14 -0
  595. package/src/rendering/collectRoofTiles.js +15 -0
  596. package/src/rendering/collectVisibleMesh.js +27 -0
  597. package/src/rendering/compareMeshDepth.js +6 -0
  598. package/src/rendering/compareMeshes.js +8 -0
  599. package/src/rendering/compareRoofTiles.js +4 -0
  600. package/src/rendering/composeRoofAtlas.js +69 -0
  601. package/src/rendering/createMesh.js +44 -0
  602. package/src/rendering/createProgram.js +75 -0
  603. package/src/rendering/createProgramLayout.js +36 -0
  604. package/src/rendering/createProgramUniforms.js +17 -0
  605. package/src/rendering/destroyAfterSubmission.js +8 -0
  606. package/src/rendering/destroyTexture.js +9 -0
  607. package/src/rendering/disposeMesh.js +14 -0
  608. package/src/rendering/drawGeometry.js +41 -0
  609. package/src/rendering/drawPipeline.js +34 -0
  610. package/src/rendering/drawSceneMeshes.js +48 -0
  611. package/src/rendering/ensureRoofBlit.js +20 -0
  612. package/src/rendering/prepareFrameBuffer.js +17 -0
  613. package/src/rendering/prepareFrameMeshes.js +37 -0
  614. package/src/rendering/prepareFrameUniforms.js +44 -0
  615. package/src/rendering/prepareMeshCutout.js +12 -0
  616. package/src/rendering/prepareMeshTextures.js +23 -0
  617. package/src/rendering/prepareMeshUniforms.js +25 -0
  618. package/src/rendering/rebuildRoofAtlas.js +52 -0
  619. package/src/rendering/render.js +69 -0
  620. package/src/rendering/reportCompilation.js +17 -0
  621. package/src/rendering/resizeRenderer.js +24 -0
  622. package/src/rendering/resizeRoofTexture.js +24 -0
  623. package/src/rendering/revealRoofMesh.js +15 -0
  624. package/src/rendering/sortMeshes.js +6 -0
  625. package/src/rendering/synchronizeZoomView.js +26 -0
  626. package/src/rendering/textureBinding.js +7 -0
  627. package/src/rendering/updateMapCamera.js +46 -0
  628. package/src/rendering/updateRoofAtlas.js +20 -0
  629. package/src/rendering/updateRoofRaster.js +25 -0
  630. package/src/rendering/updateZoomCamera.js +18 -0
  631. package/src/rendering/uploadMeshTexture.js +26 -0
  632. package/src/rendering/uploadRoofTile.js +23 -0
  633. package/src/scene/addSceneLayer.js +17 -0
  634. package/src/scene/attach.js +54 -0
  635. package/src/scene/attachLayer.js +13 -0
  636. package/src/scene/callLayer.js +26 -0
  637. package/src/scene/cancelUpdate.js +13 -0
  638. package/src/scene/composeLocalTransform.js +16 -0
  639. package/src/scene/createLayer.js +7 -0
  640. package/src/scene/createSceneCamera.js +21 -0
  641. package/src/scene/emptyEvents.js +3 -0
  642. package/src/scene/emptyNode.js +12 -0
  643. package/src/scene/endZoom.js +23 -0
  644. package/src/scene/failAttachment.js +12 -0
  645. package/src/scene/get3DEvents.js +16 -0
  646. package/src/scene/getLocation.js +7 -0
  647. package/src/scene/init3D.js +43 -0
  648. package/src/scene/initializeLayer.js +22 -0
  649. package/src/scene/initializeRendererResources.js +35 -0
  650. package/src/scene/initializeSharedRenderer.js +45 -0
  651. package/src/scene/initializerFor.js +16 -0
  652. package/src/scene/isNativeLayer.js +12 -0
  653. package/src/scene/layerCountTitle.js +4 -0
  654. package/src/scene/layerInitialize.js +48 -0
  655. package/src/scene/layerLayerAdd.js +43 -0
  656. package/src/scene/mountRenderer.js +25 -0
  657. package/src/scene/onAdd3DLayer.js +39 -0
  658. package/src/scene/onMapChange.js +18 -0
  659. package/src/scene/onRemove3DLayer.js +63 -0
  660. package/src/scene/onZoomAnim.js +18 -0
  661. package/src/scene/placeEntry.js +13 -0
  662. package/src/scene/placeEntryElement.js +22 -0
  663. package/src/scene/placeUnderEntry.js +8 -0
  664. package/src/scene/ready.js +9 -0
  665. package/src/scene/ready3D.js +35 -0
  666. package/src/scene/releaseRenderer.js +14 -0
  667. package/src/scene/releaseSharedScene.js +25 -0
  668. package/src/scene/removeEntry.js +8 -0
  669. package/src/scene/removeLayerEvents.js +9 -0
  670. package/src/scene/removeSceneLayer.js +15 -0
  671. package/src/scene/renderLayerCount.js +13 -0
  672. package/src/scene/renderPendingMapChange.js +15 -0
  673. package/src/scene/renderPendingUpdates.js +23 -0
  674. package/src/scene/renderPendingZoomAnimation.js +11 -0
  675. package/src/scene/rendererDeviceError.js +14 -0
  676. package/src/scene/rendererDeviceLost.js +14 -0
  677. package/src/scene/replaceEntry.js +9 -0
  678. package/src/scene/reportError.js +3 -0
  679. package/src/scene/requestAdapter.js +12 -0
  680. package/src/scene/requestDevice.js +9 -0
  681. package/src/scene/resolveNextInitialization.js +13 -0
  682. package/src/scene/restoreGeometry.js +23 -0
  683. package/src/scene/restoreMaterialTextures.js +16 -0
  684. package/src/scene/restoreObject.js +35 -0
  685. package/src/scene/runPlacements.js +9 -0
  686. package/src/scene/showWebGPUWarning.js +16 -0
  687. package/src/scene/startZoom.js +8 -0
  688. package/src/scene/traverse.js +7 -0
  689. package/src/scene/underEntry.js +16 -0
  690. package/src/scene/update.js +23 -0
  691. package/src/scene/updateCamera.js +57 -0
  692. package/src/scene/updateLayerCount.js +22 -0
  693. package/src/scene/updateWorldMatrix.js +43 -0
  694. package/src/scene/worldMatrixChanged.js +18 -0
  695. package/src/shaders/materialBaseShader.js +17 -0
  696. package/src/shaders/materialShaders.js +130 -0
  697. package/src/shaders/materialSurfaceShader.js +47 -0
  698. package/src/shaders/materialVertexShader.js +72 -0
  699. package/src/shaders/roofVertexShader.js +9 -0
  700. package/src/shaders/validateRoofMaterial.js +10 -0
  701. package/src/shadows/bindSunlight.js +21 -0
  702. package/src/shadows/drawShadowMeshes.js +58 -0
  703. package/src/shadows/ensureShadowPipeline.js +64 -0
  704. package/src/shadows/meshShadowBounds.js +24 -0
  705. package/src/shadows/renderSunlight.js +48 -0
  706. package/src/shadows/resizeSunlight.js +21 -0
  707. package/src/shadows/shadowBounds.js +23 -0
  708. package/src/shadows/shadowCacheMatches.js +17 -0
  709. package/src/shadows/shadowMatrix.js +49 -0
  710. package/src/shadows/shadowMeshMatches.js +11 -0
  711. package/src/sources/addGeneratedTriangle.js +7 -0
  712. package/src/sources/addTriangle.js +17 -0
  713. package/src/sources/attachAreaMesh.js +64 -0
  714. package/src/sources/buildArea.js +46 -0
  715. package/src/sources/buildAreaFeature.js +36 -0
  716. package/src/sources/buildAreaPoint.js +25 -0
  717. package/src/sources/buildAreaPolygon.js +29 -0
  718. package/src/sources/compareAreaDistance.js +3 -0
  719. package/src/sources/extrusionStyle.js +10 -0
  720. package/src/sources/featureAnchor.js +9 -0
  721. package/src/sources/generateTreeGeometry.js +13 -0
  722. package/src/sources/groundOffset.js +3 -0
  723. package/src/sources/initializeGeoJSON.js +10 -0
  724. package/src/sources/instanceAreaGeometry.js +31 -0
  725. package/src/sources/pendingSourceAreas.js +20 -0
  726. package/src/sources/projectRing.js +27 -0
  727. package/src/sources/projectedTree.js +19 -0
  728. package/src/sources/pump.js +44 -0
  729. package/src/sources/releaseArea.js +25 -0
  730. package/src/sources/setGeoJSONData.js +15 -0
  731. package/src/sources/setGeoJSONLayerData.js +5 -0
  732. package/src/sources/sourceAreaContext.js +19 -0
  733. package/src/sources/updateArea.js +52 -0
  734. package/src/sources/updateStatus.js +15 -0
  735. package/src/sunlight/addTimeLayer.js +6 -0
  736. package/src/sunlight/addTo.js +11 -0
  737. package/src/sunlight/atmosphere.js +25 -0
  738. package/src/sunlight/createSun.js +54 -0
  739. package/src/sunlight/horizontalPosition.js +16 -0
  740. package/src/sunlight/initSunlight.js +17 -0
  741. package/src/sunlight/initialize.js +14 -0
  742. package/src/sunlight/mix.js +7 -0
  743. package/src/sunlight/moonPosition.js +18 -0
  744. package/src/sunlight/onAdd.js +5 -0
  745. package/src/sunlight/onAddSun.js +27 -0
  746. package/src/sunlight/onRemoveSun.js +10 -0
  747. package/src/sunlight/projectCelestialBody.js +13 -0
  748. package/src/sunlight/remove.js +8 -0
  749. package/src/sunlight/removeSun.js +21 -0
  750. package/src/sunlight/removeTimeLayer.js +7 -0
  751. package/src/sunlight/render.js +9 -0
  752. package/src/sunlight/rgb.js +8 -0
  753. package/src/sunlight/solarPosition.js +18 -0
  754. package/src/sunlight/solarTime.js +11 -0
  755. package/src/sunlight/styleTimeControl.js +7 -0
  756. package/src/sunlight/tickSun.js +5 -0
  757. package/src/sunlight/updateCelestialDisc.js +12 -0
  758. package/src/sunlight/updateSky.js +17 -0
  759. package/src/sunlight/updateSun.js +40 -0
  760. package/src/sunlight/useLiveTime.js +6 -0
  761. package/src/sunlight/useSelectedTime.js +23 -0
  762. package/src/terrain/applyTerrain.js +21 -0
  763. package/src/terrain/clearLayerTerrain.js +8 -0
  764. package/src/terrain/copyTerrainTile.js +12 -0
  765. package/src/terrain/getElevation.js +14 -0
  766. package/src/terrain/initTerrain.js +23 -0
  767. package/src/terrain/loadReadyTerrain.js +5 -0
  768. package/src/terrain/loadTerrain.js +43 -0
  769. package/src/terrain/loadTerrainTiles.js +17 -0
  770. package/src/terrain/onTerrainAdd.js +25 -0
  771. package/src/terrain/onTerrainChange.js +17 -0
  772. package/src/terrain/onTerrainRemove.js +45 -0
  773. package/src/terrain/rasterProgram.js +51 -0
  774. package/src/terrain/readBridges.js +4 -0
  775. package/src/terrain/sample.js +7 -0
  776. package/src/terrain/setLayerTerrain.js +8 -0
  777. package/src/terrain/setTerrainHeight.js +14 -0
  778. package/src/terrain/terrainAtlas.js +17 -0
  779. package/src/terrain/terrainBuffers.js +27 -0
  780. package/src/terrain/terrainElevation.js +15 -0
  781. package/src/terrain/terrainGrid.js +32 -0
  782. package/src/terrain/terrainTileQueue.js +25 -0
  783. package/src/traffic/addTraffic.js +10 -0
  784. package/src/traffic/along.js +20 -0
  785. package/src/traffic/appendRouteDash.js +15 -0
  786. package/src/traffic/appendRouteSegment.js +15 -0
  787. package/src/traffic/clockMinutes.js +6 -0
  788. package/src/traffic/compareDepartures.js +5 -0
  789. package/src/traffic/createTrafficMesh.js +7 -0
  790. package/src/traffic/destroyTrafficGpu.js +7 -0
  791. package/src/traffic/disposeTrafficObject.js +16 -0
  792. package/src/traffic/drawTrafficRoute.js +9 -0
  793. package/src/traffic/failTraffic.js +6 -0
  794. package/src/traffic/failedTrafficLoad.js +5 -0
  795. package/src/traffic/fetchTrafficLanes.js +10 -0
  796. package/src/traffic/groundTraffic.js +19 -0
  797. package/src/traffic/initTraffic.js +66 -0
  798. package/src/traffic/loadTraffic.js +15 -0
  799. package/src/traffic/loadedTrafficLanes.js +16 -0
  800. package/src/traffic/locateTraffic.js +11 -0
  801. package/src/traffic/moveTraffic.js +15 -0
  802. package/src/traffic/placeTraffic.js +21 -0
  803. package/src/traffic/prepareTraffic.js +30 -0
  804. package/src/traffic/readyTraffic.js +6 -0
  805. package/src/traffic/rebaseTraffic.js +60 -0
  806. package/src/traffic/rebuildTrafficMesh.js +32 -0
  807. package/src/traffic/refreshTrafficTrips.js +32 -0
  808. package/src/traffic/removeTraffic.js +20 -0
  809. package/src/traffic/routeColor.js +6 -0
  810. package/src/traffic/routeGeometry.js +21 -0
  811. package/src/traffic/scheduledTrips.js +51 -0
  812. package/src/traffic/startTraffic.js +8 -0
  813. package/src/traffic/tickTraffic.js +26 -0
  814. package/src/traffic/toLanes.js +24 -0
  815. package/src/traffic/tooltip.js +9 -0
  816. package/src/traffic/trafficBounds.js +21 -0
  817. package/src/traffic/trafficNow.js +10 -0
  818. package/src/traffic/trafficStatusText.js +5 -0
  819. package/src/traffic/trafficStorage.js +5 -0
  820. package/src/traffic/tripsAt.js +27 -0
  821. package/src/traffic/updateTraffic.js +11 -0
  822. package/src/traffic/updateTrafficLights.js +16 -0
  823. package/src/traffic/updateTrafficPose.js +8 -0
  824. package/src/traffic/updateTrafficTerrain.js +12 -0
  825. package/src/traffic/uploadTrafficLanes.js +21 -0
  826. package/src/traffic/vehicleOffsets.js +12 -0
  827. package/src/triangulation/area.js +9 -0
  828. package/src/triangulation/clean.js +18 -0
  829. package/src/triangulation/clipEars.js +23 -0
  830. package/src/triangulation/connectHole.js +18 -0
  831. package/src/triangulation/containsVertex.js +11 -0
  832. package/src/triangulation/cross.js +3 -0
  833. package/src/triangulation/crossesBoundary.js +8 -0
  834. package/src/triangulation/crossesRing.js +9 -0
  835. package/src/triangulation/equal.js +3 -0
  836. package/src/triangulation/inside.js +10 -0
  837. package/src/triangulation/insideHole.js +7 -0
  838. package/src/triangulation/intersects.js +11 -0
  839. package/src/triangulation/isClockWise.js +13 -0
  840. package/src/triangulation/mergeHoles.js +11 -0
  841. package/src/triangulation/minimumX.js +6 -0
  842. package/src/triangulation/on.js +4 -0
  843. package/src/triangulation/polygonRings.js +14 -0
  844. package/src/triangulation/sortHoles.js +21 -0
  845. package/src/triangulation/triangulate.js +48 -0
  846. package/src/triangulation/validateArea.js +10 -0
  847. package/src/utils/channel.js +2 -2
  848. package/src/utils/compareDistance.js +3 -0
  849. package/src/utils/noOperation.js +1 -0
  850. package/src/utils/parseColor.js +4 -4
  851. package/src/utils/toSRGB.js +3 -1
  852. package/src/utils/wrap.js +3 -1
  853. package/src/vehicles/bicycleModel.js +24 -0
  854. package/src/vehicles/boatBenches.js +9 -0
  855. package/src/vehicles/boatModel.js +35 -0
  856. package/src/vehicles/busModel.js +6 -0
  857. package/src/vehicles/carModel.js +38 -0
  858. package/src/vehicles/carriage.js +20 -0
  859. package/src/vehicles/metroModel.js +9 -0
  860. package/src/vehicles/mirror.js +8 -0
  861. package/src/vehicles/pedestrianModel.js +18 -0
  862. package/src/vehicles/tramModel.js +9 -0
  863. package/src/walk/blocked.js +6 -0
  864. package/src/walk/createWalk.js +66 -0
  865. package/src/walk/initWalk.js +19 -0
  866. package/src/walk/initialize.js +7 -0
  867. package/src/walk/land.js +32 -0
  868. package/src/walk/local.js +18 -0
  869. package/src/walk/moveWalker.js +23 -0
  870. package/src/walk/onAdd.js +29 -0
  871. package/src/walk/onBlur.js +3 -0
  872. package/src/walk/onKey.js +15 -0
  873. package/src/walk/onPointer.js +18 -0
  874. package/src/walk/onRemove.js +12 -0
  875. package/src/walk/onTerrain.js +5 -0
  876. package/src/walk/place.js +20 -0
  877. package/src/walk/start.js +46 -0
  878. package/src/walk/step.js +45 -0
  879. package/src/walk/stepWalkerHeight.js +11 -0
  880. package/src/walk/stop.js +30 -0
  881. package/src/walk/toggle.js +6 -0
  882. package/src/walk/updateWalkerView.js +22 -0
  883. package/dist/utils/CELL.js +0 -2
  884. package/dist/utils/CELL.js.map +0 -7
  885. package/dist/utils/addBridges.js +0 -2
  886. package/dist/utils/addBridges.js.map +0 -7
  887. package/dist/utils/addRasterTile.js +0 -2
  888. package/dist/utils/addRasterTile.js.map +0 -7
  889. package/dist/utils/along.js +0 -2
  890. package/dist/utils/along.js.map +0 -7
  891. package/dist/utils/atmosphere.js +0 -2
  892. package/dist/utils/atmosphere.js.map +0 -7
  893. package/dist/utils/attach.js +0 -2
  894. package/dist/utils/attach.js.map +0 -7
  895. package/dist/utils/bindSunlight.js +0 -2
  896. package/dist/utils/bindSunlight.js.map +0 -7
  897. package/dist/utils/box.js +0 -2
  898. package/dist/utils/box.js.map +0 -7
  899. package/dist/utils/bridgeElevation.js +0 -2
  900. package/dist/utils/bridgeElevation.js.map +0 -7
  901. package/dist/utils/build.js +0 -2
  902. package/dist/utils/build.js.map +0 -7
  903. package/dist/utils/cameraControls.js +0 -2
  904. package/dist/utils/cameraControls.js.map +0 -7
  905. package/dist/utils/channel.js +0 -2
  906. package/dist/utils/channel.js.map +0 -7
  907. package/dist/utils/collider.js +0 -2
  908. package/dist/utils/collider.js.map +0 -7
  909. package/dist/utils/colliders.js +0 -2
  910. package/dist/utils/colliders.js.map +0 -7
  911. package/dist/utils/computeBounds.js +0 -2
  912. package/dist/utils/computeBounds.js.map +0 -7
  913. package/dist/utils/conformModelToTerrain.js +0 -2
  914. package/dist/utils/conformModelToTerrain.js.map +0 -7
  915. package/dist/utils/createMesh.js +0 -2
  916. package/dist/utils/createMesh.js.map +0 -7
  917. package/dist/utils/createProgram.js +0 -3
  918. package/dist/utils/createProgram.js.map +0 -7
  919. package/dist/utils/decodeDirectory.js +0 -2
  920. package/dist/utils/decodeDirectory.js.map +0 -7
  921. package/dist/utils/decodeHeader.js +0 -2
  922. package/dist/utils/decodeHeader.js.map +0 -7
  923. package/dist/utils/decodeModel.js +0 -2
  924. package/dist/utils/decodeModel.js.map +0 -7
  925. package/dist/utils/decompress.js +0 -2
  926. package/dist/utils/decompress.js.map +0 -7
  927. package/dist/utils/destroyTexture.js +0 -2
  928. package/dist/utils/destroyTexture.js.map +0 -7
  929. package/dist/utils/disposeMesh.js +0 -2
  930. package/dist/utils/disposeMesh.js.map +0 -7
  931. package/dist/utils/drawGeometry.js +0 -2
  932. package/dist/utils/drawGeometry.js.map +0 -7
  933. package/dist/utils/elevationWGSL.js +0 -24
  934. package/dist/utils/elevationWGSL.js.map +0 -7
  935. package/dist/utils/emptyNode.js +0 -2
  936. package/dist/utils/emptyNode.js.map +0 -7
  937. package/dist/utils/endZoom.js +0 -2
  938. package/dist/utils/endZoom.js.map +0 -7
  939. package/dist/utils/findFeature.js +0 -2
  940. package/dist/utils/findFeature.js.map +0 -7
  941. package/dist/utils/geometry.js +0 -1
  942. package/dist/utils/geometry.js.map +0 -7
  943. package/dist/utils/getElevation.js +0 -2
  944. package/dist/utils/getElevation.js.map +0 -7
  945. package/dist/utils/getHeader.js +0 -2
  946. package/dist/utils/getHeader.js.map +0 -7
  947. package/dist/utils/getZxy.js +0 -2
  948. package/dist/utils/getZxy.js.map +0 -7
  949. package/dist/utils/glass.js +0 -2
  950. package/dist/utils/glass.js.map +0 -7
  951. package/dist/utils/headlight.js +0 -2
  952. package/dist/utils/headlight.js.map +0 -7
  953. package/dist/utils/hit.js +0 -2
  954. package/dist/utils/hit.js.map +0 -7
  955. package/dist/utils/horizontalPosition.js +0 -2
  956. package/dist/utils/horizontalPosition.js.map +0 -7
  957. package/dist/utils/horizontalRay.js +0 -2
  958. package/dist/utils/horizontalRay.js.map +0 -7
  959. package/dist/utils/hull.js +0 -2
  960. package/dist/utils/hull.js.map +0 -7
  961. package/dist/utils/initSunlight.js +0 -2
  962. package/dist/utils/initSunlight.js.map +0 -7
  963. package/dist/utils/initTerrain.js +0 -2
  964. package/dist/utils/initTerrain.js.map +0 -7
  965. package/dist/utils/initTraffic.js +0 -40
  966. package/dist/utils/initTraffic.js.map +0 -7
  967. package/dist/utils/initWalk.js +0 -2
  968. package/dist/utils/initWalk.js.map +0 -7
  969. package/dist/utils/intersectMeshes.js +0 -2
  970. package/dist/utils/intersectMeshes.js.map +0 -7
  971. package/dist/utils/isClockWise.js +0 -2
  972. package/dist/utils/isClockWise.js.map +0 -7
  973. package/dist/utils/lampPostGeometry.js +0 -2
  974. package/dist/utils/lampPostGeometry.js.map +0 -7
  975. package/dist/utils/lightGeometry.js +0 -2
  976. package/dist/utils/lightGeometry.js.map +0 -7
  977. package/dist/utils/lightGrid.js +0 -2
  978. package/dist/utils/lightGrid.js.map +0 -7
  979. package/dist/utils/limbs.js +0 -2
  980. package/dist/utils/limbs.js.map +0 -7
  981. package/dist/utils/loadModel.js +0 -2
  982. package/dist/utils/loadModel.js.map +0 -7
  983. package/dist/utils/loadSource.js +0 -2
  984. package/dist/utils/loadSource.js.map +0 -7
  985. package/dist/utils/loadTerrain.js +0 -2
  986. package/dist/utils/loadTerrain.js.map +0 -7
  987. package/dist/utils/mapCamera.js +0 -2
  988. package/dist/utils/mapCamera.js.map +0 -7
  989. package/dist/utils/materialShaders.js +0 -211
  990. package/dist/utils/materialShaders.js.map +0 -7
  991. package/dist/utils/mirror.js +0 -2
  992. package/dist/utils/mirror.js.map +0 -7
  993. package/dist/utils/moonPosition.js +0 -2
  994. package/dist/utils/moonPosition.js.map +0 -7
  995. package/dist/utils/moves.js +0 -2
  996. package/dist/utils/moves.js.map +0 -7
  997. package/dist/utils/nativeEvents.js +0 -2
  998. package/dist/utils/nativeEvents.js.map +0 -7
  999. package/dist/utils/nativeGeometry.js +0 -2
  1000. package/dist/utils/nativeGeometry.js.map +0 -7
  1001. package/dist/utils/nativeLayer.js +0 -2
  1002. package/dist/utils/nativeLayer.js.map +0 -7
  1003. package/dist/utils/nodeMatrix.js +0 -2
  1004. package/dist/utils/nodeMatrix.js.map +0 -7
  1005. package/dist/utils/onAdd3DLayer.js +0 -2
  1006. package/dist/utils/onAdd3DLayer.js.map +0 -7
  1007. package/dist/utils/onAddSun.js +0 -2
  1008. package/dist/utils/onAddSun.js.map +0 -7
  1009. package/dist/utils/onClick.js +0 -2
  1010. package/dist/utils/onClick.js.map +0 -7
  1011. package/dist/utils/onMapChange.js +0 -2
  1012. package/dist/utils/onMapChange.js.map +0 -7
  1013. package/dist/utils/onPMTileAdd.js +0 -2
  1014. package/dist/utils/onPMTileAdd.js.map +0 -7
  1015. package/dist/utils/onPMTileRemove.js +0 -2
  1016. package/dist/utils/onPMTileRemove.js.map +0 -7
  1017. package/dist/utils/onPointerLeave.js +0 -2
  1018. package/dist/utils/onPointerLeave.js.map +0 -7
  1019. package/dist/utils/onPointerMove.js +0 -2
  1020. package/dist/utils/onPointerMove.js.map +0 -7
  1021. package/dist/utils/onRemove3DLayer.js +0 -2
  1022. package/dist/utils/onRemove3DLayer.js.map +0 -7
  1023. package/dist/utils/onRemoveSun.js +0 -2
  1024. package/dist/utils/onRemoveSun.js.map +0 -7
  1025. package/dist/utils/onTerrainAdd.js +0 -2
  1026. package/dist/utils/onTerrainAdd.js.map +0 -7
  1027. package/dist/utils/onTerrainChange.js +0 -2
  1028. package/dist/utils/onTerrainChange.js.map +0 -7
  1029. package/dist/utils/onTerrainRemove.js +0 -2
  1030. package/dist/utils/onTerrainRemove.js.map +0 -7
  1031. package/dist/utils/onZoomAnim.js +0 -2
  1032. package/dist/utils/onZoomAnim.js.map +0 -7
  1033. package/dist/utils/paints.js +0 -2
  1034. package/dist/utils/paints.js.map +0 -7
  1035. package/dist/utils/parseColor.js +0 -2
  1036. package/dist/utils/parseColor.js.map +0 -7
  1037. package/dist/utils/parts.js +0 -2
  1038. package/dist/utils/parts.js.map +0 -7
  1039. package/dist/utils/projectCelestialBody.js +0 -2
  1040. package/dist/utils/projectCelestialBody.js.map +0 -7
  1041. package/dist/utils/pump.js +0 -2
  1042. package/dist/utils/pump.js.map +0 -7
  1043. package/dist/utils/rasterTiles.js +0 -2
  1044. package/dist/utils/rasterTiles.js.map +0 -7
  1045. package/dist/utils/raycast.js +0 -2
  1046. package/dist/utils/raycast.js.map +0 -7
  1047. package/dist/utils/read.js +0 -2
  1048. package/dist/utils/read.js.map +0 -7
  1049. package/dist/utils/readAccessor.js +0 -2
  1050. package/dist/utils/readAccessor.js.map +0 -7
  1051. package/dist/utils/releaseArea.js +0 -2
  1052. package/dist/utils/releaseArea.js.map +0 -7
  1053. package/dist/utils/removeRasterTile.js +0 -2
  1054. package/dist/utils/removeRasterTile.js.map +0 -7
  1055. package/dist/utils/render.js +0 -15
  1056. package/dist/utils/render.js.map +0 -7
  1057. package/dist/utils/renderSunlight.js +0 -13
  1058. package/dist/utils/renderSunlight.js.map +0 -7
  1059. package/dist/utils/renderers.js +0 -2
  1060. package/dist/utils/renderers.js.map +0 -7
  1061. package/dist/utils/resizeSunlight.js +0 -2
  1062. package/dist/utils/resizeSunlight.js.map +0 -7
  1063. package/dist/utils/roofCoverage.js +0 -2
  1064. package/dist/utils/roofCoverage.js.map +0 -7
  1065. package/dist/utils/routeGeometry.js +0 -2
  1066. package/dist/utils/routeGeometry.js.map +0 -7
  1067. package/dist/utils/scheduledTrips.js +0 -2
  1068. package/dist/utils/scheduledTrips.js.map +0 -7
  1069. package/dist/utils/setGeoJSONData.js +0 -2
  1070. package/dist/utils/setGeoJSONData.js.map +0 -7
  1071. package/dist/utils/setHighlight.js +0 -2
  1072. package/dist/utils/setHighlight.js.map +0 -7
  1073. package/dist/utils/setPMTileOpacity.js +0 -2
  1074. package/dist/utils/setPMTileOpacity.js.map +0 -7
  1075. package/dist/utils/setPMTileZIndex.js +0 -2
  1076. package/dist/utils/setPMTileZIndex.js.map +0 -7
  1077. package/dist/utils/setParent.js +0 -2
  1078. package/dist/utils/setParent.js.map +0 -7
  1079. package/dist/utils/setTerrainHeight.js +0 -2
  1080. package/dist/utils/setTerrainHeight.js.map +0 -7
  1081. package/dist/utils/setVertexColor.js +0 -2
  1082. package/dist/utils/setVertexColor.js.map +0 -7
  1083. package/dist/utils/showFeature.js +0 -2
  1084. package/dist/utils/showFeature.js.map +0 -7
  1085. package/dist/utils/sizes.js +0 -2
  1086. package/dist/utils/sizes.js.map +0 -7
  1087. package/dist/utils/skin.js +0 -2
  1088. package/dist/utils/skin.js.map +0 -7
  1089. package/dist/utils/solarPosition.js +0 -2
  1090. package/dist/utils/solarPosition.js.map +0 -7
  1091. package/dist/utils/sortMeshes.js +0 -2
  1092. package/dist/utils/sortMeshes.js.map +0 -7
  1093. package/dist/utils/speed.js +0 -2
  1094. package/dist/utils/speed.js.map +0 -7
  1095. package/dist/utils/startZoom.js +0 -2
  1096. package/dist/utils/startZoom.js.map +0 -7
  1097. package/dist/utils/taillight.js +0 -2
  1098. package/dist/utils/taillight.js.map +0 -7
  1099. package/dist/utils/terrainAtlas.js +0 -2
  1100. package/dist/utils/terrainAtlas.js.map +0 -7
  1101. package/dist/utils/terrainElevation.js +0 -2
  1102. package/dist/utils/terrainElevation.js.map +0 -7
  1103. package/dist/utils/terrainGrid.js +0 -2
  1104. package/dist/utils/terrainGrid.js.map +0 -7
  1105. package/dist/utils/textureSampler.js +0 -2
  1106. package/dist/utils/textureSampler.js.map +0 -7
  1107. package/dist/utils/tileId.js +0 -2
  1108. package/dist/utils/tileId.js.map +0 -7
  1109. package/dist/utils/toLanes.js +0 -2
  1110. package/dist/utils/toLanes.js.map +0 -7
  1111. package/dist/utils/toSRGB.js +0 -2
  1112. package/dist/utils/toSRGB.js.map +0 -7
  1113. package/dist/utils/tooltip.js +0 -3
  1114. package/dist/utils/tooltip.js.map +0 -7
  1115. package/dist/utils/traffic.js +0 -2
  1116. package/dist/utils/traffic.js.map +0 -7
  1117. package/dist/utils/traverse.js +0 -2
  1118. package/dist/utils/traverse.js.map +0 -7
  1119. package/dist/utils/treeGeometry.js +0 -2
  1120. package/dist/utils/treeGeometry.js.map +0 -7
  1121. package/dist/utils/triangulate.js +0 -2
  1122. package/dist/utils/triangulate.js.map +0 -7
  1123. package/dist/utils/tripsAt.js +0 -2
  1124. package/dist/utils/tripsAt.js.map +0 -7
  1125. package/dist/utils/types.js +0 -2
  1126. package/dist/utils/types.js.map +0 -7
  1127. package/dist/utils/underEntry.js +0 -2
  1128. package/dist/utils/underEntry.js.map +0 -7
  1129. package/dist/utils/update.js +0 -2
  1130. package/dist/utils/update.js.map +0 -7
  1131. package/dist/utils/updateArea.js +0 -2
  1132. package/dist/utils/updateArea.js.map +0 -7
  1133. package/dist/utils/updateCamera.js +0 -2
  1134. package/dist/utils/updateCamera.js.map +0 -7
  1135. package/dist/utils/updatePointLights.js +0 -2
  1136. package/dist/utils/updatePointLights.js.map +0 -7
  1137. package/dist/utils/updateWorldMatrix.js +0 -2
  1138. package/dist/utils/updateWorldMatrix.js.map +0 -7
  1139. package/dist/utils/vehicleOffsets.js +0 -2
  1140. package/dist/utils/vehicleOffsets.js.map +0 -7
  1141. package/dist/utils/vehicles.js +0 -2
  1142. package/dist/utils/vehicles.js.map +0 -7
  1143. package/dist/utils/vertexNormals.js +0 -2
  1144. package/dist/utils/vertexNormals.js.map +0 -7
  1145. package/dist/utils/walk.js +0 -2
  1146. package/dist/utils/walk.js.map +0 -7
  1147. package/dist/utils/white.js +0 -2
  1148. package/dist/utils/white.js.map +0 -7
  1149. package/dist/utils/worldLights.js +0 -2
  1150. package/dist/utils/worldLights.js.map +0 -7
  1151. package/dist/utils/wrap.js +0 -2
  1152. package/dist/utils/wrap.js.map +0 -7
  1153. package/src/utils/CELL.js +0 -4
  1154. package/src/utils/addBridges.js +0 -66
  1155. package/src/utils/addRasterTile.js +0 -112
  1156. package/src/utils/along.js +0 -9
  1157. package/src/utils/atmosphere.js +0 -20
  1158. package/src/utils/attach.js +0 -255
  1159. package/src/utils/bindSunlight.js +0 -12
  1160. package/src/utils/box.js +0 -1
  1161. package/src/utils/bridgeElevation.js +0 -18
  1162. package/src/utils/build.js +0 -20
  1163. package/src/utils/cameraControls.js +0 -287
  1164. package/src/utils/collider.js +0 -62
  1165. package/src/utils/colliders.js +0 -2
  1166. package/src/utils/computeBounds.js +0 -17
  1167. package/src/utils/conformModelToTerrain.js +0 -69
  1168. package/src/utils/createMesh.js +0 -31
  1169. package/src/utils/createProgram.js +0 -92
  1170. package/src/utils/decodeDirectory.js +0 -40
  1171. package/src/utils/decodeHeader.js +0 -15
  1172. package/src/utils/decodeModel.js +0 -43
  1173. package/src/utils/decompress.js +0 -5
  1174. package/src/utils/destroyTexture.js +0 -7
  1175. package/src/utils/disposeMesh.js +0 -13
  1176. package/src/utils/drawGeometry.js +0 -122
  1177. package/src/utils/elevationWGSL.js +0 -27
  1178. package/src/utils/emptyNode.js +0 -9
  1179. package/src/utils/endZoom.js +0 -15
  1180. package/src/utils/findFeature.js +0 -49
  1181. package/src/utils/geometry.js +0 -2
  1182. package/src/utils/getElevation.js +0 -10
  1183. package/src/utils/getHeader.js +0 -9
  1184. package/src/utils/getZxy.js +0 -76
  1185. package/src/utils/glass.js +0 -1
  1186. package/src/utils/hit.js +0 -41
  1187. package/src/utils/horizontalPosition.js +0 -16
  1188. package/src/utils/hull.js +0 -1
  1189. package/src/utils/initSunlight.js +0 -9
  1190. package/src/utils/initTerrain.js +0 -19
  1191. package/src/utils/initTraffic.js +0 -93
  1192. package/src/utils/initWalk.js +0 -72
  1193. package/src/utils/intersectMeshes.js +0 -121
  1194. package/src/utils/isClockWise.js +0 -12
  1195. package/src/utils/lampPostGeometry.js +0 -26
  1196. package/src/utils/lightGeometry.js +0 -22
  1197. package/src/utils/lightGrid.js +0 -50
  1198. package/src/utils/limbs.js +0 -9
  1199. package/src/utils/loadModel.js +0 -217
  1200. package/src/utils/loadSource.js +0 -17
  1201. package/src/utils/loadTerrain.js +0 -65
  1202. package/src/utils/mapCamera.js +0 -432
  1203. package/src/utils/materialShaders.js +0 -243
  1204. package/src/utils/mirror.js +0 -6
  1205. package/src/utils/moonPosition.js +0 -17
  1206. package/src/utils/nativeEvents.js +0 -77
  1207. package/src/utils/nativeGeometry.js +0 -131
  1208. package/src/utils/nativeLayer.js +0 -317
  1209. package/src/utils/nodeMatrix.js +0 -22
  1210. package/src/utils/onAdd3DLayer.js +0 -31
  1211. package/src/utils/onAddSun.js +0 -147
  1212. package/src/utils/onClick.js +0 -13
  1213. package/src/utils/onMapChange.js +0 -16
  1214. package/src/utils/onPMTileAdd.js +0 -15
  1215. package/src/utils/onPMTileRemove.js +0 -8
  1216. package/src/utils/onPointerLeave.js +0 -11
  1217. package/src/utils/onPointerMove.js +0 -15
  1218. package/src/utils/onRemove3DLayer.js +0 -78
  1219. package/src/utils/onRemoveSun.js +0 -3
  1220. package/src/utils/onTerrainAdd.js +0 -18
  1221. package/src/utils/onTerrainChange.js +0 -13
  1222. package/src/utils/onTerrainRemove.js +0 -40
  1223. package/src/utils/onZoomAnim.js +0 -14
  1224. package/src/utils/parts.js +0 -16
  1225. package/src/utils/projectCelestialBody.js +0 -13
  1226. package/src/utils/pump.js +0 -226
  1227. package/src/utils/rasterTiles.js +0 -285
  1228. package/src/utils/raycast.js +0 -60
  1229. package/src/utils/read.js +0 -29
  1230. package/src/utils/readAccessor.js +0 -68
  1231. package/src/utils/releaseArea.js +0 -34
  1232. package/src/utils/removeRasterTile.js +0 -13
  1233. package/src/utils/render.js +0 -406
  1234. package/src/utils/renderSunlight.js +0 -170
  1235. package/src/utils/resizeSunlight.js +0 -15
  1236. package/src/utils/roofCoverage.js +0 -47
  1237. package/src/utils/routeGeometry.js +0 -22
  1238. package/src/utils/scheduledTrips.js +0 -29
  1239. package/src/utils/setGeoJSONData.js +0 -11
  1240. package/src/utils/setHighlight.js +0 -13
  1241. package/src/utils/setPMTileOpacity.js +0 -7
  1242. package/src/utils/setPMTileZIndex.js +0 -7
  1243. package/src/utils/setTerrainHeight.js +0 -10
  1244. package/src/utils/setVertexColor.js +0 -14
  1245. package/src/utils/showFeature.js +0 -27
  1246. package/src/utils/sizes.js +0 -1
  1247. package/src/utils/skin.js +0 -2
  1248. package/src/utils/solarPosition.js +0 -17
  1249. package/src/utils/sortMeshes.js +0 -12
  1250. package/src/utils/startZoom.js +0 -5
  1251. package/src/utils/terrainAtlas.js +0 -21
  1252. package/src/utils/terrainElevation.js +0 -20
  1253. package/src/utils/terrainGrid.js +0 -23
  1254. package/src/utils/textureSampler.js +0 -10
  1255. package/src/utils/tileId.js +0 -18
  1256. package/src/utils/toLanes.js +0 -7
  1257. package/src/utils/tooltip.js +0 -6
  1258. package/src/utils/traffic.js +0 -315
  1259. package/src/utils/traverse.js +0 -6
  1260. package/src/utils/treeGeometry.js +0 -45
  1261. package/src/utils/triangulate.js +0 -100
  1262. package/src/utils/tripsAt.js +0 -16
  1263. package/src/utils/underEntry.js +0 -17
  1264. package/src/utils/update.js +0 -18
  1265. package/src/utils/updateArea.js +0 -40
  1266. package/src/utils/updateCamera.js +0 -32
  1267. package/src/utils/updatePointLights.js +0 -38
  1268. package/src/utils/updateWorldMatrix.js +0 -47
  1269. package/src/utils/vehicleOffsets.js +0 -8
  1270. package/src/utils/vehicles.js +0 -65
  1271. package/src/utils/vertexNormals.js +0 -30
  1272. package/src/utils/walk.js +0 -187
  1273. package/src/utils/worldLights.js +0 -25
  1274. /package/src/{utils → collision}/horizontalRay.js +0 -0
  1275. /package/src/{utils → globals}/headlight.js +0 -0
  1276. /package/src/{utils → globals}/moves.js +0 -0
  1277. /package/src/{utils → globals}/paints.js +0 -0
  1278. /package/src/{utils → globals}/renderers.js +0 -0
  1279. /package/src/{utils → globals}/speed.js +0 -0
  1280. /package/src/{utils → globals}/taillight.js +0 -0
  1281. /package/src/{utils → globals}/types.js +0 -0
  1282. /package/src/{utils → globals}/white.js +0 -0
  1283. /package/src/{utils → scene}/setParent.js +0 -0
@@ -1,2 +0,0 @@
1
- import{raycast as m}from"./raycast.js";function u(e,f){if(!e.root||!e.camera)return null;for(const t of m(e,f,e.root.children,!!e.model)){if(e.model){let o=t.object;for(;o&&o!==e.model;)o=o.parent;if(o===e.model)return{id:e.model.id,properties:e.model.extras,model:e.model,mesh:t.object,point:t.point}}const r=t.object.extras?.featureFaces;if(!r)continue;let i=0,l=r.length-1;for(;i<=l;){const o=i+l>>1,n=r[o];if(t.faceIndex<n.faceStart)l=o-1;else if(t.faceIndex>=n.faceEnd)i=o+1;else return{...n,mesh:t.object,point:t.point}}}return null}export{u as findFeature};
2
- //# sourceMappingURL=findFeature.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/findFeature.js"],
4
- "sourcesContent": ["import { raycast } from './raycast.js';\n\n/**\n * Translate a geometry hit into a configured model or batched source feature.\n * Sorted half-open face ranges permit binary search without a feature per triangle.\n * @returns {PickedFeature|null}\n */\n\nexport function findFeature(backend, event) {\n if (!backend.root || !backend.camera) {\n return null;\n }\n for (const hit of raycast(backend, event, backend.root.children, Boolean(backend.model))) {\n if (backend.model) {\n let object = hit.object;\n while (object && object !== backend.model) {\n object = object.parent;\n }\n if (object === backend.model) {\n return {\n id: backend.model.id, properties: backend.model.extras,\n model: backend.model, mesh: hit.object, point: hit.point\n };\n }\n }\n const ranges = hit.object.extras?.featureFaces;\n if (!ranges) {\n continue;\n }\n let low = 0,\n high = ranges.length - 1;\n while (low <= high) {\n const middle = (low + high) >> 1;\n const range = ranges[middle];\n if (hit.faceIndex < range.faceStart) {\n high = middle - 1;\n } else if (hit.faceIndex >= range.faceEnd) {\n low = middle + 1;\n } else {\n return {\n ...range,\n mesh: hit.object,\n point: hit.point\n };\n }\n }\n }\n return null;\n}\n"],
5
- "mappings": "AAAA,OAAS,WAAAA,MAAe,eAQjB,SAASC,EAAYC,EAASC,EAAO,CAC1C,GAAI,CAACD,EAAQ,MAAQ,CAACA,EAAQ,OAC5B,OAAO,KAET,UAAWE,KAAOJ,EAAQE,EAASC,EAAOD,EAAQ,KAAK,SAAU,EAAQA,EAAQ,KAAM,EAAG,CACxF,GAAIA,EAAQ,MAAO,CACjB,IAAIG,EAASD,EAAI,OACjB,KAAOC,GAAUA,IAAWH,EAAQ,OAClCG,EAASA,EAAO,OAElB,GAAIA,IAAWH,EAAQ,MACrB,MAAO,CACL,GAAIA,EAAQ,MAAM,GAAI,WAAYA,EAAQ,MAAM,OAChD,MAAOA,EAAQ,MAAO,KAAME,EAAI,OAAQ,MAAOA,EAAI,KACrD,CAEJ,CACA,MAAME,EAASF,EAAI,OAAO,QAAQ,aAClC,GAAI,CAACE,EACH,SAEF,IAAIC,EAAM,EACPC,EAAOF,EAAO,OAAS,EAC1B,KAAOC,GAAOC,GAAM,CAClB,MAAMC,EAAUF,EAAMC,GAAS,EACzBE,EAAQJ,EAAOG,CAAM,EAC3B,GAAIL,EAAI,UAAYM,EAAM,UACxBF,EAAOC,EAAS,UACPL,EAAI,WAAaM,EAAM,QAChCH,EAAME,EAAS,MAEf,OAAO,CACL,GAAGC,EACH,KAAMN,EAAI,OACV,MAAOA,EAAI,KACb,CAEJ,CACF,CACA,OAAO,IACT",
6
- "names": ["raycast", "findFeature", "backend", "event", "hit", "object", "ranges", "low", "high", "middle", "range"]
7
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=geometry.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- import{bridgeElevation as e}from"./bridgeElevation.js";import{terrainElevation as o}from"./terrainElevation.js";function p(r,t){if(!r._map||!r._terrainReady)return null;const i=t instanceof L.Point?t:r._map.project(t,r._terrainZoom);return e(i,r._bridges)??o(i,r._terrainTiles)}export{p as getElevation};
2
- //# sourceMappingURL=getElevation.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/getElevation.js"],
4
- "sourcesContent": ["import { bridgeElevation } from './bridgeElevation.js';\nimport { terrainElevation } from './terrainElevation.js';\n\n/** @param {L.LatLng|L.Point} location LatLng, or a pixel point at the terrain zoom. */\n\nexport function getElevation(backend, location) {\n if (!backend._map || !backend._terrainReady) return null;\n const point = location instanceof L.Point ? location : backend._map.project(location, backend._terrainZoom);\n return bridgeElevation(point, backend._bridges) ?? terrainElevation(point, backend._terrainTiles);\n}\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,uBAChC,OAAS,oBAAAC,MAAwB,wBAI1B,SAASC,EAAaC,EAASC,EAAU,CAC9C,GAAI,CAACD,EAAQ,MAAQ,CAACA,EAAQ,cAAe,OAAO,KACpD,MAAME,EAAQD,aAAoB,EAAE,MAAQA,EAAWD,EAAQ,KAAK,QAAQC,EAAUD,EAAQ,YAAY,EAC1G,OAAOH,EAAgBK,EAAOF,EAAQ,QAAQ,GAAKF,EAAiBI,EAAOF,EAAQ,aAAa,CAClG",
6
- "names": ["bridgeElevation", "terrainElevation", "getElevation", "backend", "location", "point"]
7
- }
@@ -1,2 +0,0 @@
1
- import{decodeHeader as e}from"./decodeHeader.js";import{read as o}from"./read.js";function p(r){return r.options.archive&&r.options.archive!==r?r.options.archive.getHeader():r._header||=o(r,0,127).then(e)}export{p as getHeader};
2
- //# sourceMappingURL=getHeader.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/getHeader.js"],
4
- "sourcesContent": ["import { decodeHeader } from './decodeHeader.js';\nimport { read } from './read.js';\n\n/** Cache header initialization; failures remain visible to all callers. */\n\nexport function getHeader(backend) {\n if (backend.options.archive && backend.options.archive !== backend) return backend.options.archive.getHeader();\n return backend._header ||= read(backend, 0, 127).then(decodeHeader);\n}\n"],
5
- "mappings": "AAAA,OAAS,gBAAAA,MAAoB,oBAC7B,OAAS,QAAAC,MAAY,YAId,SAASC,EAAUC,EAAS,CACjC,OAAIA,EAAQ,QAAQ,SAAWA,EAAQ,QAAQ,UAAYA,EAAgBA,EAAQ,QAAQ,QAAQ,UAAU,EACtGA,EAAQ,UAAYF,EAAKE,EAAS,EAAG,GAAG,EAAE,KAAKH,CAAY,CACpE",
6
- "names": ["decodeHeader", "read", "getHeader", "backend"]
7
- }
@@ -1,2 +0,0 @@
1
- import{decodeDirectory as v}from"./decodeDirectory.js";import{decompress as u}from"./decompress.js";import{tileId as D}from"./tileId.js";import{read as _}from"./read.js";import{getHeader as I}from"./getHeader.js";async function M(t,h,m,p,i){if(t.options.archive&&t.options.archive!==t&&t.options.archive.getZxy)return t.options.archive.getZxy(h,m,p,i);const y=D(h,m,p);i?.throwIfAborted();const r=await I(t);if(i?.throwIfAborted(),h<r.minZoom||h>r.maxZoom)return;let s=r.rootDirectoryOffset,l=r.rootDirectoryLength;const a=new Set;for(let g=0;g<4;g++){if(a.has(s))throw new Error("Cyclic PMTiles directory");a.add(s);const f=`${s}:${l}`;if(!t._directories.has(f)){t._directories.size>=32&&t._directories.delete(t._directories.keys().next().value);const o=_(t,s,l).then(w=>u(w,r.internalCompression)).then(v).catch(w=>{throw t._directories.get(f)===o&&t._directories.delete(f),w});t._directories.set(f,o)}const c=await t._directories.get(f);i?.throwIfAborted();let d=0,n=c.length-1;for(;d<=n;){const o=d+n>>1;c[o].tileId<=y?d=o+1:n=o-1}const e=c[n];if(!e)return;if(e.runLength){if(y-e.tileId>=e.runLength)return;if(e.offset+e.length>r.tileDataLength)throw new Error("PMTiles tile outside data section");const o=await u(await _(t,r.tileDataOffset+e.offset,e.length,i),r.tileCompression);return i?.throwIfAborted(),{data:o}}if(e.offset+e.length>r.leafDirectoryLength)throw new Error("PMTiles directory outside leaf section");s=r.leafDirectoryOffset+e.offset,l=e.length}throw new Error("PMTiles directory depth exceeds four levels")}export{M as getZxy};
2
- //# sourceMappingURL=getZxy.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/getZxy.js"],
4
- "sourcesContent": ["import { decodeDirectory } from './decodeDirectory.js';\nimport { decompress } from './decompress.js';\nimport { tileId } from './tileId.js';\nimport { read } from './read.js';\nimport { getHeader } from './getHeader.js';\n\n/** Nearest directory entry at/before the Hilbert ID, then follow leaf pointers. */\n\nexport async function getZxy(backend, z, x, y, signal) {\n if (backend.options.archive && backend.options.archive !== backend && backend.options.archive.getZxy) {\n return backend.options.archive.getZxy(z, x, y, signal);\n }\n const id = tileId(z, x, y);\n signal?.throwIfAborted();\n const header = await getHeader(backend);\n signal?.throwIfAborted();\n if (z < header.minZoom || z > header.maxZoom) {\n return;\n }\n let offset = header.rootDirectoryOffset, length = header.rootDirectoryLength;\n const visited = new Set();\n for (let depth = 0; depth < 4; depth++) {\n if (visited.has(offset)) {\n throw new Error('Cyclic PMTiles directory');\n }\n visited.add(offset);\n const key = `${offset}:${length}`;\n if (!backend._directories.has(key)) {\n if (backend._directories.size >= 32) {\n backend._directories.delete(backend._directories.keys().next().value);\n }\n const pending = read(backend, offset, length)\n .then(data => decompress(data, header.internalCompression))\n .then(decodeDirectory)\n .catch(error => {\n if (backend._directories.get(key) === pending) {\n backend._directories.delete(key);\n }\n throw error;\n });\n backend._directories.set(key, pending);\n }\n const entries = await backend._directories.get(key);\n signal?.throwIfAborted();\n let low = 0, high = entries.length - 1;\n while (low <= high) {\n const mid = (low + high) >> 1;\n if (entries[mid].tileId <= id) {\n low = mid + 1;\n } else {\n high = mid - 1;\n }\n }\n const entry = entries[high];\n if (!entry) {\n return;\n }\n if (entry.runLength) {\n if (id - entry.tileId >= entry.runLength) {\n return;\n }\n if (entry.offset + entry.length > header.tileDataLength) {\n throw new Error('PMTiles tile outside data section');\n }\n const data = await decompress(await read(backend, header.tileDataOffset + entry.offset, entry.length, signal), header.tileCompression);\n signal?.throwIfAborted();\n return { data };\n }\n if (entry.offset + entry.length > header.leafDirectoryLength) {\n throw new Error('PMTiles directory outside leaf section');\n }\n offset = header.leafDirectoryOffset + entry.offset;\n length = entry.length;\n }\n throw new Error('PMTiles directory depth exceeds four levels');\n}\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,uBAChC,OAAS,cAAAC,MAAkB,kBAC3B,OAAS,UAAAC,MAAc,cACvB,OAAS,QAAAC,MAAY,YACrB,OAAS,aAAAC,MAAiB,iBAI1B,eAAsBC,EAAOC,EAASC,EAAGC,EAAGC,EAAGC,EAAQ,CACrD,GAAIJ,EAAQ,QAAQ,SAAWA,EAAQ,QAAQ,UAAYA,GAAWA,EAAQ,QAAQ,QAAQ,OAC5F,OAAOA,EAAQ,QAAQ,QAAQ,OAAOC,EAAGC,EAAGC,EAAGC,CAAM,EAEvD,MAAMC,EAAKT,EAAOK,EAAGC,EAAGC,CAAC,EACzBC,GAAQ,eAAe,EACvB,MAAME,EAAS,MAAMR,EAAUE,CAAO,EAEtC,GADAI,GAAQ,eAAe,EACnBH,EAAIK,EAAO,SAAWL,EAAIK,EAAO,QACnC,OAEF,IAAIC,EAASD,EAAO,oBAAqBE,EAASF,EAAO,oBACzD,MAAMG,EAAU,IAAI,IACpB,QAASC,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CACtC,GAAID,EAAQ,IAAIF,CAAM,EACpB,MAAM,IAAI,MAAM,0BAA0B,EAE5CE,EAAQ,IAAIF,CAAM,EAClB,MAAMI,EAAM,GAAGJ,CAAM,IAAIC,CAAM,GAC/B,GAAI,CAACR,EAAQ,aAAa,IAAIW,CAAG,EAAG,CAC9BX,EAAQ,aAAa,MAAQ,IAC/BA,EAAQ,aAAa,OAAOA,EAAQ,aAAa,KAAK,EAAE,KAAK,EAAE,KAAK,EAEtE,MAAMY,EAAUf,EAAKG,EAASO,EAAQC,CAAM,EACzC,KAAKK,GAAQlB,EAAWkB,EAAMP,EAAO,mBAAmB,CAAC,EACzD,KAAKZ,CAAe,EACpB,MAAMoB,GAAS,CACd,MAAId,EAAQ,aAAa,IAAIW,CAAG,IAAMC,GACpCZ,EAAQ,aAAa,OAAOW,CAAG,EAE3BG,CACR,CAAC,EACHd,EAAQ,aAAa,IAAIW,EAAKC,CAAO,CACvC,CACA,MAAMG,EAAU,MAAMf,EAAQ,aAAa,IAAIW,CAAG,EAClDP,GAAQ,eAAe,EACvB,IAAIY,EAAM,EAAGC,EAAOF,EAAQ,OAAS,EACrC,KAAOC,GAAOC,GAAM,CAClB,MAAMC,EAAOF,EAAMC,GAAS,EACxBF,EAAQG,CAAG,EAAE,QAAUb,EACzBW,EAAME,EAAM,EAEZD,EAAOC,EAAM,CAEjB,CACA,MAAMC,EAAQJ,EAAQE,CAAI,EAC1B,GAAI,CAACE,EACH,OAEF,GAAIA,EAAM,UAAW,CACnB,GAAId,EAAKc,EAAM,QAAUA,EAAM,UAC7B,OAEF,GAAIA,EAAM,OAASA,EAAM,OAASb,EAAO,eACvC,MAAM,IAAI,MAAM,mCAAmC,EAErD,MAAMO,EAAO,MAAMlB,EAAW,MAAME,EAAKG,EAASM,EAAO,eAAiBa,EAAM,OAAQA,EAAM,OAAQf,CAAM,EAAGE,EAAO,eAAe,EACrI,OAAAF,GAAQ,eAAe,EAChB,CAAE,KAAAS,CAAK,CAChB,CACA,GAAIM,EAAM,OAASA,EAAM,OAASb,EAAO,oBACvC,MAAM,IAAI,MAAM,wCAAwC,EAE1DC,EAASD,EAAO,oBAAsBa,EAAM,OAC5CX,EAASW,EAAM,MACjB,CACA,MAAM,IAAI,MAAM,6CAA6C,CAC/D",
6
- "names": ["decodeDirectory", "decompress", "tileId", "read", "getHeader", "getZxy", "backend", "z", "x", "y", "signal", "id", "header", "offset", "length", "visited", "depth", "key", "pending", "data", "error", "entries", "low", "high", "mid", "entry"]
7
- }
@@ -1,2 +0,0 @@
1
- const s=[.12,.15,.18],t=[.05,.05,.05];export{s as glass,t as tyre};
2
- //# sourceMappingURL=glass.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/glass.js"],
4
- "sourcesContent": ["export const glass = [0.12, 0.15, 0.18], tyre = [0.05, 0.05, 0.05];\n"],
5
- "mappings": "AAAO,MAAMA,EAAQ,CAAC,IAAM,IAAM,GAAI,EAAGC,EAAO,CAAC,IAAM,IAAM,GAAI",
6
- "names": ["glass", "tyre"]
7
- }
@@ -1,2 +0,0 @@
1
- const t=[1.9,1.85,1.7];export{t as headlight};
2
- //# sourceMappingURL=headlight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/headlight.js"],
4
- "sourcesContent": ["export const headlight = [1.9, 1.85, 1.7];\n"],
5
- "mappings": "AAAO,MAAMA,EAAY,CAAC,IAAK,KAAM,GAAG",
6
- "names": ["headlight"]
7
- }
package/dist/utils/hit.js DELETED
@@ -1,2 +0,0 @@
1
- import{CELL as u}from"./CELL.js";import{collider as B}from"./collider.js";import{computeBounds as C}from"./computeBounds.js";import{horizontalRay as E}from"./horizontalRay.js";import{traverse as R}from"./traverse.js";import{updateWorldMatrix as S}from"./updateWorldMatrix.js";function F(p,g,_,y,s,l,n){const k=f=>f===p||["terrain","traffic"].includes(f._type);S(p.scene);let h=n,b=null;for(const f of p._shared._layers)k(f)||R(f.root,r=>{if(!r.visible)return!0;if(!r.geometry?.attributes?.position?.data||r.program?.depthTest===!1)return;r.geometry.bounds||C(r.geometry);const o=r.worldMatrix,{center:e,radius:v}=r.geometry.bounds;if(Math.hypot(o[0]*e[0]+o[4]*e[1]+o[8]*e[2]+o[12]-g,o[2]*e[0]+o[6]*e[1]+o[10]*e[2]+o[14]-y)>v*Math.hypot(o[0],o[1],o[2])+n)return;const t=B(r),a=g-o[12]+t.origin[0],w=_-o[13]+t.origin[1],m=y-o[14]+t.origin[2],x=new Set;for(let c=Math.floor(Math.min(a,a+s*n)/u);c<=Math.floor(Math.max(a,a+s*n)/u);c++)for(let M=Math.floor(Math.min(m,m+l*n)/u);M<=Math.floor(Math.max(m,m+l*n)/u);M++)for(const i of t.cells.get(c+","+M)||[])if(!(x.has(i)||s*t.nrm[i*2]+l*t.nrm[i*2+1]>=0)){x.add(i);for(const L of[.4,1.5]){const d=E(t.tri,i,a,w+L,m,s,l);d>=0&&d<h&&(h=d,b=[t.nrm[i*2],t.nrm[i*2+1]])}}});return b}export{F as hit};
2
- //# sourceMappingURL=hit.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/hit.js"],
4
- "sourcesContent": ["import { CELL } from './CELL.js';\nimport { collider } from './collider.js';\nimport { computeBounds } from './computeBounds.js';\nimport { horizontalRay } from './horizontalRay.js';\nimport { traverse } from './traverse.js';\nimport { updateWorldMatrix } from './updateWorldMatrix.js';\n\n// Horizontal normal of the nearest wall faced within `reach` metres of the feet at world (x, y, z), walking along\n// the unit (dx, dz); knee and chest rays, so arches and tree crowns above the head let the walker through.\n// ponytail: traffic vehicles and boats move on the GPU and are not obstacles.\n\nexport function hit(layer, x, y, z, dx, dz, reach) {\n const skip = other => other === layer || ['terrain', 'traffic'].includes(other._type);\n updateWorldMatrix(layer.scene);\n let best = reach, found = null;\n for (const other of layer._shared._layers) {\n if (skip(other)) continue;\n traverse(other.root, mesh => {\n if (!mesh.visible) return true;\n if (!mesh.geometry?.attributes?.position?.data || mesh.program?.depthTest === false) return;\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\n const m = mesh.worldMatrix, { center: k, radius } = mesh.geometry.bounds;\n if (Math.hypot(m[0] * k[0] + m[4] * k[1] + m[8] * k[2] + m[12] - x, m[2] * k[0] + m[6] * k[1] + m[10] * k[2] + m[14] - z) >\n radius * Math.hypot(m[0], m[1], m[2]) + reach) return;\n const c = collider(mesh), ox = x - m[12] + c.origin[0], oy = y - m[13] + c.origin[1], oz = z - m[14] + c.origin[2];\n const seen = new Set();\n for (let ix = Math.floor(Math.min(ox, ox + dx * reach) / CELL); ix <= Math.floor(Math.max(ox, ox + dx * reach) / CELL); ix++)\n for (let iz = Math.floor(Math.min(oz, oz + dz * reach) / CELL); iz <= Math.floor(Math.max(oz, oz + dz * reach) / CELL); iz++)\n for (const t of c.cells.get(ix + ',' + iz) || []) {\n // Walls are one-way: walking out of a building (e.g. starting inside one) is allowed.\n if (seen.has(t) || dx * c.nrm[t * 2] + dz * c.nrm[t * 2 + 1] >= 0) continue;\n seen.add(t);\n for (const height of [0.4, 1.5]) {\n const d = horizontalRay(c.tri, t, ox, oy + height, oz, dx, dz);\n if (d >= 0 && d < best) { best = d; found = [c.nrm[t * 2], c.nrm[t * 2 + 1]]; }\n }\n }\n });\n }\n return found;\n}\n"],
5
- "mappings": "AAAA,OAAS,QAAAA,MAAY,YACrB,OAAS,YAAAC,MAAgB,gBACzB,OAAS,iBAAAC,MAAqB,qBAC9B,OAAS,iBAAAC,MAAqB,qBAC9B,OAAS,YAAAC,MAAgB,gBACzB,OAAS,qBAAAC,MAAyB,yBAM3B,SAASC,EAAIC,EAAOC,EAAGC,EAAGC,EAAGC,EAAIC,EAAIC,EAAO,CACjD,MAAMC,EAAOC,GAASA,IAAUR,GAAS,CAAC,UAAW,SAAS,EAAE,SAASQ,EAAM,KAAK,EACpFV,EAAkBE,EAAM,KAAK,EAC7B,IAAIS,EAAOH,EAAOI,EAAQ,KAC1B,UAAWF,KAASR,EAAM,QAAQ,QAC5BO,EAAKC,CAAK,GACdX,EAASW,EAAM,KAAMG,GAAQ,CAC3B,GAAI,CAACA,EAAK,QAAS,MAAO,GAC1B,GAAI,CAACA,EAAK,UAAU,YAAY,UAAU,MAAQA,EAAK,SAAS,YAAc,GAAO,OAChFA,EAAK,SAAS,QAAQhB,EAAcgB,EAAK,QAAQ,EACtD,MAAMC,EAAID,EAAK,YAAa,CAAE,OAAQE,EAAG,OAAAC,CAAO,EAAIH,EAAK,SAAS,OAClE,GAAI,KAAK,MAAMC,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,EAAE,EAAIX,EAAGW,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,EAAE,EAAIC,EAAE,CAAC,EAAID,EAAE,EAAE,EAAIT,CAAC,EACtHW,EAAS,KAAK,MAAMF,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,CAAC,EAAIN,EAAO,OACjD,MAAMS,EAAIrB,EAASiB,CAAI,EAAGK,EAAKf,EAAIW,EAAE,EAAE,EAAIG,EAAE,OAAO,CAAC,EAAGE,EAAKf,EAAIU,EAAE,EAAE,EAAIG,EAAE,OAAO,CAAC,EAAGG,EAAKf,EAAIS,EAAE,EAAE,EAAIG,EAAE,OAAO,CAAC,EAC3GI,EAAO,IAAI,IACjB,QAASC,EAAK,KAAK,MAAM,KAAK,IAAIJ,EAAIA,EAAKZ,EAAKE,CAAK,EAAIb,CAAI,EAAG2B,GAAM,KAAK,MAAM,KAAK,IAAIJ,EAAIA,EAAKZ,EAAKE,CAAK,EAAIb,CAAI,EAAG2B,IACtH,QAASC,EAAK,KAAK,MAAM,KAAK,IAAIH,EAAIA,EAAKb,EAAKC,CAAK,EAAIb,CAAI,EAAG4B,GAAM,KAAK,MAAM,KAAK,IAAIH,EAAIA,EAAKb,EAAKC,CAAK,EAAIb,CAAI,EAAG4B,IACtH,UAAWC,KAAKP,EAAE,MAAM,IAAIK,EAAK,IAAMC,CAAE,GAAK,CAAC,EAE7C,GAAI,EAAAF,EAAK,IAAIG,CAAC,GAAKlB,EAAKW,EAAE,IAAIO,EAAI,CAAC,EAAIjB,EAAKU,EAAE,IAAIO,EAAI,EAAI,CAAC,GAAK,GAChE,CAAAH,EAAK,IAAIG,CAAC,EACV,UAAWC,IAAU,CAAC,GAAK,GAAG,EAAG,CAC/B,MAAM,EAAI3B,EAAcmB,EAAE,IAAKO,EAAGN,EAAIC,EAAKM,EAAQL,EAAId,EAAIC,CAAE,EACzD,GAAK,GAAK,EAAII,IAAQA,EAAO,EAAGC,EAAQ,CAACK,EAAE,IAAIO,EAAI,CAAC,EAAGP,EAAE,IAAIO,EAAI,EAAI,CAAC,CAAC,EAC7E,EAER,CAAC,EAEH,OAAOZ,CACT",
6
- "names": ["CELL", "collider", "computeBounds", "horizontalRay", "traverse", "updateWorldMatrix", "hit", "layer", "x", "y", "z", "dx", "dz", "reach", "skip", "other", "best", "found", "mesh", "m", "k", "radius", "c", "ox", "oy", "oz", "seen", "ix", "iz", "t", "height"]
7
- }
@@ -1,2 +0,0 @@
1
- function e(M,i,c,u,s){const t=Math.PI/180,o=(280.16+360.9856235*M+c)*t-u,a=i*t,h=Math.asin(Math.sin(a)*Math.sin(s)+Math.cos(a)*Math.cos(s)*Math.cos(o)),n=(Math.atan2(Math.sin(o),Math.cos(o)*Math.sin(a)-Math.tan(s)*Math.cos(a))/t+180+360)%360;return{altitude:h/t,azimuth:n,direction:[Math.sin(n*t)*Math.cos(h),Math.sin(h),-Math.cos(n*t)*Math.cos(h)]}}export{e as horizontalPosition};
2
- //# sourceMappingURL=horizontalPosition.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/horizontalPosition.js"],
4
- "sourcesContent": ["\nexport function horizontalPosition(d, lat, lng, ascension, declination) {\n const rad = Math.PI / 180;\n const hourAngle = (280.16 + 360.9856235 * d + lng) * rad - ascension;\n const latitude = lat * rad;\n const altitude = Math.asin(Math.sin(latitude) * Math.sin(declination) +\n Math.cos(latitude) * Math.cos(declination) * Math.cos(hourAngle));\n const southAzimuth = Math.atan2(Math.sin(hourAngle),\n Math.cos(hourAngle) * Math.sin(latitude) - Math.tan(declination) * Math.cos(latitude));\n const azimuth = (southAzimuth / rad + 180 + 360) % 360;\n return {\n altitude: altitude / rad, azimuth,\n direction: [Math.sin(azimuth * rad) * Math.cos(altitude), Math.sin(altitude),\n -Math.cos(azimuth * rad) * Math.cos(altitude)]\n };\n}\n"],
5
- "mappings": "AACO,SAASA,EAAmBC,EAAGC,EAAKC,EAAKC,EAAWC,EAAa,CACtE,MAAMC,EAAM,KAAK,GAAK,IAChBC,GAAa,OAAS,YAAcN,EAAIE,GAAOG,EAAMF,EACrDI,EAAWN,EAAMI,EACjBG,EAAW,KAAK,KAAK,KAAK,IAAID,CAAQ,EAAI,KAAK,IAAIH,CAAW,EAClE,KAAK,IAAIG,CAAQ,EAAI,KAAK,IAAIH,CAAW,EAAI,KAAK,IAAIE,CAAS,CAAC,EAG5DG,GAFe,KAAK,MAAM,KAAK,IAAIH,CAAS,EAChD,KAAK,IAAIA,CAAS,EAAI,KAAK,IAAIC,CAAQ,EAAI,KAAK,IAAIH,CAAW,EAAI,KAAK,IAAIG,CAAQ,CAAC,EACvDF,EAAM,IAAM,KAAO,IACnD,MAAO,CACL,SAAUG,EAAWH,EAAK,QAAAI,EAC1B,UAAW,CAAC,KAAK,IAAIA,EAAUJ,CAAG,EAAI,KAAK,IAAIG,CAAQ,EAAG,KAAK,IAAIA,CAAQ,EAC3E,CAAC,KAAK,IAAIC,EAAUJ,CAAG,EAAI,KAAK,IAAIG,CAAQ,CAAC,CAC/C,CACF",
6
- "names": ["horizontalPosition", "d", "lat", "lng", "ascension", "declination", "rad", "hourAngle", "latitude", "altitude", "azimuth"]
7
- }
@@ -1,2 +0,0 @@
1
- function A(t,R,g,j,k,r,o){const n=R*9,f=t[n+3]-t[n],c=t[n+4]-t[n+1],i=t[n+5]-t[n+2],x=t[n+6]-t[n],s=t[n+7]-t[n+1],z=t[n+8]-t[n+2],q=-o*s,h=o*x-r*z,b=r*s,e=f*q+c*h+i*b;if(Math.abs(e)<1e-9)return-1;const u=g-t[n],y=j-t[n+1],a=k-t[n+2],p=(u*q+y*h+a*b)/e;if(p<0||p>1)return-1;const l=y*i-a*c,m=a*f-u*i,w=u*c-y*f,M=(r*l+o*w)/e;return M<0||p+M>1?-1:(x*l+s*m+z*w)/e}export{A as horizontalRay};
2
- //# sourceMappingURL=horizontalRay.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/horizontalRay.js"],
4
- "sourcesContent": ["// M\u00F6ller-Trumbore for the horizontal ray (ox, oy, oz) + d\u00B7(dx, 0, dz) against triangle t; returns d or -1.\nexport function horizontalRay(v, t, ox, oy, oz, dx, dz) {\n const i = t * 9, ex = v[i + 3] - v[i], ey = v[i + 4] - v[i + 1], ez = v[i + 5] - v[i + 2];\n const fx = v[i + 6] - v[i], fy = v[i + 7] - v[i + 1], fz = v[i + 8] - v[i + 2];\n const px = -dz * fy, py = dz * fx - dx * fz, pz = dx * fy, det = ex * px + ey * py + ez * pz;\n if (Math.abs(det) < 1e-9) return -1;\n const tx = ox - v[i], ty = oy - v[i + 1], tz = oz - v[i + 2], u = (tx * px + ty * py + tz * pz) / det;\n if (u < 0 || u > 1) return -1;\n const qx = ty * ez - tz * ey, qy = tz * ex - tx * ez, qz = tx * ey - ty * ex, w = (dx * qx + dz * qz) / det;\n if (w < 0 || u + w > 1) return -1;\n return (fx * qx + fy * qy + fz * qz) / det;\n}\n"],
5
- "mappings": "AACO,SAASA,EAAcC,EAAGC,EAAGC,EAAIC,EAAIC,EAAIC,EAAIC,EAAI,CACtD,MAAMC,EAAIN,EAAI,EAAGO,EAAKR,EAAEO,EAAI,CAAC,EAAIP,EAAEO,CAAC,EAAGE,EAAKT,EAAEO,EAAI,CAAC,EAAIP,EAAEO,EAAI,CAAC,EAAGG,EAAKV,EAAEO,EAAI,CAAC,EAAIP,EAAEO,EAAI,CAAC,EAClFI,EAAKX,EAAEO,EAAI,CAAC,EAAIP,EAAEO,CAAC,EAAGK,EAAKZ,EAAEO,EAAI,CAAC,EAAIP,EAAEO,EAAI,CAAC,EAAGM,EAAKb,EAAEO,EAAI,CAAC,EAAIP,EAAEO,EAAI,CAAC,EACvEO,EAAK,CAACR,EAAKM,EAAIG,EAAKT,EAAKK,EAAKN,EAAKQ,EAAIG,EAAKX,EAAKO,EAAIK,EAAMT,EAAKM,EAAKL,EAAKM,EAAKL,EAAKM,EAC1F,GAAI,KAAK,IAAIC,CAAG,EAAI,KAAM,MAAO,GACjC,MAAMC,EAAKhB,EAAKF,EAAEO,CAAC,EAAGY,EAAKhB,EAAKH,EAAEO,EAAI,CAAC,EAAGa,EAAKhB,EAAKJ,EAAEO,EAAI,CAAC,EAAGc,GAAKH,EAAKJ,EAAKK,EAAKJ,EAAKK,EAAKJ,GAAMC,EAClG,GAAII,EAAI,GAAKA,EAAI,EAAG,MAAO,GAC3B,MAAMC,EAAKH,EAAKT,EAAKU,EAAKX,EAAIc,EAAKH,EAAKZ,EAAKU,EAAKR,EAAIc,EAAKN,EAAKT,EAAKU,EAAKX,EAAIiB,GAAKpB,EAAKiB,EAAKhB,EAAKkB,GAAMP,EACxG,OAAIQ,EAAI,GAAKJ,EAAII,EAAI,EAAU,IACvBd,EAAKW,EAAKV,EAAKW,EAAKV,EAAKW,GAAMP,CACzC",
6
- "names": ["horizontalRay", "v", "t", "ox", "oy", "oz", "dx", "dz", "i", "ex", "ey", "ez", "fx", "fy", "fz", "px", "py", "pz", "det", "tx", "ty", "tz", "u", "qx", "qy", "qz", "w"]
7
- }
@@ -1,2 +0,0 @@
1
- const l=[[-5.5,30],[5.5,30],[5.5,-20],[4,-26],[1.5,-30],[-1.5,-30],[-4,-26],[-5.5,-20]];export{l as hull};
2
- //# sourceMappingURL=hull.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/hull.js"],
4
- "sourcesContent": ["export const hull = [[-5.5, 30], [5.5, 30], [5.5, -20], [4, -26], [1.5, -30], [-1.5, -30], [-4, -26], [-5.5, -20]];\n"],
5
- "mappings": "AAAO,MAAMA,EAAO,CAAC,CAAC,KAAM,EAAE,EAAG,CAAC,IAAK,EAAE,EAAG,CAAC,IAAK,GAAG,EAAG,CAAC,EAAG,GAAG,EAAG,CAAC,IAAK,GAAG,EAAG,CAAC,KAAM,GAAG,EAAG,CAAC,GAAI,GAAG,EAAG,CAAC,KAAM,GAAG,CAAC",
6
- "names": ["hull"]
7
- }
@@ -1,2 +0,0 @@
1
- import{onAddSun as i}from"./onAddSun.js";import{onRemoveSun as m}from"./onRemoveSun.js";function u(o,n){L.Util.setOptions(o,n),o.onAdd=t=>i(o,t),o.onRemove=()=>m(o)}export{u as initSunlight};
2
- //# sourceMappingURL=initSunlight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/initSunlight.js"],
4
- "sourcesContent": ["import { onAddSun } from './onAddSun.js';\nimport { onRemoveSun } from './onRemoveSun.js';\n\n// Sun/moon clock control and sky colours; the control is created on first add (`layer.control`).\nexport function initSunlight(layer, options) {\n L.Util.setOptions(layer, options);\n layer.onAdd = map => onAddSun(layer, map);\n layer.onRemove = () => onRemoveSun(layer);\n}"],
5
- "mappings": "AAAA,OAAS,YAAAA,MAAgB,gBACzB,OAAS,eAAAC,MAAmB,mBAGrB,SAASC,EAAaC,EAAOC,EAAS,CAC3C,EAAE,KAAK,WAAWD,EAAOC,CAAO,EAChCD,EAAM,MAAQE,GAAOL,EAASG,EAAOE,CAAG,EACxCF,EAAM,SAAW,IAAMF,EAAYE,CAAK,CAC1C",
6
- "names": ["onAddSun", "onRemoveSun", "initSunlight", "layer", "options", "map"]
7
- }
@@ -1,2 +0,0 @@
1
- import{onTerrainRemove as t}from"./onTerrainRemove.js";import{onTerrainAdd as d}from"./onTerrainAdd.js";function a(n,e){const o=e.url,i={...e};delete i.url,n._init3D(i),n.terrainSource=o,n._terrainTiles=new Map,n._rasterTiles=new Map,n._terrainReady=!1,n.onAdd=r=>d(n,r),n.onRemove=r=>t(n,r)}export{a as initTerrain};
2
- //# sourceMappingURL=initTerrain.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/initTerrain.js"],
4
- "sourcesContent": ["import { onTerrainRemove } from './onTerrainRemove.js';\nimport { onTerrainAdd } from './onTerrainAdd.js';\n\n/**\n * Renders IGN Float32 DEM tiles and PMTiles raster basemaps in the shared WebGPU scene.\n * Source options: `url` (single-zoom Float32 PMTiles DEM); `bridges` (optional GeoJSON deck polygons with Z, see _addBridges).\n */\nexport function initTerrain(layer, options) {\n const terrainSource = options.url;\n const layerOptions = { ...options };\n delete layerOptions.url;\n layer._init3D(layerOptions);\n layer.terrainSource = terrainSource;\n layer._terrainTiles = new Map();\n layer._rasterTiles = new Map();\n layer._terrainReady = false;\n layer.onAdd = map => onTerrainAdd(layer, map);\n layer.onRemove = map => onTerrainRemove(layer, map);\n}\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,uBAChC,OAAS,gBAAAC,MAAoB,oBAMtB,SAASC,EAAYC,EAAOC,EAAS,CAC1C,MAAMC,EAAgBD,EAAQ,IACxBE,EAAe,CAAE,GAAGF,CAAQ,EAClC,OAAOE,EAAa,IACpBH,EAAM,QAAQG,CAAY,EAC1BH,EAAM,cAAgBE,EACtBF,EAAM,cAAgB,IAAI,IAC1BA,EAAM,aAAe,IAAI,IACzBA,EAAM,cAAgB,GACtBA,EAAM,MAAQI,GAAON,EAAaE,EAAOI,CAAG,EAC5CJ,EAAM,SAAWI,GAAOP,EAAgBG,EAAOI,CAAG,CACpD",
6
- "names": ["onTerrainRemove", "onTerrainAdd", "initTerrain", "layer", "options", "terrainSource", "layerOptions", "map"]
7
- }
@@ -1,40 +0,0 @@
1
- import{build as x}from"./build.js";import{tooltip as y}from"./tooltip.js";import{speed as w}from"./speed.js";import{vehicles as k}from"./vehicles.js";import{addTraffic as z,placeTraffic as T,removeTraffic as _,readyTraffic as A,tickTraffic as D,updateTraffic as I,updateTrafficTerrain as B}from"./traffic.js";function C(t,{url:l,vehicle:u="car",side:i,outline:c,speed:f=w,...p}={}){const{model:r,lights:n,side:m}=k[u];i??=m,t._init3D({tooltip:y,nightLight:!!n,...p});const o=L.DomUtil.create("small","traffic-status");o.style.cssText="display:block;max-width:200px;margin:0 0 4px 20px;color:#555;";const s=x(r(0)),d=s.position.length,v=d/3,a=new ArrayBuffer(16),b=new Float32Array(a),g=new Uint32Array(a),e={layer:t,url:l,model:r,lights:n,side:i,outline:c,velocity:f,status:o,template:s,stride:d,vertices:v,params:a,paramFloats:b,paramInts:g,ready:!1,frame:void 0,request:void 0,lanes:[],tripsKey:void 0,mesh:void 0,route:void 0,litAt:-1/0,trips:[],rebasedAt:0,nextCheck:-1/0,elapsed:0,gpu:null,lanesDirty:!0,stale:!1,loaded:void 0,file:void 0},h=`
2
- struct Params { seconds: f32, side: f32, vertices: u32, total: u32 }
3
- struct Vehicle { start: u32, count: u32, base: f32, speed: f32 }
4
- @group(0) @binding(0) var<uniform> params: Params;
5
- @group(0) @binding(1) var<storage, read> model: array<f32>;
6
- @group(0) @binding(2) var<storage, read> points: array<vec4f>;
7
- @group(0) @binding(3) var<storage, read> vehicles: array<Vehicle>;
8
- @group(0) @binding(4) var<storage, read_write> position: array<f32>;
9
- @group(0) @binding(5) var<storage, read_write> normal: array<f32>;
10
- @compute @workgroup_size(64)
11
- fn main(@builtin(global_invocation_id) id: vec3u) {
12
- let v = id.x;
13
- if (v >= params.total) { return; }
14
- let vehicle = vehicles[v / params.vertices];
15
- let last = vehicle.start + vehicle.count - 1u;
16
- let length = points[last].w;
17
- var s = vehicle.base + params.seconds * vehicle.speed;
18
- s -= length * floor(s / length);
19
- var i = vehicle.start + 1u;
20
- while (i < last && points[i].w < s) { i++; }
21
- let a = points[i - 1u];
22
- let b = points[i];
23
- let d = select(b.w - a.w, 1.0, b.w == a.w);
24
- let t = (s - a.w) / d;
25
- let dx = (b.x - a.x) / d;
26
- let dz = (b.y - a.y) / d;
27
- let cx = a.x + (b.x - a.x) * t - dz * params.side;
28
- let cz = a.y + (b.y - a.y) * t + dx * params.side;
29
- let y = a.z + (b.z - a.z) * t;
30
- let k = (v % params.vertices) * 3u;
31
- let n = params.vertices * 3u + k;
32
- let o = v * 3u;
33
- position[o] = cx - model[k] * dz - model[k + 2u] * dx;
34
- position[o + 1u] = y + model[k + 1u];
35
- position[o + 2u] = cz + model[k] * dx - model[k + 2u] * dz;
36
- normal[o] = -model[n] * dz - model[n + 2u] * dx;
37
- normal[o + 1u] = model[n + 1u];
38
- normal[o + 2u] = model[n] * dx - model[n + 2u] * dz;
39
- }`;e.shader=h,e.tick=D.bind(null,e),e.update=I.bind(null,e),e.terrain=B.bind(null,e),t._beforeRaycast=T.bind(null,e),t.on("ready",A.bind(null,e)),t.on("add",z.bind(null,e)),t.on("remove",_.bind(null,e))}export{C as initTraffic};
40
- //# sourceMappingURL=initTraffic.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/initTraffic.js"],
4
- "sourcesContent": ["\uFEFF/**\r\n * Vehicles moving along GeoJSON lanes; a compute pass places them on the GPU every frame.\r\n * Source options:\r\n * - `url`: GeoJSON (Multi)LineStrings, or a JS module whose default export `(time, layer, signal)` returns them (time-dependent data);\r\n * - `vehicle`: 'car' (default) or 'boat'; `side`: offset right of the lane centreline in metres (vehicle default);\r\n * - `speed`: m/s of `flow` lanes; `outline`: draw the lanes.\r\n * Lane properties: `flow` (vehicles/h) or `timetable` (see scheduledTrips.js), optional fixed `elevation`\r\n * in metres, `name`/`description` for the default tooltip. The status line (vehicle count, then the FeatureCollection `note`) sits under the layer's entry in the layers control.\r\n * The 'sunlight' layer on the same map drives the time; without one, vehicles run live.\r\n */\r\nimport { build } from './build.js';\r\nimport { tooltip } from './tooltip.js';\r\nimport { speed } from './speed.js';\r\nimport { vehicles } from './vehicles.js';\r\nimport {\r\n addTraffic,\r\n placeTraffic,\r\n removeTraffic,\r\n readyTraffic,\r\n tickTraffic,\r\n updateTraffic,\r\n updateTrafficTerrain,\r\n} from './traffic.js';\r\n\r\nexport function initTraffic(layer, { url, vehicle = 'car', side, outline, speed: velocity = speed, ...options } = {}) {\r\n const { model, lights, side: defaultSide } = vehicles[vehicle];\r\n side ??= defaultSide;\r\n layer._init3D({\r\n tooltip,\r\n nightLight: Boolean(lights),\r\n ...options,\r\n });\r\n const status = L.DomUtil.create('small', 'traffic-status');\r\n status.style.cssText = 'display:block;max-width:200px;margin:0 0 4px 20px;color:#555;';\r\n const template = build(model(0)), stride = template.position.length, vertices = stride / 3;\r\n const params = new ArrayBuffer(16), paramFloats = new Float32Array(params), paramInts = new Uint32Array(params);\r\n const state = {\r\n layer, url, model, lights, side, outline, velocity, status, template, stride, vertices,\r\n params, paramFloats, paramInts,\r\n ready: false, frame: undefined, request: undefined, lanes: [], tripsKey: undefined,\r\n mesh: undefined, route: undefined, litAt: -Infinity,\r\n trips: [], rebasedAt: 0, nextCheck: -Infinity, elapsed: 0, gpu: null,\r\n lanesDirty: true, stale: false, loaded: undefined, file: undefined,\r\n };\r\n // Lane points are [x, z, ground, cumulative length]. Mirrors along() and place().\r\n const shader = `\r\n struct Params { seconds: f32, side: f32, vertices: u32, total: u32 }\r\n struct Vehicle { start: u32, count: u32, base: f32, speed: f32 }\r\n @group(0) @binding(0) var<uniform> params: Params;\r\n @group(0) @binding(1) var<storage, read> model: array<f32>;\r\n @group(0) @binding(2) var<storage, read> points: array<vec4f>;\r\n @group(0) @binding(3) var<storage, read> vehicles: array<Vehicle>;\r\n @group(0) @binding(4) var<storage, read_write> position: array<f32>;\r\n @group(0) @binding(5) var<storage, read_write> normal: array<f32>;\r\n @compute @workgroup_size(64)\r\n fn main(@builtin(global_invocation_id) id: vec3u) {\r\n let v = id.x;\r\n if (v >= params.total) { return; }\r\n let vehicle = vehicles[v / params.vertices];\r\n let last = vehicle.start + vehicle.count - 1u;\r\n let length = points[last].w;\r\n var s = vehicle.base + params.seconds * vehicle.speed;\r\n s -= length * floor(s / length);\r\n var i = vehicle.start + 1u;\r\n while (i < last && points[i].w < s) { i++; }\r\n let a = points[i - 1u];\r\n let b = points[i];\r\n let d = select(b.w - a.w, 1.0, b.w == a.w);\r\n let t = (s - a.w) / d;\r\n let dx = (b.x - a.x) / d;\r\n let dz = (b.y - a.y) / d;\r\n let cx = a.x + (b.x - a.x) * t - dz * params.side;\r\n let cz = a.y + (b.y - a.y) * t + dx * params.side;\r\n let y = a.z + (b.z - a.z) * t;\r\n let k = (v % params.vertices) * 3u;\r\n let n = params.vertices * 3u + k;\r\n let o = v * 3u;\r\n position[o] = cx - model[k] * dz - model[k + 2u] * dx;\r\n position[o + 1u] = y + model[k + 1u];\r\n position[o + 2u] = cz + model[k] * dx - model[k + 2u] * dz;\r\n normal[o] = -model[n] * dz - model[n + 2u] * dx;\r\n normal[o + 1u] = model[n + 1u];\r\n normal[o + 2u] = model[n] * dx - model[n + 2u] * dz;\r\n }`;\r\n state.shader = shader;\r\n state.tick = tickTraffic.bind(null, state);\r\n state.update = updateTraffic.bind(null, state);\r\n state.terrain = updateTrafficTerrain.bind(null, state);\r\n layer._beforeRaycast = placeTraffic.bind(null, state);\r\n layer.on('ready', readyTraffic.bind(null, state));\r\n layer.on('add', addTraffic.bind(null, state));\r\n layer.on('remove', removeTraffic.bind(null, state));\r\n}\r\n"],
5
- "mappings": "AAUA,OAAS,SAAAA,MAAa,aACtB,OAAS,WAAAC,MAAe,eACxB,OAAS,SAAAC,MAAa,aACtB,OAAS,YAAAC,MAAgB,gBACzB,OACE,cAAAC,EACA,gBAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,eAAAC,EACA,iBAAAC,EACA,wBAAAC,MACK,eAEA,SAASC,EAAYC,EAAO,CAAE,IAAAC,EAAK,QAAAC,EAAU,MAAO,KAAAC,EAAM,QAAAC,EAAS,MAAOC,EAAWf,EAAO,GAAGgB,CAAQ,EAAI,CAAC,EAAG,CACpH,KAAM,CAAE,MAAAC,EAAO,OAAAC,EAAQ,KAAMC,CAAY,EAAIlB,EAASW,CAAO,EAC7DC,IAASM,EACTT,EAAM,QAAQ,CACZ,QAAAX,EACA,WAAY,EAAQmB,EACpB,GAAGF,CACL,CAAC,EACD,MAAMI,EAAS,EAAE,QAAQ,OAAO,QAAS,gBAAgB,EACzDA,EAAO,MAAM,QAAU,gEACvB,MAAMC,EAAWvB,EAAMmB,EAAM,CAAC,CAAC,EAAGK,EAASD,EAAS,SAAS,OAAQE,EAAWD,EAAS,EACnFE,EAAS,IAAI,YAAY,EAAE,EAAGC,EAAc,IAAI,aAAaD,CAAM,EAAGE,EAAY,IAAI,YAAYF,CAAM,EACxGG,EAAQ,CACZ,MAAAjB,EAAO,IAAAC,EAAK,MAAAM,EAAO,OAAAC,EAAQ,KAAAL,EAAM,QAAAC,EAAS,SAAAC,EAAU,OAAAK,EAAQ,SAAAC,EAAU,OAAAC,EAAQ,SAAAC,EAC9E,OAAAC,EAAQ,YAAAC,EAAa,UAAAC,EACrB,MAAO,GAAO,MAAO,OAAW,QAAS,OAAW,MAAO,CAAC,EAAG,SAAU,OACzE,KAAM,OAAW,MAAO,OAAW,MAAO,KAC1C,MAAO,CAAC,EAAG,UAAW,EAAG,UAAW,KAAW,QAAS,EAAG,IAAK,KAChE,WAAY,GAAM,MAAO,GAAO,OAAQ,OAAW,KAAM,MAC3D,EAEME,EAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAuCfD,EAAM,OAASC,EACfD,EAAM,KAAOrB,EAAY,KAAK,KAAMqB,CAAK,EACzCA,EAAM,OAASpB,EAAc,KAAK,KAAMoB,CAAK,EAC7CA,EAAM,QAAUnB,EAAqB,KAAK,KAAMmB,CAAK,EACrDjB,EAAM,eAAiBP,EAAa,KAAK,KAAMwB,CAAK,EACpDjB,EAAM,GAAG,QAASL,EAAa,KAAK,KAAMsB,CAAK,CAAC,EAChDjB,EAAM,GAAG,MAAOR,EAAW,KAAK,KAAMyB,CAAK,CAAC,EAC5CjB,EAAM,GAAG,SAAUN,EAAc,KAAK,KAAMuB,CAAK,CAAC,CACpD",
6
- "names": ["build", "tooltip", "speed", "vehicles", "addTraffic", "placeTraffic", "removeTraffic", "readyTraffic", "tickTraffic", "updateTraffic", "updateTrafficTerrain", "initTraffic", "layer", "url", "vehicle", "side", "outline", "velocity", "options", "model", "lights", "defaultSide", "status", "template", "stride", "vertices", "params", "paramFloats", "paramInts", "state", "shader"]
7
- }
@@ -1,2 +0,0 @@
1
- import{controlOnAdd as b,onBlur as p,onKey as u,onLayerAdd as g,onLayerRemove as f,onPointer as m,onReady as x,onTerrain as y,start as h,step as k,stop as A,toggle as v}from"./walk.js";function D(e,{speed:r=70,distance:a=20,position:l="bottomright",...s}={}){e._init3D(s);const c=new Set,d=new L.Control({position:l}),o=L.DomUtil.create("div","leaflet-bar leaflet-control");o.style.cssText="display:flex;align-items:center;background:#fff;";const t=L.DomUtil.create("button","",o);t.type="button",t.title="Walk",t.setAttribute("aria-label","Walk"),t.setAttribute("aria-pressed","false"),t.textContent="\u{1F6B6}",t.style.cssText="width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;";const i=L.DomUtil.create("small","",o);i.style.cssText="display:none;padding:0 8px;color:#333;white-space:nowrap;",i.textContent="W/S: run \xB7 A/D: turn \xB7 drag: look around \xB7 Esc: exit",L.DomEvent.disableClickPropagation(o);const n={layer:e,speed:r,distance:a,keys:c,control:d,container:o,button:t,hint:i,meshes:null,frame:null,last:void 0,swing:0,saved:null,drag:null,ready:!1,state:e.walker={latlng:null,heading:0,phase:0}};n.step=k.bind(n),n.onKey=u.bind(n),n.onBlur=p.bind(n),n.onPointer=m.bind(n),n.onTerrain=y.bind(n),n.start=h.bind(n),n.stop=A.bind(n),n.toggle=v.bind(n),n.controlOnAdd=b.bind(n),n.onReady=x.bind(n),n.onLayerAdd=g.bind(n),n.onLayerRemove=f.bind(n),d.onAdd=n.controlOnAdd,L.DomEvent.on(t,"click",n.toggle),e.on("ready",n.onReady),e.on("add",n.onLayerAdd),e.on("remove",n.onLayerRemove)}export{D as initWalk};
2
- //# sourceMappingURL=initWalk.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/initWalk.js"],
4
- "sourcesContent": ["import {\r\n controlOnAdd, onBlur, onKey, onLayerAdd, onLayerRemove, onPointer, onReady, onTerrain, start, step, stop, toggle\r\n} from './walk.js';\r\n\r\n/**\r\n * Third-person walk mode, toggled by a map button (and Esc): a pedestrian at the map centre runs with W/S (or \u2191/\u2193) and\r\n * turns with A/D (or \u2190/\u2192); the camera swings back behind it while it moves. Dragging the map only turns the camera\r\n * (bearing, pitch); the wheel changes the camera distance.\r\n * The walker follows the terrain, bridges included, and `layer.walker` exposes `{ latlng, heading, phase }`.\r\n * Source options: `speed` (m/s, default 6), `distance` (camera distance in metres, default 20), `position` (button corner, default 'topleft').\r\n * Visible meshes of the other 3D layers (buildings, trees, models, streetlights) are solid; terrain and traffic are not.\r\n */\r\nexport function initWalk(layer, {\r\n speed = 70,\r\n distance = 20,\r\n position = 'bottomright',\r\n ...options\r\n} = {}) {\r\n layer._init3D(options);\r\n const keys = new Set();\r\n const control = new L.Control({ position });\r\n const container = L.DomUtil.create('div', 'leaflet-bar leaflet-control');\r\n container.style.cssText = 'display:flex;align-items:center;background:#fff;';\r\n const button = L.DomUtil.create('button', '', container);\r\n button.type = 'button';\r\n button.title = 'Walk';\r\n button.setAttribute('aria-label', 'Walk');\r\n button.setAttribute('aria-pressed', 'false');\r\n button.textContent = '\uD83D\uDEB6';\r\n button.style.cssText = 'width:30px;height:30px;padding:0;border:0;border-radius:4px;background:#fff;font-size:18px;line-height:30px;cursor:pointer;';\r\n const hint = L.DomUtil.create('small', '', container);\r\n hint.style.cssText = 'display:none;padding:0 8px;color:#333;white-space:nowrap;';\r\n hint.textContent = 'W/S: run \u00B7 A/D: turn \u00B7 drag: look around \u00B7 Esc: exit';\r\n L.DomEvent.disableClickPropagation(container);\r\n\r\n const context = {\r\n layer,\r\n speed,\r\n distance,\r\n keys,\r\n control,\r\n container,\r\n button,\r\n hint,\r\n meshes: null,\r\n frame: null,\r\n last: undefined,\r\n swing: 0,\r\n saved: null,\r\n drag: null,\r\n ready: false,\r\n state: layer.walker = { latlng: null, heading: 0, phase: 0 }\r\n }\r\n context.step = step.bind(context);\r\n context.onKey = onKey.bind(context);\r\n context.onBlur = onBlur.bind(context);\r\n context.onPointer = onPointer.bind(context);\r\n context.onTerrain = onTerrain.bind(context);\r\n context.start = start.bind(context);\r\n context.stop = stop.bind(context);\r\n context.toggle = toggle.bind(context);\r\n context.controlOnAdd = controlOnAdd.bind(context);\r\n context.onReady = onReady.bind(context);\r\n context.onLayerAdd = onLayerAdd.bind(context);\r\n context.onLayerRemove = onLayerRemove.bind(context);\r\n\r\n control.onAdd = context.controlOnAdd;\r\n L.DomEvent.on(button, 'click', context.toggle);\r\n layer.on('ready', context.onReady);\r\n layer.on('add', context.onLayerAdd);\r\n layer.on('remove', context.onLayerRemove);\r\n};\r\n"],
5
- "mappings": "AAAA,OACE,gBAAAA,EAAc,UAAAC,EAAQ,SAAAC,EAAO,cAAAC,EAAY,iBAAAC,EAAe,aAAAC,EAAW,WAAAC,EAAS,aAAAC,EAAW,SAAAC,EAAO,QAAAC,EAAM,QAAAC,EAAM,UAAAC,MACrG,YAUA,SAASC,EAASC,EAAO,CAC9B,MAAAC,EAAQ,GACR,SAAAC,EAAW,GACX,SAAAC,EAAW,cACX,GAAGC,CACL,EAAI,CAAC,EAAG,CACNJ,EAAM,QAAQI,CAAO,EACrB,MAAMC,EAAO,IAAI,IACXC,EAAU,IAAI,EAAE,QAAQ,CAAE,SAAAH,CAAS,CAAC,EACpCI,EAAY,EAAE,QAAQ,OAAO,MAAO,6BAA6B,EACvEA,EAAU,MAAM,QAAU,mDAC1B,MAAMC,EAAS,EAAE,QAAQ,OAAO,SAAU,GAAID,CAAS,EACvDC,EAAO,KAAO,SACdA,EAAO,MAAQ,OACfA,EAAO,aAAa,aAAc,MAAM,EACxCA,EAAO,aAAa,eAAgB,OAAO,EAC3CA,EAAO,YAAc,YACrBA,EAAO,MAAM,QAAU,8HACvB,MAAMC,EAAO,EAAE,QAAQ,OAAO,QAAS,GAAIF,CAAS,EACpDE,EAAK,MAAM,QAAU,4DACrBA,EAAK,YAAc,gEACnB,EAAE,SAAS,wBAAwBF,CAAS,EAE5C,MAAMG,EAAU,CACd,MAAAV,EACA,MAAAC,EACA,SAAAC,EACA,KAAAG,EACA,QAAAC,EACA,UAAAC,EACA,OAAAC,EACA,KAAAC,EACA,OAAQ,KACR,MAAO,KACP,KAAM,OACN,MAAO,EACP,MAAO,KACP,KAAM,KACN,MAAO,GACP,MAAOT,EAAM,OAAS,CAAE,OAAQ,KAAM,QAAS,EAAG,MAAO,CAAE,CAC7D,EACAU,EAAQ,KAAOd,EAAK,KAAKc,CAAO,EAChCA,EAAQ,MAAQrB,EAAM,KAAKqB,CAAO,EAClCA,EAAQ,OAAStB,EAAO,KAAKsB,CAAO,EACpCA,EAAQ,UAAYlB,EAAU,KAAKkB,CAAO,EAC1CA,EAAQ,UAAYhB,EAAU,KAAKgB,CAAO,EAC1CA,EAAQ,MAAQf,EAAM,KAAKe,CAAO,EAClCA,EAAQ,KAAOb,EAAK,KAAKa,CAAO,EAChCA,EAAQ,OAASZ,EAAO,KAAKY,CAAO,EACpCA,EAAQ,aAAevB,EAAa,KAAKuB,CAAO,EAChDA,EAAQ,QAAUjB,EAAQ,KAAKiB,CAAO,EACtCA,EAAQ,WAAapB,EAAW,KAAKoB,CAAO,EAC5CA,EAAQ,cAAgBnB,EAAc,KAAKmB,CAAO,EAElDJ,EAAQ,MAAQI,EAAQ,aACxB,EAAE,SAAS,GAAGF,EAAQ,QAASE,EAAQ,MAAM,EAC7CV,EAAM,GAAG,QAASU,EAAQ,OAAO,EACjCV,EAAM,GAAG,MAAOU,EAAQ,UAAU,EAClCV,EAAM,GAAG,SAAUU,EAAQ,aAAa,CAC1C",
6
- "names": ["controlOnAdd", "onBlur", "onKey", "onLayerAdd", "onLayerRemove", "onPointer", "onReady", "onTerrain", "start", "step", "stop", "toggle", "initWalk", "layer", "speed", "distance", "position", "options", "keys", "control", "container", "button", "hint", "context"]
7
- }
@@ -1,2 +0,0 @@
1
- import{computeBounds as H}from"./computeBounds.js";const q=(n,e)=>n.map((w,u)=>w-e[u]),G=(n,e)=>[n[1]*e[2]-n[2]*e[1],n[2]*e[0]-n[0]*e[2],n[0]*e[1]-n[1]*e[0]],I=(n,e)=>n.reduce((w,u,r)=>w+u*e[r],0);function Q(n,e,w=0){const u=[],r=[0,0,0],v=[0,0,0],D=[0,0,0];for(const o of e){const y=new DOMMatrix(o.worldMatrix).inverse();if(![...y.toFloat64Array()].every(Number.isFinite))throw new Error("Singular 3D transform");const m=new DOMPoint(...n.origin,1).matrixTransform(y),c=[m.x/m.w,m.y/m.w,m.z/m.w],P=new DOMPoint(...n.direction,0).matrixTransform(y),a=[P.x,P.y,P.z],F=Math.hypot(...a)||1;a[0]/=F,a[1]/=F,a[2]/=F,o.geometry.bounds||H(o.geometry);let T=0,z=1/0;for(let t=0;t<3;t++)if(Math.abs(a[t])<1e-12){if(c[t]<o.geometry.bounds.min[t]||c[t]>o.geometry.bounds.max[t]){z=-1/0;break}}else{const l=(o.geometry.bounds.min[t]-c[t])/a[t],g=(o.geometry.bounds.max[t]-c[t])/a[t];T=Math.max(T,Math.min(l,g)),z=Math.min(z,Math.max(l,g))}if(z<T)continue;const{position:i,index:s}=o.geometry.attributes;let p=1/0,L;for(let t=0;t<(s?.count||i.count);t+=3){const l=(s?s.data[t]:t)*i.size,g=(s?s.data[t+1]:t+1)*i.size,V=(s?s.data[t+2]:t+2)*i.size;r[0]=i.data[l],r[1]=i.data[l+1],r[2]=i.data[l+2],v[0]=i.data[g],v[1]=i.data[g+1],v[2]=i.data[g+2],D[0]=i.data[V],D[1]=i.data[V+1],D[2]=i.data[V+2];const A=q(v,r),B=q(D,r),E=G(a,B),b=I(A,E);if(o.program.cullMode==="none"||o.program.cullFace===null?Math.abs(b)<1e-9:b<1e-9)continue;const N=q(c,r),d=I(N,E)/b;if(d<0||d>1)continue;const S=G(N,A),M=I(a,S)/b;if(M<0||d+M>1)continue;if(o.program.nightLight){const h=o.geometry.attributes.uv.data,x=s?[s.data[t],s.data[t+1],s.data[t+2]]:[t,t+1,t+2],k=h[x[0]*2]*(1-d-M)+h[x[1]*2]*d+h[x[2]*2]*M,C=h[x[0]*2+1]*(1-d-M)+h[x[1]*2+1]*d+h[x[2]*2+1]*M;if(k<=2&&(!w||k*k+C*C>.9))continue}const j=I(B,S)/b;j>0&&j<p&&(p=j,L=t/3)}if(L===void 0)continue;const f=new DOMPoint(a[0]*p+c[0],a[1]*p+c[1],a[2]*p+c[2],1).matrixTransform(new DOMMatrix(o.worldMatrix)),O=[f.x/f.w,f.y/f.w,f.z/f.w];u.push({faceIndex:L,object:o,point:O,distance:Math.hypot(O[0]-n.origin[0],O[1]-n.origin[1],O[2]-n.origin[2])})}return u.sort((o,y)=>o.distance-y.distance)}export{Q as intersectMeshes};
2
- //# sourceMappingURL=intersectMeshes.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/intersectMeshes.js"],
4
- "sourcesContent": ["import { computeBounds } from \"./computeBounds.js\";\n\nconst sub = (a, b) => a.map((v, i) => v - b[i]);\nconst cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\nconst dot = (a, b) => a.reduce((sum, v, i) => sum + v * b[i], 0);\n\n/** Nearest triangle hit per mesh, sorted by world-space distance. */\n\nexport function intersectMeshes(ray, meshes, night = 0) {\n const hits = [],\n a = [0, 0, 0],\n b = [0, 0, 0],\n c = [0, 0, 0];\n for (const mesh of meshes) {\n // Test in mesh-local space; compare distances only after returning to shared world space.\n const inverse = new DOMMatrix(mesh.worldMatrix).inverse();\n const inverseValues = inverse.toFloat64Array();\n if (![...inverseValues].every(Number.isFinite)) {\n throw new Error('Singular 3D transform');\n }\n const localOrigin = new DOMPoint(...ray.origin, 1).matrixTransform(inverse);\n const origin = [\n localOrigin.x / localOrigin.w,\n localOrigin.y / localOrigin.w,\n localOrigin.z / localOrigin.w\n ];\n const localDirection = new DOMPoint(...ray.direction, 0).matrixTransform(inverse);\n const direction = [\n localDirection.x,\n localDirection.y,\n localDirection.z\n ];\n const directionLength = Math.hypot(...direction) || 1;\n direction[0] /= directionLength;\n direction[1] /= directionLength;\n direction[2] /= directionLength;\n // AABB slab test reuses the same local ray as the triangle test.\n if (!mesh.geometry.bounds) {\n computeBounds(mesh.geometry);\n }\n let near = 0, far = Infinity;\n for (let i = 0; i < 3; i++) {\n if (Math.abs(direction[i]) < 1e-12) {\n if (origin[i] < mesh.geometry.bounds.min[i] || origin[i] > mesh.geometry.bounds.max[i]) {\n far = -Infinity;\n break;\n }\n } else {\n const a = (mesh.geometry.bounds.min[i] - origin[i]) / direction[i], b = (mesh.geometry.bounds.max[i] - origin[i]) / direction[i];\n near = Math.max(near, Math.min(a, b));\n far = Math.min(far, Math.max(a, b));\n }\n }\n if (far < near) {\n continue;\n }\n const { position, index } = mesh.geometry.attributes;\n let closest = Infinity, faceIndex;\n for (let i = 0; i < (index?.count || position.count); i += 3) {\n const ai = (index ? index.data[i] : i) * position.size;\n const bi = (index ? index.data[i + 1] : i + 1) * position.size;\n const ci = (index ? index.data[i + 2] : i + 2) * position.size;\n a[0] = position.data[ai];\n a[1] = position.data[ai + 1];\n a[2] = position.data[ai + 2];\n b[0] = position.data[bi];\n b[1] = position.data[bi + 1];\n b[2] = position.data[bi + 2];\n c[0] = position.data[ci];\n c[1] = position.data[ci + 1];\n c[2] = position.data[ci + 2];\n // Moller-Trumbore: barycentric triangle coordinates and local ray distance.\n const e = sub(b, a),\n f = sub(c, a),\n p = cross(direction, f),\n det = dot(e, p);\n if (mesh.program.cullMode === 'none' || mesh.program.cullFace === null\n ? Math.abs(det) < 1e-9 : det < 1e-9) {\n continue;\n }\n const t = sub(origin, a), u = dot(t, p) / det;\n if (u < 0 || u > 1) {\n continue;\n }\n const q = cross(t, e), v = dot(direction, q) / det;\n if (v < 0 || u + v > 1) {\n continue;\n }\n if (mesh.program.nightLight) {\n const uv = mesh.geometry.attributes.uv.data;\n const ids = index ? [index.data[i], index.data[i + 1], index.data[i + 2]] : [i, i + 1, i + 2];\n const x = uv[ids[0] * 2] * (1 - u - v) + uv[ids[1] * 2] * u + uv[ids[2] * 2] * v;\n const y = uv[ids[0] * 2 + 1] * (1 - u - v) + uv[ids[1] * 2 + 1] * u + uv[ids[2] * 2 + 1] * v;\n if (x <= 2 && (!night || x * x + y * y > 0.9)) continue;\n }\n const distance = dot(f, q) / det;\n if (distance > 0 && distance < closest) {\n closest = distance; faceIndex = i / 3;\n }\n }\n if (faceIndex === undefined) continue;\n const point = new DOMPoint(\n direction[0] * closest + origin[0],\n direction[1] * closest + origin[1],\n direction[2] * closest + origin[2],\n 1\n ).matrixTransform(new DOMMatrix(mesh.worldMatrix));\n const worldPoint = [point.x / point.w, point.y / point.w, point.z / point.w];\n hits.push({\n faceIndex,\n object: mesh,\n point: worldPoint,\n distance: Math.hypot(\n worldPoint[0] - ray.origin[0],\n worldPoint[1] - ray.origin[1],\n worldPoint[2] - ray.origin[2]\n )\n });\n }\n return hits.sort((a, b) => a.distance - b.distance);\n}\n"],
5
- "mappings": "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",
6
- "names": ["computeBounds", "sub", "a", "b", "v", "i", "cross", "dot", "sum", "intersectMeshes", "ray", "meshes", "night", "hits", "c", "mesh", "inverse", "localOrigin", "origin", "localDirection", "direction", "directionLength", "near", "far", "position", "index", "closest", "faceIndex", "ai", "bi", "ci", "e", "f", "p", "det", "t", "u", "q", "uv", "ids", "x", "y", "distance", "point", "worldPoint"]
7
- }
@@ -1,2 +0,0 @@
1
- function c(e){let r=0;for(let l=0;l<e.length;l++){const t=e[l],a=e[(l+1)%e.length];r+=t.x*a.y-a.x*t.y}return r<0}export{c as isClockWise};
2
- //# sourceMappingURL=isClockWise.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/isClockWise.js"],
4
- "sourcesContent": ["/**\n * @returns {boolean} Whether the `{x, y}` points are in clockwise order.\n */\n\nexport function isClockWise(points) {\n let area = 0;\n for (let i = 0; i < points.length; i++) {\n const a = points[i], b = points[(i + 1) % points.length];\n area += a.x * b.y - b.x * a.y;\n }\n return area < 0;\n}\n"],
5
- "mappings": "AAIO,SAASA,EAAYC,EAAQ,CAClC,IAAIC,EAAO,EACX,QAASC,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAAK,CACtC,MAAMC,EAAIH,EAAOE,CAAC,EAAGE,EAAIJ,GAAQE,EAAI,GAAKF,EAAO,MAAM,EACvDC,GAAQE,EAAE,EAAIC,EAAE,EAAIA,EAAE,EAAID,EAAE,CAC9B,CACA,OAAOF,EAAO,CAChB",
6
- "names": ["isClockWise", "points", "area", "i", "a", "b"]
7
- }
@@ -1,2 +0,0 @@
1
- import{parseColor as I}from"./parseColor.js";function g(a,c,h){const i=I(5264986),u=c.poleRadius;if(!Number.isFinite(u)||u<=0)throw new Error("Invalid lamp pole radius");const x=e=>Array.from({length:6},(t,o)=>({x:a.x+Math.cos(o*Math.PI/3)*e,y:a.y+Math.sin(o*Math.PI/3)*e,ground:a.ground,uv:[3,3]})),p={...a,uv:[3,3]};for(const[e,t,o]of[[u,0,c.top],[u*2.5,c.top-.25,c.top+.15]]){const f=x(e);for(let r=0;r<6;r++){const n=f[r],s=f[(r+1)%6],m=(r+.5)*Math.PI/3,M=Math.cos(m),l=-Math.sin(m);h(n,t,s,t,s,o,M,0,l,i),h(n,t,s,o,n,o,M,0,l,i),h(p,o,n,o,s,o,0,1,0,i),h(p,t,s,t,n,t,0,-1,0,i)}}}export{g as lampPostGeometry};
2
- //# sourceMappingURL=lampPostGeometry.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/lampPostGeometry.js"],
4
- "sourcesContent": ["import { parseColor } from \"./parseColor.js\";\n\n/** Schematic support and lamp head; wall-mounted fixtures do not get an invented pole. */\n\nexport function lampPostGeometry(point, style, addTriangle) {\n const color = parseColor(0x50565a), radius = style.poleRadius;\n if (!Number.isFinite(radius) || radius <= 0) {\n throw new Error('Invalid lamp pole radius');\n }\n const ring = r => Array.from({ length: 6 }, (_, i) => ({\n x: point.x + Math.cos(i * Math.PI / 3) * r,\n y: point.y + Math.sin(i * Math.PI / 3) * r, ground: point.ground, uv: [3, 3],\n }));\n const center = { ...point, uv: [3, 3] };\n for (const [r, low, high] of [[radius, 0, style.top], [radius * 2.5, style.top - 0.25, style.top + 0.15]]) {\n const points = ring(r);\n for (let i = 0; i < 6; i++) {\n const a = points[i], b = points[(i + 1) % 6], angle = (i + 0.5) * Math.PI / 3;\n const nx = Math.cos(angle), nz = -Math.sin(angle);\n addTriangle(a, low, b, low, b, high, nx, 0, nz, color);\n addTriangle(a, low, b, high, a, high, nx, 0, nz, color);\n addTriangle(center, high, a, high, b, high, 0, 1, 0, color);\n addTriangle(center, low, b, low, a, low, 0, -1, 0, color);\n }\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,cAAAA,MAAkB,kBAIpB,SAASC,EAAiBC,EAAOC,EAAOC,EAAa,CAC1D,MAAMC,EAAQL,EAAW,OAAQ,EAAGM,EAASH,EAAM,WACnD,GAAI,CAAC,OAAO,SAASG,CAAM,GAAKA,GAAU,EACxC,MAAM,IAAI,MAAM,0BAA0B,EAE5C,MAAMC,EAAOC,GAAK,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACC,EAAGC,KAAO,CACrD,EAAGR,EAAM,EAAI,KAAK,IAAIQ,EAAI,KAAK,GAAK,CAAC,EAAIF,EACzC,EAAGN,EAAM,EAAI,KAAK,IAAIQ,EAAI,KAAK,GAAK,CAAC,EAAIF,EAAG,OAAQN,EAAM,OAAQ,GAAI,CAAC,EAAG,CAAC,CAC7E,EAAE,EACIS,EAAS,CAAE,GAAGT,EAAO,GAAI,CAAC,EAAG,CAAC,CAAE,EACtC,SAAW,CAACM,EAAGI,EAAKC,CAAI,GAAK,CAAC,CAACP,EAAQ,EAAGH,EAAM,GAAG,EAAG,CAACG,EAAS,IAAKH,EAAM,IAAM,IAAMA,EAAM,IAAM,GAAI,CAAC,EAAG,CACzG,MAAMW,EAASP,EAAKC,CAAC,EACrB,QAASE,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMK,EAAID,EAAOJ,CAAC,EAAGM,EAAIF,GAAQJ,EAAI,GAAK,CAAC,EAAGO,GAASP,EAAI,IAAO,KAAK,GAAK,EACtEQ,EAAK,KAAK,IAAID,CAAK,EAAGE,EAAK,CAAC,KAAK,IAAIF,CAAK,EAChDb,EAAYW,EAAGH,EAAKI,EAAGJ,EAAKI,EAAGH,EAAMK,EAAI,EAAGC,EAAId,CAAK,EACrDD,EAAYW,EAAGH,EAAKI,EAAGH,EAAME,EAAGF,EAAMK,EAAI,EAAGC,EAAId,CAAK,EACtDD,EAAYO,EAAQE,EAAME,EAAGF,EAAMG,EAAGH,EAAM,EAAG,EAAG,EAAGR,CAAK,EAC1DD,EAAYO,EAAQC,EAAKI,EAAGJ,EAAKG,EAAGH,EAAK,EAAG,GAAI,EAAGP,CAAK,CAC1D,CACF,CACF",
6
- "names": ["parseColor", "lampPostGeometry", "point", "style", "addTriangle", "color", "radius", "ring", "r", "_", "i", "center", "low", "high", "points", "a", "b", "angle", "nx", "nz"]
7
- }
@@ -1,2 +0,0 @@
1
- import{parseColor as w}from"./parseColor.js";function b(i,u,f){if(!Number.isFinite(u.lightRadius)||u.lightRadius<=0)throw new Error("Invalid light radius");const l=w(u.color),s=(o,n,r,p,t,m)=>{f(o,t,n,t,r,t,...m,l),f(o,t,r,t,p,t,...m,l)},c=.65,d=(o,n,r)=>({x:i.x+(r===2?0:o*c),y:i.y+(r===1?0:r===2?o*c:n*c),ground:i.ground+(r===0?0:n*c),uv:[o,n]});for(let o=0;o<3;o++)s(d(-1,-1,o),d(1,-1,o),d(1,1,o),d(-1,1,o),u.top,o===0?[0,1,0]:o===1?[0,0,1]:[1,0,0])}export{b as lightGeometry};
2
- //# sourceMappingURL=lightGeometry.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/lightGeometry.js"],
4
- "sourcesContent": ["import { parseColor } from \"./parseColor.js\";\n\n/** Three crossed emitter discs; illumination itself is evaluated on receiving surfaces. */\n\nexport function lightGeometry(point, style, addTriangle) {\n if (!Number.isFinite(style.lightRadius) || style.lightRadius <= 0) throw new Error('Invalid light radius');\n const color = parseColor(style.color);\n const quad = (a, b, c, d, height, normal) => {\n addTriangle(a, height, b, height, c, height, ...normal, color);\n addTriangle(a, height, c, height, d, height, ...normal, color);\n };\n const r = 0.65;\n const emitter = (u, v, axis) => ({\n x: point.x + (axis === 2 ? 0 : u * r),\n y: point.y + (axis === 1 ? 0 : axis === 2 ? u * r : v * r),\n ground: point.ground + (axis === 0 ? 0 : v * r), uv: [u, v],\n });\n for (let axis = 0; axis < 3; axis++) {\n quad(emitter(-1, -1, axis), emitter(1, -1, axis), emitter(1, 1, axis), emitter(-1, 1, axis),\n style.top, axis === 0 ? [0, 1, 0] : axis === 1 ? [0, 0, 1] : [1, 0, 0]);\n }\n}\n"],
5
- "mappings": "AAAA,OAAS,cAAAA,MAAkB,kBAIpB,SAASC,EAAcC,EAAOC,EAAOC,EAAa,CACvD,GAAI,CAAC,OAAO,SAASD,EAAM,WAAW,GAAKA,EAAM,aAAe,EAAG,MAAM,IAAI,MAAM,sBAAsB,EACzG,MAAME,EAAQL,EAAWG,EAAM,KAAK,EAC9BG,EAAO,CAACC,EAAGC,EAAGC,EAAGC,EAAGC,EAAQC,IAAW,CAC3CR,EAAYG,EAAGI,EAAQH,EAAGG,EAAQF,EAAGE,EAAQ,GAAGC,EAAQP,CAAK,EAC7DD,EAAYG,EAAGI,EAAQF,EAAGE,EAAQD,EAAGC,EAAQ,GAAGC,EAAQP,CAAK,CAC/D,EACMQ,EAAI,IACJC,EAAU,CAACC,EAAGC,EAAGC,KAAU,CAC/B,EAAGf,EAAM,GAAKe,IAAS,EAAI,EAAIF,EAAIF,GACnC,EAAGX,EAAM,GAAKe,IAAS,EAAI,EAAIA,IAAS,EAAIF,EAAIF,EAAIG,EAAIH,GACxD,OAAQX,EAAM,QAAUe,IAAS,EAAI,EAAID,EAAIH,GAAI,GAAI,CAACE,EAAGC,CAAC,CAC5D,GACA,QAASC,EAAO,EAAGA,EAAO,EAAGA,IAC3BX,EAAKQ,EAAQ,GAAI,GAAIG,CAAI,EAAGH,EAAQ,EAAG,GAAIG,CAAI,EAAGH,EAAQ,EAAG,EAAGG,CAAI,EAAGH,EAAQ,GAAI,EAAGG,CAAI,EACxFd,EAAM,IAAKc,IAAS,EAAI,CAAC,EAAG,EAAG,CAAC,EAAIA,IAAS,EAAI,CAAC,EAAG,EAAG,CAAC,EAAI,CAAC,EAAG,EAAG,CAAC,CAAC,CAE5E",
6
- "names": ["parseColor", "lightGeometry", "point", "style", "addTriangle", "color", "quad", "a", "b", "c", "d", "height", "normal", "r", "emitter", "u", "v", "axis"]
7
- }
@@ -1,2 +0,0 @@
1
- function F(m,v){const u=m.reduce((i,l)=>i+l.length/8,0),r=32;let a=new Float32Array(8);if(u){let i=1/0,l=1/0,M=-1/0,g=-1/0;for(const t of m)for(let e=0;e<t.length;e+=8)i=Math.min(i,t[e]-t[e+3]),M=Math.max(M,t[e]+t[e+3]),l=Math.min(l,t[e+2]-t[e+3]),g=Math.max(g,t[e+2]+t[e+3]);const f=Math.ceil((M-i)/r)+1,c=Math.ceil((g-l)/r)+1,d=t=>{for(const e of m)for(let o=0;o<e.length;o+=8){const n=e[o+3],h=e[o]-i,U=e[o+2]-l;for(let x=Math.floor((U-n)/r);x<=Math.floor((U+n)/r);x++)for(let w=Math.floor((h-n)/r);w<=Math.floor((h+n)/r);w++)t(x*f+w,e,o)}},s=new Uint32Array(f*c),y=new Uint32Array(f*c);d(t=>s[t]++);const z=s.reduce((t,e)=>t+e,0),A=(2+f*c+z*2)*4;if(A*4>v)throw new Error("Streetlight grid exceeds GPU storage limit");a=new Float32Array(A),a.set([i,l,r,f,c,u,0,0]);let I=2+f*c;for(let t=0;t<s.length;t++)s[t]&&(a[(2+t)*4]=y[t]=I,a[(2+t)*4+1]=s[t],I+=s[t]*2);d((t,e,o)=>{for(let n=0,h=y[t]*4;n<8;n++)a[h+n]=e[o+n];y[t]+=2})}return{data:a,count:u}}export{F as lightGrid};
2
- //# sourceMappingURL=lightGrid.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/lightGrid.js"],
4
- "sourcesContent": ["/** Pack world-space point lights into the shader's spatial grid. */\nexport function lightGrid(packed, maxBytes) {\n const count = packed.reduce((sum, values) => sum + values.length / 8, 0), cellSize = 32;\n let data = new Float32Array(8);\n if (count) {\n let minX = Infinity, minZ = Infinity, maxX = -Infinity, maxZ = -Infinity;\n for (const values of packed) for (let i = 0; i < values.length; i += 8) {\n minX = Math.min(minX, values[i] - values[i + 3]);\n maxX = Math.max(maxX, values[i] + values[i + 3]);\n minZ = Math.min(minZ, values[i + 2] - values[i + 3]);\n maxZ = Math.max(maxZ, values[i + 2] + values[i + 3]);\n }\n const columns = Math.ceil((maxX - minX) / cellSize) + 1,\n rows = Math.ceil((maxZ - minZ) / cellSize) + 1;\n const each = callback => {\n for (const values of packed) for (let i = 0; i < values.length; i += 8) {\n const radius = values[i + 3],\n x = values[i] - minX,\n z = values[i + 2] - minZ;\n for (let y = Math.floor((z - radius) / cellSize); y <= Math.floor((z + radius) / cellSize); y++) {\n for (let c = Math.floor((x - radius) / cellSize); c <= Math.floor((x + radius) / cellSize); c++) {\n callback(y * columns + c, values, i);\n }\n }\n }\n };\n // Counting sort: count the lights of each cell, then fill each cell's slice.\n const counts = new Uint32Array(columns * rows),\n next = new Uint32Array(columns * rows);\n each(key => counts[key]++);\n const entries = counts.reduce((sum, value) => sum + value, 0);\n const length = (2 + columns * rows + entries * 2) * 4;\n if (length * 4 > maxBytes) {\n throw new Error('Streetlight grid exceeds GPU storage limit');\n }\n data = new Float32Array(length);\n data.set([minX, minZ, cellSize, columns, rows, count, 0, 0]);\n let offset = 2 + columns * rows;\n for (let key = 0; key < counts.length; key++) if (counts[key]) {\n data[(2 + key) * 4] = next[key] = offset;\n data[(2 + key) * 4 + 1] = counts[key];\n offset += counts[key] * 2;\n }\n each((key, values, i) => {\n for (let j = 0, o = next[key] * 4; j < 8; j++) data[o + j] = values[i + j];\n next[key] += 2;\n });\n }\n return { data, count };\n}\n"],
5
- "mappings": "AACO,SAASA,EAAUC,EAAQC,EAAU,CAC1C,MAAMC,EAAQF,EAAO,OAAO,CAACG,EAAKC,IAAWD,EAAMC,EAAO,OAAS,EAAG,CAAC,EAAGC,EAAW,GACrF,IAAIC,EAAO,IAAI,aAAa,CAAC,EAC7B,GAAIJ,EAAO,CACT,IAAIK,EAAO,IAAUC,EAAO,IAAUC,EAAO,KAAWC,EAAO,KAC/D,UAAWN,KAAUJ,EAAQ,QAASW,EAAI,EAAGA,EAAIP,EAAO,OAAQO,GAAK,EACnEJ,EAAO,KAAK,IAAIA,EAAMH,EAAOO,CAAC,EAAIP,EAAOO,EAAI,CAAC,CAAC,EAC/CF,EAAO,KAAK,IAAIA,EAAML,EAAOO,CAAC,EAAIP,EAAOO,EAAI,CAAC,CAAC,EAC/CH,EAAO,KAAK,IAAIA,EAAMJ,EAAOO,EAAI,CAAC,EAAIP,EAAOO,EAAI,CAAC,CAAC,EACnDD,EAAO,KAAK,IAAIA,EAAMN,EAAOO,EAAI,CAAC,EAAIP,EAAOO,EAAI,CAAC,CAAC,EAErD,MAAMC,EAAU,KAAK,MAAMH,EAAOF,GAAQF,CAAQ,EAAI,EAC7CQ,EAAO,KAAK,MAAMH,EAAOF,GAAQH,CAAQ,EAAI,EAChDS,EAAOC,GAAY,CACvB,UAAWX,KAAUJ,EAAQ,QAASW,EAAI,EAAGA,EAAIP,EAAO,OAAQO,GAAK,EAAG,CACtE,MAAMK,EAASZ,EAAOO,EAAI,CAAC,EAChBM,EAAIb,EAAOO,CAAC,EAAIJ,EAChBW,EAAId,EAAOO,EAAI,CAAC,EAAIH,EAC/B,QAASW,EAAI,KAAK,OAAOD,EAAIF,GAAUX,CAAQ,EAAGc,GAAK,KAAK,OAAOD,EAAIF,GAAUX,CAAQ,EAAGc,IAC1F,QAASC,EAAI,KAAK,OAAOH,EAAID,GAAUX,CAAQ,EAAGe,GAAK,KAAK,OAAOH,EAAID,GAAUX,CAAQ,EAAGe,IAC1FL,EAASI,EAAIP,EAAUQ,EAAGhB,EAAQO,CAAC,CAGzC,CACF,EAEMU,EAAS,IAAI,YAAYT,EAAUC,CAAI,EACrCS,EAAO,IAAI,YAAYV,EAAUC,CAAI,EAC7CC,EAAKS,GAAOF,EAAOE,CAAG,GAAG,EACzB,MAAMC,EAAUH,EAAO,OAAO,CAAClB,EAAKsB,IAAUtB,EAAMsB,EAAO,CAAC,EACtDC,GAAU,EAAId,EAAUC,EAAOW,EAAU,GAAK,EACpD,GAAIE,EAAS,EAAIzB,EACf,MAAM,IAAI,MAAM,4CAA4C,EAE9DK,EAAO,IAAI,aAAaoB,CAAM,EAC9BpB,EAAK,IAAI,CAACC,EAAMC,EAAMH,EAAUO,EAASC,EAAMX,EAAO,EAAG,CAAC,CAAC,EAC3D,IAAIyB,EAAS,EAAIf,EAAUC,EAC3B,QAASU,EAAM,EAAGA,EAAMF,EAAO,OAAQE,IAAWF,EAAOE,CAAG,IAC1DjB,GAAM,EAAIiB,GAAO,CAAC,EAAID,EAAKC,CAAG,EAAII,EAClCrB,GAAM,EAAIiB,GAAO,EAAI,CAAC,EAAIF,EAAOE,CAAG,EACpCI,GAAUN,EAAOE,CAAG,EAAI,GAE1BT,EAAK,CAACS,EAAKnB,EAAQO,IAAM,CACvB,QAASiB,EAAI,EAAGC,EAAIP,EAAKC,CAAG,EAAI,EAAGK,EAAI,EAAGA,IAAKtB,EAAKuB,EAAID,CAAC,EAAIxB,EAAOO,EAAIiB,CAAC,EACzEN,EAAKC,CAAG,GAAK,CACf,CAAC,CACH,CACA,MAAO,CAAE,KAAAjB,EAAM,MAAAJ,CAAM,CACvB",
6
- "names": ["lightGrid", "packed", "maxBytes", "count", "sum", "values", "cellSize", "data", "minX", "minZ", "maxX", "maxZ", "i", "columns", "rows", "each", "callback", "radius", "x", "z", "y", "c", "counts", "next", "key", "entries", "value", "length", "offset", "j", "o"]
7
- }
@@ -1,2 +0,0 @@
1
- const e=[["body",0,0,0],["leg",-.09,.9,1],["leg",.09,.9,-1],["arm",-.25,1.42,-1],["arm",.25,1.42,1]];export{e as limbs};
2
- //# sourceMappingURL=limbs.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/limbs.js"],
4
- "sourcesContent": ["// [part, pivot x, pivot y, swing sign]\n\nexport const limbs = [\n ['body', 0, 0, 0],\n ['leg', -0.09, 0.9, 1],\n ['leg', 0.09, 0.9, -1],\n ['arm', -0.25, 1.42, -1],\n ['arm', 0.25, 1.42, 1]\n];\n"],
5
- "mappings": "AAEO,MAAMA,EAAQ,CACnB,CAAC,OAAQ,EAAG,EAAG,CAAC,EAChB,CAAC,MAAO,KAAO,GAAK,CAAC,EACrB,CAAC,MAAO,IAAM,GAAK,EAAE,EACrB,CAAC,MAAO,KAAO,KAAM,EAAE,EACvB,CAAC,MAAO,IAAM,KAAM,CAAC,CACvB",
6
- "names": ["limbs"]
7
- }
@@ -1,2 +0,0 @@
1
- import{decodeModel as A}from"./decodeModel.js";import{emptyNode as E}from"./emptyNode.js";import{nodeMatrix as B}from"./nodeMatrix.js";import{readAccessor as F}from"./readAccessor.js";import{setParent as x}from"./setParent.js";import{textureSampler as I}from"./textureSampler.js";import{vertexNormals as z}from"./vertexNormals.js";import{createProgram as D}from"./createProgram.js";import{conformModelToTerrain as S}from"./conformModelToTerrain.js";async function Q(r){await r._added.promise;const T=new URL(r.modelUrl,document.baseURI).href,g=await fetch(T);if(!g.ok)throw new Error(`Unable to load model: HTTP ${g.status}`);const R=await g.arrayBuffer(),n=A(R),v=new URL(".",T).href;await Promise.all((n.buffers||[]).map(async e=>{if(e.binary)return;const t=await fetch(new URL(e.uri,v).href);if(!t.ok)throw new Error(`Unable to load model buffer: HTTP ${t.status}`);e.binary=await t.arrayBuffer()})),await r._added.promise;const _=await Promise.all((n.images||[]).map(async e=>{let t;if(e.bufferView!==void 0){const s=n.bufferViews[e.bufferView],m=n.buffers[s.buffer].binary;t=new Blob([m.slice(s.byteOffset||0,(s.byteOffset||0)+s.byteLength)],{type:e.mimeType})}else{const s=await fetch(new URL(e.uri,v).href);if(!s.ok)throw new Error(`Unable to load model texture: HTTP ${s.status}`);t=await s.blob()}return createImageBitmap(t,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}));await r._map?._terrain3D?._terrainPromise;const y=new Map,p=(e,t=!1)=>{if(!e)return null;if((e.texCoord||0)!==0||e.extensions)throw new Error("Model textures currently require untransformed TEXCOORD_0 UVs");const s=r.renderer.device,m=`${e.index}:${t}`;if(!y.has(m)){const f=n.textures[e.index],l=n.samplers?.[f.sampler]||{},u=_[f.source],c=t?"rgba8unorm-srgb":"rgba8unorm",o=I(l);y.set(m,{device:s,texture:s.createTexture({size:[u.width,u.height],format:c,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:s.createSampler(o),samplerOptions:o,format:c,srgb:t,image:u,flipY:!1,uploaded:null})}return y.get(m)},M=(n.materials||[]).map(e=>{const t=e.pbrMetallicRoughness||{};return{color:(t.baseColorFactor||[1,1,1,1]).slice(0,3),opacity:t.baseColorFactor?.[3]??1,metallic:t.metallicFactor??1,roughness:t.roughnessFactor??1,baseTexture:p(t.baseColorTexture,!0),metalTexture:p(t.metallicRoughnessTexture),emissiveTexture:p(e.emissiveTexture,!0),occlusionTexture:p(e.occlusionTexture),emissive:e.emissiveFactor||[0,0,0],occlusionStrength:e.occlusionTexture?.strength??1,alphaMode:r.options.alphaMode||e.alphaMode||"OPAQUE",alphaCutoff:e.alphaCutoff??.5,doubleSided:e.doubleSided}});let U;{const e=new Set,t=[],s=f=>{if(e.has(f))throw new Error("Cyclic glTF nodes");const l=n.nodes[f];if(!l)throw new Error("Invalid glTF node");e.add(f);const u={...E(),name:l.name};if(u.matrix=B(l),l.mesh!==void 0)for(const c of n.meshes[l.mesh].primitives){const o={};for(const[a,i]of[["POSITION","position"],["NORMAL","normal"],["TEXCOORD_0","uv"]])c.attributes[a]!==void 0&&(o[i]=F(n,c.attributes[a]));if(!o.position)throw new Error("glTF mesh has no positions");const h=o.position.data.length/3;if(o.position.size!==3||h<3||Object.values(o).some(a=>a.data.length/a.size!==h))throw new Error("Invalid glTF vertex attributes");if(c.indices!==void 0){const a=F(n,c.indices);if(o.index={size:1,data:a.indices},![Uint8Array,Uint16Array,Uint32Array].some(i=>a.indices instanceof i)||a.size!==1||a.indices.length%3||[...a.indices].some(i=>i>=h))throw new Error("Invalid glTF triangle indices")}if(!o.index&&h%3)throw new Error("Incomplete glTF triangle");if(!o.normal){const a=z(o.position.data,o.index?.data);o.normal={size:3,data:a}}const d=M[c.material]||{color:[1,1,1],metallic:1};if([d.baseTexture,d.metalTexture,d.emissiveTexture,d.occlusionTexture].some(Boolean)&&!o.uv)throw new Error("Textured model mesh requires UV coordinates");const O=D(r,d);t.push(O);const w=r.renderer.device;o.index?.data instanceof Uint8Array&&(o.index.data=Uint16Array.from(o.index.data));for(const[a,i]of Object.entries(o))i.size||=1,i.count=i.data.length/i.size,i.indexFormat=i.data instanceof Uint32Array?"uint32":"uint16",i.buffer=w.createBuffer({size:Math.max(4,i.data.byteLength),usage:a==="index"?GPUBufferUsage.INDEX|GPUBufferUsage.COPY_DST:GPUBufferUsage.VERTEX|GPUBufferUsage.COPY_DST}),w.queue.writeBuffer(i.buffer,0,i.data);const C={device:w,attributes:o,drawRange:{start:0,count:o.index?.count||o.position.count}};t.push(C);const b={...E(),device:w,geometry:C,program:O,fadeDuration:250,id:L.Layer._nextId++,renderOrder:0};b.name=n.meshes[l.mesh].name,b.extras=l.extras||{},x(b,u)}for(const c of l.children||[])x(s(c),u);return e.delete(f),u},m=n.scenes?.[n.scene||0];if(!m)throw new Error("Missing glTF scene");try{U=m.nodes.map(s)}catch(f){for(const l of t)if(l.attributes)for(const u of Object.values(l.attributes))u.buffer.destroy();else l.pipelineCache.clear();throw f}}const P={...E(),id:T,extras:n.extras||{}};if(!U.length)throw new Error("Expected a glTF model with a non-empty scene");for(const e of U)x(e,P);if(r.model=P,r.options.rotation){const[e,t=e,s=e]=r.options.rotation;r.model.rotation[0]=e,r.model.rotation[1]=t,r.model.rotation[2]=s}if(r.options.scale){const[e,t=e,s=e]=r.options.scale;r.model.scale[0]=e,r.model.scale[1]=t,r.model.scale[2]=s}x(r.model,r.root),S(r,r._map?._terrain3D)}export{Q as loadModel};
2
- //# sourceMappingURL=loadModel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/loadModel.js"],
4
- "sourcesContent": ["import { decodeModel } from './decodeModel.js';\nimport { emptyNode } from './emptyNode.js';\nimport { nodeMatrix } from './nodeMatrix.js';\nimport { readAccessor } from './readAccessor.js';\nimport { setParent } from './setParent.js';\nimport { textureSampler } from './textureSampler.js';\nimport { vertexNormals } from './vertexNormals.js';\nimport { createProgram } from './createProgram.js';\nimport { conformModelToTerrain } from './conformModelToTerrain.js';\n\n/** glTF/GLB model loading. */\n/** Load the configured GLB/glTF (static triangles) under `root`; GPU resources need attachment. */\n\nexport async function loadModel(backend) {\n await backend._added.promise;\n const url = new URL(backend.modelUrl, document.baseURI).href;\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Unable to load model: HTTP ${response.status}`);\n }\n const data = await response.arrayBuffer();\n const description = decodeModel(data);\n const directory = new URL('.', url).href;\n await Promise.all((description.buffers || []).map(async (buffer) => {\n if (buffer.binary) {\n return;\n }\n const response = await fetch(new URL(buffer.uri, directory).href);\n if (!response.ok) {\n throw new Error(`Unable to load model buffer: HTTP ${response.status}`);\n }\n buffer.binary = await response.arrayBuffer();\n }));\n await backend._added.promise;\n const images = await Promise.all((description.images || []).map(async (image) => {\n let blob;\n if (image.bufferView !== undefined) {\n const view = description.bufferViews[image.bufferView];\n const buffer = description.buffers[view.buffer].binary;\n blob = new Blob([buffer.slice(view.byteOffset || 0, (view.byteOffset || 0) + view.byteLength)],\n { type: image.mimeType });\n } else {\n const response = await fetch(new URL(image.uri, directory).href);\n if (!response.ok) throw new Error(`Unable to load model texture: HTTP ${response.status}`);\n blob = await response.blob();\n }\n // Preserve straight alpha and raw samples; GPU sRGB formats do color decoding.\n return createImageBitmap(blob, { premultiplyAlpha: 'none', colorSpaceConversion: 'none' });\n }));\n await backend._map?._terrain3D?._terrainPromise;\n const textures = new Map();\n const textureFor = (reference, color = false) => {\n if (!reference) return null;\n if ((reference.texCoord || 0) !== 0 || reference.extensions) {\n throw new Error('Model textures currently require untransformed TEXCOORD_0 UVs');\n }\n const device = backend.renderer.device;\n // A glTF image may serve both color and data maps: those cannot share a GPU format.\n const key = `${reference.index}:${color}`;\n if (!textures.has(key)) {\n const texture = description.textures[reference.index];\n const sampler = description.samplers?.[texture.sampler] || {};\n const image = images[texture.source];\n const format = color ? 'rgba8unorm-srgb' : 'rgba8unorm';\n const samplerOptions = textureSampler(sampler);\n textures.set(key, {\n device,\n texture: device.createTexture({\n size: [image.width, image.height],\n format,\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: device.createSampler(samplerOptions),\n samplerOptions,\n format,\n srgb: color,\n image,\n flipY: false,\n uploaded: null,\n });\n }\n return textures.get(key);\n };\n // Convert glTF materials directly to the shader's retained CPU styles.\n const materials = (description.materials || []).map(material => {\n const pbr = material.pbrMetallicRoughness || {};\n return {\n color: (pbr.baseColorFactor || [1, 1, 1, 1]).slice(0, 3),\n opacity: pbr.baseColorFactor?.[3] ?? 1,\n metallic: pbr.metallicFactor ?? 1,\n roughness: pbr.roughnessFactor ?? 1,\n baseTexture: textureFor(pbr.baseColorTexture, true),\n metalTexture: textureFor(pbr.metallicRoughnessTexture),\n emissiveTexture: textureFor(material.emissiveTexture, true),\n occlusionTexture: textureFor(material.occlusionTexture),\n emissive: material.emissiveFactor || [0, 0, 0],\n occlusionStrength: material.occlusionTexture?.strength ?? 1,\n alphaMode: backend.options.alphaMode || material.alphaMode || 'OPAQUE',\n alphaCutoff: material.alphaCutoff ?? 0.5,\n doubleSided: material.doubleSided,\n };\n });\n let nodes;\n {\n // Track only the recursion path: shared mesh references are valid, cycles are not.\n const active = new Set(), resources = [];\n const node = index => {\n if (active.has(index)) throw new Error('Cyclic glTF nodes');\n const spec = description.nodes[index];\n if (!spec) throw new Error('Invalid glTF node');\n active.add(index);\n const group = {\n ...emptyNode(),\n name: spec.name\n };\n group.matrix = nodeMatrix(spec);\n if (spec.mesh !== undefined) {\n for (const primitive of description.meshes[spec.mesh].primitives) {\n const attributes = {};\n for (const [semantic, name] of [['POSITION', 'position'], ['NORMAL', 'normal'], ['TEXCOORD_0', 'uv']]) {\n if (primitive.attributes[semantic] !== undefined) attributes[name] = readAccessor(description, primitive.attributes[semantic]);\n }\n if (!attributes.position) throw new Error('glTF mesh has no positions');\n const vertexCount = attributes.position.data.length / 3;\n if (attributes.position.size !== 3 || vertexCount < 3 ||\n Object.values(attributes).some(attribute => attribute.data.length / attribute.size !== vertexCount)) throw new Error('Invalid glTF vertex attributes');\n if (primitive.indices !== undefined) {\n const index = readAccessor(description, primitive.indices);\n attributes.index = { size: 1, data: index.indices };\n if (![Uint8Array, Uint16Array, Uint32Array].some(Type => index.indices instanceof Type) ||\n index.size !== 1 || index.indices.length % 3 || [...index.indices].some(i => i >= vertexCount)) throw new Error('Invalid glTF triangle indices');\n }\n if (!attributes.index && vertexCount % 3) throw new Error('Incomplete glTF triangle');\n if (!attributes.normal) {\n const normals = vertexNormals(attributes.position.data, attributes.index?.data);\n attributes.normal = { size: 3, data: normals };\n }\n const style = materials[primitive.material] || { color: [1, 1, 1], metallic: 1 };\n if ([style.baseTexture, style.metalTexture, style.emissiveTexture, style.occlusionTexture].some(Boolean) && !attributes.uv) {\n throw new Error('Textured model mesh requires UV coordinates');\n }\n const program = createProgram(backend, style);\n resources.push(program);\n const device = backend.renderer.device;\n if (attributes.index?.data instanceof Uint8Array) {\n attributes.index.data = Uint16Array.from(attributes.index.data);\n }\n for (const [name, attribute] of Object.entries(attributes)) {\n attribute.size ||= 1;\n attribute.count = attribute.data.length / attribute.size;\n attribute.indexFormat = attribute.data instanceof Uint32Array ? 'uint32' : 'uint16';\n attribute.buffer = device.createBuffer({\n size: Math.max(4, attribute.data.byteLength),\n usage: name === 'index'\n ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\n });\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n }\n const geometry = {\n device,\n attributes,\n drawRange: { start: 0, count: attributes.index?.count || attributes.position.count },\n };\n resources.push(geometry);\n const mesh = {\n ...emptyNode(),\n device,\n geometry,\n program,\n fadeDuration: 250,\n id: L.Layer._nextId++,\n renderOrder: 0\n };\n mesh.name = description.meshes[spec.mesh].name; mesh.extras = spec.extras || {};\n setParent(mesh, group);\n }\n }\n for (const child of spec.children || []) setParent(node(child), group);\n active.delete(index);\n return group;\n };\n const scene = description.scenes?.[description.scene || 0];\n if (!scene) throw new Error('Missing glTF scene');\n try {\n nodes = scene.nodes.map(node);\n } catch (error) {\n // Parsing can fail after earlier primitives allocated buffers/programs.\n for (const resource of resources) {\n if (resource.attributes) {\n for (const attribute of Object.values(resource.attributes)) attribute.buffer.destroy();\n } else {\n resource.pipelineCache.clear();\n }\n }\n throw error;\n }\n }\n const model = {\n ...emptyNode(),\n id: url,\n extras: description.extras || {},\n };\n if (!nodes.length) throw new Error('Expected a glTF model with a non-empty scene');\n for (const node of nodes) setParent(node, model);\n backend.model = model;\n if (backend.options.rotation) {\n const [x, y = x, z = x] = backend.options.rotation;\n backend.model.rotation[0] = x; backend.model.rotation[1] = y; backend.model.rotation[2] = z;\n }\n if (backend.options.scale) {\n const [x, y = x, z = x] = backend.options.scale;\n backend.model.scale[0] = x; backend.model.scale[1] = y; backend.model.scale[2] = z;\n }\n setParent(backend.model, backend.root);\n conformModelToTerrain(backend, backend._map?._terrain3D);\n}\n"],
5
- "mappings": "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",
6
- "names": ["decodeModel", "emptyNode", "nodeMatrix", "readAccessor", "setParent", "textureSampler", "vertexNormals", "createProgram", "conformModelToTerrain", "loadModel", "backend", "url", "response", "data", "description", "directory", "buffer", "images", "image", "blob", "view", "textures", "textureFor", "reference", "color", "device", "key", "texture", "sampler", "format", "samplerOptions", "materials", "material", "pbr", "nodes", "active", "resources", "node", "index", "spec", "group", "primitive", "attributes", "semantic", "name", "vertexCount", "attribute", "Type", "normals", "style", "program", "geometry", "mesh", "child", "scene", "error", "resource", "model", "x", "y", "z"]
7
- }
@@ -1,2 +0,0 @@
1
- import{getZxy as u}from"./getZxy.js";async function d(o,e){if(o._geojson){const{data:r,url:t}=o.options;if(r!==void 0&&t)throw new Error("GeoJSON source requires either data or url");if(r!==void 0)return r;if(!t)throw new Error("GeoJSON source requires either data or url");const s=await fetch(new URL(t,document.baseURI),{signal:e.request.signal});if(!s.ok)throw new Error(`Unable to load GeoJSON: HTTP ${s.status}`);return s.json()}const n=await u(o,e.coords.z,e.coords.x,e.coords.y,e.request.signal);return n?JSON.parse(new TextDecoder().decode(n.data)):{type:"FeatureCollection",features:[]}}export{d as loadSource};
2
- //# sourceMappingURL=loadSource.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/loadSource.js"],
4
- "sourcesContent": ["import { getZxy } from './getZxy.js';\n\nexport async function loadSource(backend, area) {\n if (backend._geojson) {\n const { data, url } = backend.options;\n if (data !== undefined && url) throw new Error('GeoJSON source requires either data or url');\n if (data !== undefined) return data;\n if (!url) throw new Error('GeoJSON source requires either data or url');\n const response = await fetch(new URL(url, document.baseURI), { signal: area.request.signal });\n if (!response.ok) throw new Error(`Unable to load GeoJSON: HTTP ${response.status}`);\n return response.json();\n }\n const result = await getZxy(backend, area.coords.z, area.coords.x, area.coords.y, area.request.signal);\n return result\n ? JSON.parse(new TextDecoder().decode(result.data))\n : { type: 'FeatureCollection', features: [] };\n}\n"],
5
- "mappings": "AAAA,OAAS,UAAAA,MAAc,cAEvB,eAAsBC,EAAWC,EAASC,EAAM,CAC9C,GAAID,EAAQ,SAAU,CACpB,KAAM,CAAE,KAAAE,EAAM,IAAAC,CAAI,EAAIH,EAAQ,QAC9B,GAAIE,IAAS,QAAaC,EAAK,MAAM,IAAI,MAAM,4CAA4C,EAC3F,GAAID,IAAS,OAAW,OAAOA,EAC/B,GAAI,CAACC,EAAK,MAAM,IAAI,MAAM,4CAA4C,EACtE,MAAMC,EAAW,MAAM,MAAM,IAAI,IAAID,EAAK,SAAS,OAAO,EAAG,CAAE,OAAQF,EAAK,QAAQ,MAAO,CAAC,EAC5F,GAAI,CAACG,EAAS,GAAI,MAAM,IAAI,MAAM,gCAAgCA,EAAS,MAAM,EAAE,EACnF,OAAOA,EAAS,KAAK,CACvB,CACA,MAAMC,EAAS,MAAMP,EAAOE,EAASC,EAAK,OAAO,EAAGA,EAAK,OAAO,EAAGA,EAAK,OAAO,EAAGA,EAAK,QAAQ,MAAM,EACrG,OAAOI,EACH,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOA,EAAO,IAAI,CAAC,EAChD,CAAE,KAAM,oBAAqB,SAAU,CAAC,CAAE,CAChD",
6
- "names": ["getZxy", "loadSource", "backend", "area", "data", "url", "response", "result"]
7
- }
@@ -1,2 +0,0 @@
1
- import{addBridges as g}from"./addBridges.js";import{conformModelToTerrain as u}from"./conformModelToTerrain.js";import{getElevation as p}from"./getElevation.js";import{setTerrainHeight as w}from"./setTerrainHeight.js";import{update as _}from"./update.js";async function d(r){if(r._terrainLoading||!r._map)return;r._terrainLoading=!0,r._terrainReady=!1;const a=r._terrainController=new AbortController;try{if(!r.terrainSource)throw new Error("Terrain layer requires a PMTiles elevation archive");const n=r._terrainArchive=new L.Layer({source:{type:"pmtiles",url:r.terrainSource}});await n.ready;const e=n.header;if(e.tileType!==0||e.minZoom!==e.maxZoom)throw new Error("Expected a single-zoom Float32 PMTiles terrain archive");r._terrainZoom=e.maxZoom;const i=r._map,m=i.project([e.maxLat,e.minLon],r._terrainZoom).divideBy(256).floor(),y=i.project([e.minLat,e.maxLon],r._terrainZoom).divideBy(256).floor();r._terrainBounds=new L.Bounds(m,y);const s=[];for(let t=m.x;t<=y.x;t++)for(let o=m.y;o<=y.y;o++)s.push({z:r._terrainZoom,x:t,y:o});const l=i.project(i.getCenter(),r._terrainZoom).divideBy(256);s.sort((t,o)=>Math.hypot(t.x+.5-l.x,t.y+.5-l.y)-Math.hypot(o.x+.5-l.x,o.y+.5-l.y));let f=0;await Promise.all(Array.from({length:Math.min(4,s.length)},async()=>{for(;f<s.length;){a.signal.throwIfAborted();const t=s[f++],o=await n.getZxy(t.z,t.x,t.y,a.signal);if(!o||o.data.byteLength!==256*256*4)throw new Error(`Missing or invalid Float32 terrain tile ${t.z}/${t.x}/${t.y}`);r._terrainTiles.set(`${t.x}/${t.y}`,new Float32Array(o.data))}}));const h=r.options.bridges&&await fetch(r.options.bridges,{signal:a.signal}).then(t=>{if(!t.ok)throw new Error(`Bridges: HTTP ${t.status}`);return t.json()});if(a.signal.aborted||r._map!==i)return;r._terrainReady=!0,r._terrainOriginElevation=p(r,r.location)??0;for(const t of Object.values(i._layers))w(t),u(t,r);return h&&g(r,h),i.fire("terrainchange"),_(r),r.fire("terrainready"),!0}catch(n){return a.signal.aborted||r.fire("error",{error:n}),!1}finally{r._terrainLoading=!1}}export{d as loadTerrain};
2
- //# sourceMappingURL=loadTerrain.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/loadTerrain.js"],
4
- "sourcesContent": ["import { addBridges } from './addBridges.js';\nimport { conformModelToTerrain } from './conformModelToTerrain.js';\nimport { getElevation } from './getElevation.js';\nimport { setTerrainHeight } from './setTerrainHeight.js';\nimport { update } from './update.js';\n\n\nexport async function loadTerrain(backend) {\n if (backend._terrainLoading || !backend._map) return;\n backend._terrainLoading = true;\n backend._terrainReady = false;\n const controller = backend._terrainController = new AbortController();\n try {\n if (!backend.terrainSource) throw new Error('Terrain layer requires a PMTiles elevation archive');\n const archive = backend._terrainArchive = new L.Layer({ source: { type: 'pmtiles', url: backend.terrainSource } });\n await archive.ready;\n const header = archive.header;\n if (header.tileType !== 0 || header.minZoom !== header.maxZoom) {\n throw new Error('Expected a single-zoom Float32 PMTiles terrain archive');\n }\n backend._terrainZoom = header.maxZoom;\n const map = backend._map;\n const northwest = map.project([header.maxLat, header.minLon], backend._terrainZoom).divideBy(256).floor();\n const southeast = map.project([header.minLat, header.maxLon], backend._terrainZoom).divideBy(256).floor();\n backend._terrainBounds = new L.Bounds(northwest, southeast);\n const tiles = [];\n for (let x = northwest.x; x <= southeast.x; x++) {\n for (let y = northwest.y; y <= southeast.y; y++) tiles.push({ z: backend._terrainZoom, x, y });\n }\n const center = map.project(map.getCenter(), backend._terrainZoom).divideBy(256);\n tiles.sort((a, b) => Math.hypot(a.x + 0.5 - center.x, a.y + 0.5 - center.y) -\n Math.hypot(b.x + 0.5 - center.x, b.y + 0.5 - center.y));\n let next = 0;\n await Promise.all(Array.from({ length: Math.min(4, tiles.length) }, async () => {\n while (next < tiles.length) {\n controller.signal.throwIfAborted();\n const coords = tiles[next++];\n const result = await archive.getZxy(coords.z, coords.x, coords.y, controller.signal);\n if (!result || result.data.byteLength !== 256 * 256 * 4) {\n throw new Error(`Missing or invalid Float32 terrain tile ${coords.z}/${coords.x}/${coords.y}`);\n }\n backend._terrainTiles.set(`${coords.x}/${coords.y}`, new Float32Array(result.data));\n }\n }));\n const bridges = backend.options.bridges && await fetch(backend.options.bridges, { signal: controller.signal })\n .then(response => { if (!response.ok) throw new Error(`Bridges: HTTP ${response.status}`); return response.json(); });\n if (controller.signal.aborted || backend._map !== map) return;\n backend._terrainReady = true;\n backend._terrainOriginElevation = getElevation(backend, backend.location) ?? 0;\n for (const layer of Object.values(map._layers)) {\n setTerrainHeight(layer);\n conformModelToTerrain(layer, backend);\n }\n if (bridges) addBridges(backend, bridges);\n map.fire('terrainchange');\n update(backend);\n backend.fire('terrainready');\n return true;\n } catch (error) {\n if (!controller.signal.aborted) backend.fire('error', { error });\n return false;\n } finally {\n backend._terrainLoading = false;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["addBridges", "conformModelToTerrain", "getElevation", "setTerrainHeight", "update", "loadTerrain", "backend", "controller", "archive", "header", "map", "northwest", "southeast", "tiles", "x", "y", "center", "a", "b", "next", "coords", "result", "bridges", "response", "layer", "error"]
7
- }