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,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/rasterTiles.js"],
4
- "sourcesContent": ["import { addRasterTile } from './addRasterTile.js';\r\nimport { createProgram } from './createProgram.js';\r\nimport { destroyTexture } from './destroyTexture.js';\r\nimport { removeRasterTile } from './removeRasterTile.js';\r\nimport { setParent } from './setParent.js';\r\nimport { update } from './update.js';\r\n\r\nconst TILE_SIZE = 256;\r\n// ponytail: cap horizon views at 169 tiles; raise the radius if extreme pitches need more.\r\nconst TILE_RADIUS = 6;\r\n\r\nexport function updateRasterTiles(backend) {\r\n const map = backend._map;\r\n if (!map || !backend._shared || !backend.header) return;\r\n\r\n const zoom = Math.max(backend.header.minZoom ?? 0, Math.min(\r\n Math.round(map.getZoom()),\r\n backend.options.maxZoom,\r\n backend.options.maxNativeZoom\r\n ));\r\n backend._tileZoom = zoom;\r\n const bounds = map.getBounds();\r\n const northWest = map.project(bounds.getNorthWest(), zoom).divideBy(TILE_SIZE).floor();\r\n const southEast = map.project(bounds.getSouthEast(), zoom).divideBy(TILE_SIZE).floor();\r\n const archiveNorthWest = backend.header.maxLat === undefined || backend.header.minLon === undefined\r\n ? new L.Point(0, 0)\r\n : map.project([backend.header.maxLat, backend.header.minLon], zoom).divideBy(TILE_SIZE).floor();\r\n const archiveSouthEast = backend.header.minLat === undefined || backend.header.maxLon === undefined\r\n ? new L.Point(2 ** zoom - 1, 2 ** zoom - 1)\r\n : map.project([backend.header.minLat, backend.header.maxLon], zoom).divideBy(TILE_SIZE).floor();\r\n const center = map.project(map.getCenter(), zoom).divideBy(TILE_SIZE).floor();\r\n const wanted = new Map();\r\n for (let x = Math.max(0, northWest.x, archiveNorthWest.x, center.x - TILE_RADIUS);\r\n x <= Math.min(2 ** zoom - 1, southEast.x, archiveSouthEast.x, center.x + TILE_RADIUS); x++) {\r\n for (let y = Math.max(0, northWest.y, archiveNorthWest.y, center.y - TILE_RADIUS);\r\n y <= Math.min(2 ** zoom - 1, southEast.y, archiveSouthEast.y, center.y + TILE_RADIUS); y++) {\r\n wanted.set(`${zoom}/${x}/${y}`, { z: zoom, x, y });\r\n }\r\n }\r\n backend._wantedRasterTiles = new Set(wanted.keys());\r\n const coverage = new Map();\r\n const parentZoom = Math.max(backend.header.minZoom ?? 0, zoom - 2), factor = 2 ** (zoom - parentZoom);\r\n if (parentZoom < zoom) {\r\n for (const [key, coords] of wanted) {\r\n if (backend._rasterTiles.get(key)?.done) continue;\r\n const parent = { z: parentZoom, x: Math.floor(coords.x / factor), y: Math.floor(coords.y / factor) };\r\n coverage.set(`${parent.z}/${parent.x}/${parent.y}`, parent);\r\n }\r\n }\r\n const required = new Map([...coverage, ...wanted]);\r\n for (const [key, tile] of backend._rasterTiles) {\r\n if (!required.has(key) && !tile.done) releaseRasterTile(backend, tile);\r\n }\r\n for (const [key, coords] of required) {\r\n if (backend._rasterTiles.has(key)) continue;\r\n const tile = { coords, request: new AbortController(), done: false };\r\n backend._rasterTiles.set(key, tile);\r\n }\r\n pumpRasterTiles(backend);\r\n pruneRasterTiles(backend);\r\n}\r\n\r\nfunction pumpRasterTiles(backend) {\r\n const map = backend._map;\r\n if (!map) return;\r\n const center = map.project(map.getCenter(), 0).divideBy(TILE_SIZE);\r\n const pending = [...backend._rasterTiles.values()].filter(tile => !tile.started && !tile.request.signal.aborted);\r\n const distance = ({ coords }) => Math.hypot((coords.x + 0.5) / 2 ** coords.z - center.x,\r\n (coords.y + 0.5) / 2 ** coords.z - center.y);\r\n pending.sort((a, b) => a.coords.z - b.coords.z || distance(a) - distance(b));\r\n for (const tile of pending) {\r\n if (backend._loadingTiles >= 4) break;\r\n loadRasterTile(backend, tile);\r\n }\r\n}\r\n\r\nexport function releaseRasterTiles(backend) {\r\n for (const tile of backend._rasterTiles.values()) releaseRasterTile(backend, tile);\r\n backend._rasterProgram?.pipelineCache.clear();\r\n backend._rasterProgram = null;\r\n if (backend._rasterGeometry) {\r\n for (const attribute of Object.values(backend._rasterGeometry.attributes)) {\r\n destroyTexture(backend, attribute.buffer);\r\n }\r\n backend._rasterGeometry = null;\r\n }\r\n}\r\n\r\nexport function setRasterTerrain(backend, terrain) {\r\n if (backend._terrain3D === terrain) return;\r\n for (const tile of backend._rasterTiles.values()) {\r\n if(backend._terrain3D) removeRasterTile(backend._terrain3D, tile);\r\n if (tile.mesh) {\r\n tile.mesh.visible = true;\r\n setParent(tile.mesh, backend.root);\r\n }\r\n }\r\n backend._terrain3D = terrain || null;\r\n if (terrain) {\r\n for (const tile of backend._rasterTiles.values()) {\r\n if (tile.done) registerTerrainTile(backend, tile.coords, tile);\r\n }\r\n }\r\n}\r\n\r\nexport function registerTerrainTile(backend, coords, tile) {\r\n if (backend._terrain3D && tile.done && !tile.request.signal.aborted &&\r\n backend._rasterTiles.get(`${coords.z}/${coords.x}/${coords.y}`) === tile) {\r\n addRasterTile(backend._terrain3D, backend, coords, tile)\r\n .catch(error => backend.fire('tileerror', { tile, coords, error }));\r\n }\r\n}\r\n\r\nexport function setRasterOpacity(backend, opacity) {\r\n for (const tile of backend._rasterTiles.values()) {\r\n if (tile.mesh) tile.mesh.opacity = opacity;\r\n const terrainMesh = backend._terrain3D?._rasterTiles.get(tile);\r\n if (terrainMesh) terrainMesh.opacity = opacity;\r\n }\r\n update(backend);\r\n}\r\n\r\nexport function setRasterZIndex(backend, zIndex) {\r\n for (const tile of backend._rasterTiles.values()) {\r\n if (tile.mesh) tile.mesh.renderOrder = zIndex;\r\n const terrainMesh = backend._terrain3D?._rasterTiles.get(tile);\r\n if (terrainMesh) terrainMesh.renderOrder = zIndex;\r\n }\r\n update(backend);\r\n}\r\n\r\nexport function getRasterTileSize() {\r\n return new L.Point(TILE_SIZE, TILE_SIZE);\r\n}\r\n\r\nfunction loadRasterTile(backend, tile) {\r\n tile.started = true;\r\n const first = backend._loadingTiles === 0;\r\n backend._loadingTiles++;\r\n backend.fire('tileloadstart', { tile, coords: tile.coords });\r\n if (first) backend.fire('loading');\r\n return Promise.resolve(backend.ready).then(() => backend.options.archive.getZxy(\r\n tile.coords.z, tile.coords.x, tile.coords.y, tile.request.signal\r\n )).then(async result => {\r\n if (tile.request.signal.aborted) return;\r\n if (!result) throw new Error(`Tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y} is not in the offline archive`);\r\n try {\r\n tile.image = await createImageBitmap(new Blob([result.data]));\r\n } catch {\r\n throw new Error(`Unable to decode tile ${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`);\r\n }\r\n if (tile.request.signal.aborted) {\r\n tile.image.close();\r\n tile.image = null;\r\n return;\r\n }\r\n createRasterMesh(backend, tile);\r\n tile.loadedAt = performance.now();\r\n tile.done = true;\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n registerTerrainTile(backend, tile.coords, tile);\r\n backend.fire('tileload', { tile, coords: tile.coords });\r\n update(backend);\r\n }).catch(error => {\r\n if (tile.request.signal.aborted) return;\r\n tile.error = error.message;\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n backend.fire('tileerror', { tile, coords: tile.coords, error });\r\n backend.fire('error', { error, coords: tile.coords });\r\n }).finally(() => {\r\n backend._loadingTiles--;\r\n if (backend._map) {\r\n pumpRasterTiles(backend);\r\n pruneRasterTiles(backend);\r\n if (!backend._loadingTiles) backend.fire('load');\r\n update(backend);\r\n }\r\n });\r\n}\r\n\r\nfunction createRasterMesh(backend, tile) {\r\n const device = backend.renderer.device;\r\n const texture = {\r\n device,\r\n texture: device.createTexture({\r\n size: [tile.image.width, tile.image.height],\r\n format: 'rgba8unorm',\r\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\r\n }),\r\n sampler: device.createSampler({ addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\r\n magFilter: 'linear', minFilter: 'linear' }),\r\n image: tile.image, format: 'rgba8unorm', srgb: false, uploaded: null,\r\n };\r\n if (!backend._rasterProgram) {\r\n backend._rasterProgram = createProgram(backend, {\r\n baseTexture: texture, unlit: true, alphaMode: 'BLEND',\r\n });\r\n }\r\n if (!backend._rasterGeometry) backend._rasterGeometry = createGeometry(device);\r\n const { coords } = tile;\r\n const crs = backend._map.options.crs;\r\n const origin = crs.project(backend.location);\r\n const metres = Math.cos(backend.location.lat * Math.PI / 180);\r\n const scale = crs.scale(coords.z);\r\n const corner = crs.transformation.untransform(new L.Point(coords.x * TILE_SIZE, coords.y * TILE_SIZE), scale);\r\n const opposite = crs.transformation.untransform(new L.Point((coords.x + 1) * TILE_SIZE, (coords.y + 1) * TILE_SIZE), scale);\r\n const sizeX = (opposite.x - corner.x) * metres;\r\n const sizeZ = -(opposite.y - corner.y) * metres;\r\n tile.texture = texture;\r\n tile.mesh = {\r\n position: [(corner.x - origin.x) * metres, 0, -(corner.y - origin.y) * metres],\r\n rotation: [0, 0, 0],\r\n scale: [sizeX, 1, sizeZ],\r\n worldMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],\r\n children: [], visible: true, device, geometry: backend._rasterGeometry,\r\n program: backend._rasterProgram, texture,\r\n opacity: backend.options.opacity, id: L.Layer._nextId++,\r\n renderOrder: backend.options.zIndex || 0, tile, fadeDuration: 250, ground: true,\r\n };\r\n setParent(tile.mesh, backend.root);\r\n}\r\n\r\nfunction createGeometry(device) {\r\n const attributes = {\r\n position: { size: 3, data: new Float32Array([0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1]) },\r\n normal: { size: 3, data: new Float32Array([0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]) },\r\n uv: { size: 2, data: new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]) },\r\n index: { data: new Uint16Array([0, 2, 1, 1, 2, 3]) },\r\n };\r\n for (const [name, attribute] of Object.entries(attributes)) {\r\n attribute.count = attribute.data.length / (attribute.size || 1);\r\n attribute.indexFormat = 'uint16';\r\n attribute.buffer = device.createBuffer({\r\n size: attribute.data.byteLength,\r\n usage: name === 'index' ? GPUBufferUsage.INDEX | GPUBufferUsage.COPY_DST\r\n : GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,\r\n });\r\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\r\n }\r\n return { device, attributes, drawRange: { start: 0, count: attributes.index.count } };\r\n}\r\n\r\nfunction releaseRasterTile(backend, tile) {\r\n const key = `${tile.coords.z}/${tile.coords.x}/${tile.coords.y}`;\r\n if (backend._rasterTiles.get(key) !== tile) return;\r\n backend._rasterTiles.delete(key);\r\n backend._rasterVersion = (backend._rasterVersion || 0) + 1;\r\n tile.request.abort();\r\n if(backend._terrain3D) removeRasterTile(backend._terrain3D, tile);\r\n if (tile.mesh) setParent(tile.mesh, null);\r\n if (tile.texture) destroyTexture(backend, tile.texture.texture);\r\n tile.image?.close();\r\n backend.fire('tileunload', { tile, coords: tile.coords });\r\n update(backend);\r\n}\r\n\r\nexport function pruneRasterTiles(backend) {\r\n const wanted = backend._wantedRasterTiles;\r\n const now = performance.now();\r\n if (backend._pruneVersion === backend._rasterVersion && backend._pruneWanted === wanted &&\r\n now < backend._pruneAfter) return Number.isFinite(backend._pruneAfter);\r\n backend._pruneVersion = backend._rasterVersion;\r\n backend._pruneWanted = wanted;\r\n backend._pruneAfter = Infinity;\r\n const pending = [...wanted].filter(key => {\r\n const tile = backend._rasterTiles.get(key);\r\n if (tile?.done && now - tile.loadedAt < 250) {\r\n backend._pruneAfter = Math.min(backend._pruneAfter, tile.loadedAt + 250);\r\n }\r\n return !tile?.done || now - tile.loadedAt < 250;\r\n }).map(key => {\r\n const [z, x, y] = key.split('/').map(Number);\r\n return { z, x, y };\r\n });\r\n for (const [key, tile] of backend._rasterTiles) {\r\n if (wanted.has(key)) continue;\r\n const overlaps = pending.some(coords => {\r\n const zoom = Math.min(coords.z, tile.coords.z);\r\n return Math.floor(coords.x / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.x / 2 ** (tile.coords.z - zoom)) &&\r\n Math.floor(coords.y / 2 ** (coords.z - zoom)) === Math.floor(tile.coords.y / 2 ** (tile.coords.z - zoom));\r\n });\r\n if (!overlaps) releaseRasterTile(backend, tile);\r\n }\r\n return Number.isFinite(backend._pruneAfter);\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["addRasterTile", "createProgram", "destroyTexture", "removeRasterTile", "setParent", "update", "TILE_SIZE", "TILE_RADIUS", "updateRasterTiles", "backend", "map", "zoom", "bounds", "northWest", "southEast", "archiveNorthWest", "archiveSouthEast", "center", "wanted", "x", "y", "coverage", "parentZoom", "factor", "key", "coords", "parent", "required", "tile", "releaseRasterTile", "pumpRasterTiles", "pruneRasterTiles", "pending", "distance", "a", "b", "loadRasterTile", "releaseRasterTiles", "attribute", "setRasterTerrain", "terrain", "registerTerrainTile", "error", "setRasterOpacity", "opacity", "terrainMesh", "setRasterZIndex", "zIndex", "getRasterTileSize", "first", "result", "createRasterMesh", "device", "texture", "createGeometry", "crs", "origin", "metres", "scale", "corner", "opposite", "sizeX", "sizeZ", "attributes", "name", "now", "z"]
7
- }
@@ -1,2 +0,0 @@
1
- import{intersectMeshes as f}from"./intersectMeshes.js";import{traverse as u}from"./traverse.js";import{updateCamera as g}from"./updateCamera.js";import{updateWorldMatrix as l}from"./updateWorldMatrix.js";function C(r,c,y=r.root.children,p=!0){if(!r.renderer)return[];r._beforeRaycast?.();const i=r._map.getContainer().getBoundingClientRect();l(r.scene),g(r.camera);const m=new DOMMatrix(r.camera.projectionViewMatrix).inverse();if(![...m.toFloat64Array()].every(Number.isFinite))throw new Error("Singular 3D transform");r.raycaster.origin[0]=r.camera.position[0],r.raycaster.origin[1]=r.camera.position[1],r.raycaster.origin[2]=r.camera.position[2];const t=new DOMPoint((c.clientX-i.left)/i.width*2-1,-((c.clientY-i.top)/i.height)*2+1,0,1).matrixTransform(m),a=[t.x/t.w,t.y/t.w,t.z/t.w];r.raycaster.direction[0]=a[0]-r.raycaster.origin[0],r.raycaster.direction[1]=a[1]-r.raycaster.origin[1],r.raycaster.direction[2]=a[2]-r.raycaster.origin[2];const s=Math.hypot(...r.raycaster.direction)||1;r.raycaster.direction[0]/=s,r.raycaster.direction[1]/=s,r.raycaster.direction[2]/=s;const n=[];for(const e of y)p?u(e,o=>{if(!o.visible)return!0;o.geometry&&o._appearance!==0&&n.push(o)}):e.geometry&&e.visible&&e._appearance!==0&&n.push(e);return f(r.raycaster,n,r.renderer.uniformData?.[55])}export{C as raycast};
2
- //# sourceMappingURL=raycast.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/raycast.js"],
4
- "sourcesContent": ["import { intersectMeshes } from './intersectMeshes.js';\nimport { traverse } from './traverse.js';\nimport { updateCamera } from './updateCamera.js';\nimport { updateWorldMatrix } from './updateWorldMatrix.js';\n\n/** Raycasting, hover/click highlight and tooltips. */\n/**\n * Finds the objects under a mouse or pointer event, nearest first.\n *\n * @param {MouseEvent} event\n * @param {Object[]} [objects] Defaults to this layer's root children, not all map layers.\n * @param {boolean} [recursive] Also test the descendants of `objects`.\n * @returns {Object[]} Nearest hit per mesh: object, shared-world point/distance and triangle faceIndex.\n */\n\nexport function raycast(backend, event, objects = backend.root.children, recursive = true) {\n if (!backend.renderer) {\n return [];\n }\n backend._beforeRaycast?.();\n const rect = backend._map.getContainer().getBoundingClientRect();\n updateWorldMatrix(backend.scene);\n updateCamera(backend.camera);\n // Unproject the mouse (-1..1) into a world-space ray from the camera.\n const inverseCamera = new DOMMatrix(backend.camera.projectionViewMatrix).inverse();\n const inverseCameraValues = inverseCamera.toFloat64Array();\n if (![...inverseCameraValues].every(Number.isFinite)) {\n throw new Error('Singular 3D transform');\n }\n backend.raycaster.origin[0] = backend.camera.position[0];\n backend.raycaster.origin[1] = backend.camera.position[1];\n backend.raycaster.origin[2] = backend.camera.position[2];\n const unprojected = new DOMPoint(\n ((event.clientX - rect.left) / rect.width) * 2 - 1,\n -((event.clientY - rect.top) / rect.height) * 2 + 1,\n 0,\n 1\n ).matrixTransform(inverseCamera);\n const end = [\n unprojected.x / unprojected.w,\n unprojected.y / unprojected.w,\n unprojected.z / unprojected.w\n ];\n backend.raycaster.direction[0] = end[0] - backend.raycaster.origin[0];\n backend.raycaster.direction[1] = end[1] - backend.raycaster.origin[1];\n backend.raycaster.direction[2] = end[2] - backend.raycaster.origin[2];\n const rayLength = Math.hypot(...backend.raycaster.direction) || 1;\n backend.raycaster.direction[0] /= rayLength;\n backend.raycaster.direction[1] /= rayLength;\n backend.raycaster.direction[2] /= rayLength;\n const meshes = [];\n for (const object of objects) {\n if (recursive) traverse(object, mesh => {\n if (!mesh.visible) return true;\n if (mesh.geometry && mesh._appearance !== 0) meshes.push(mesh);\n });\n else if (object.geometry && object.visible && object._appearance !== 0) meshes.push(object);\n }\n return intersectMeshes(backend.raycaster, meshes, backend.renderer.uniformData?.[55]);\n}\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,uBAChC,OAAS,YAAAC,MAAgB,gBACzB,OAAS,gBAAAC,MAAoB,oBAC7B,OAAS,qBAAAC,MAAyB,yBAY3B,SAASC,EAAQC,EAASC,EAAOC,EAAUF,EAAQ,KAAK,SAAUG,EAAY,GAAM,CACzF,GAAI,CAACH,EAAQ,SACX,MAAO,CAAC,EAEVA,EAAQ,iBAAiB,EACzB,MAAMI,EAAOJ,EAAQ,KAAK,aAAa,EAAE,sBAAsB,EAC/DF,EAAkBE,EAAQ,KAAK,EAC/BH,EAAaG,EAAQ,MAAM,EAE3B,MAAMK,EAAgB,IAAI,UAAUL,EAAQ,OAAO,oBAAoB,EAAE,QAAQ,EAEjF,GAAI,CAAC,CAAC,GADsBK,EAAc,eAAe,CAC7B,EAAE,MAAM,OAAO,QAAQ,EACjD,MAAM,IAAI,MAAM,uBAAuB,EAEzCL,EAAQ,UAAU,OAAO,CAAC,EAAIA,EAAQ,OAAO,SAAS,CAAC,EACvDA,EAAQ,UAAU,OAAO,CAAC,EAAIA,EAAQ,OAAO,SAAS,CAAC,EACvDA,EAAQ,UAAU,OAAO,CAAC,EAAIA,EAAQ,OAAO,SAAS,CAAC,EACvD,MAAMM,EAAc,IAAI,UACpBL,EAAM,QAAUG,EAAK,MAAQA,EAAK,MAAS,EAAI,EACjD,GAAGH,EAAM,QAAUG,EAAK,KAAOA,EAAK,QAAU,EAAI,EAClD,EACA,CACF,EAAE,gBAAgBC,CAAa,EACzBE,EAAM,CACVD,EAAY,EAAIA,EAAY,EAC5BA,EAAY,EAAIA,EAAY,EAC5BA,EAAY,EAAIA,EAAY,CAC9B,EACAN,EAAQ,UAAU,UAAU,CAAC,EAAIO,EAAI,CAAC,EAAIP,EAAQ,UAAU,OAAO,CAAC,EACpEA,EAAQ,UAAU,UAAU,CAAC,EAAIO,EAAI,CAAC,EAAIP,EAAQ,UAAU,OAAO,CAAC,EACpEA,EAAQ,UAAU,UAAU,CAAC,EAAIO,EAAI,CAAC,EAAIP,EAAQ,UAAU,OAAO,CAAC,EACpE,MAAMQ,EAAY,KAAK,MAAM,GAAGR,EAAQ,UAAU,SAAS,GAAK,EAChEA,EAAQ,UAAU,UAAU,CAAC,GAAKQ,EAClCR,EAAQ,UAAU,UAAU,CAAC,GAAKQ,EAClCR,EAAQ,UAAU,UAAU,CAAC,GAAKQ,EAClC,MAAMC,EAAS,CAAC,EAChB,UAAWC,KAAUR,EACfC,EAAWP,EAASc,EAAQC,GAAQ,CACtC,GAAI,CAACA,EAAK,QAAS,MAAO,GACtBA,EAAK,UAAYA,EAAK,cAAgB,GAAGF,EAAO,KAAKE,CAAI,CAC/D,CAAC,EACQD,EAAO,UAAYA,EAAO,SAAWA,EAAO,cAAgB,GAAGD,EAAO,KAAKC,CAAM,EAE5F,OAAOf,EAAgBK,EAAQ,UAAWS,EAAQT,EAAQ,SAAS,cAAc,EAAE,CAAC,CACtF",
6
- "names": ["intersectMeshes", "traverse", "updateCamera", "updateWorldMatrix", "raycast", "backend", "event", "objects", "recursive", "rect", "inverseCamera", "unprojected", "end", "rayLength", "meshes", "object", "mesh"]
7
- }
@@ -1,2 +0,0 @@
1
- async function o(t,e,r,n){if(n?.throwIfAborted(),!Number.isSafeInteger(e)||!Number.isSafeInteger(r)||e<0||r<=0||!Number.isSafeInteger(e+r))throw new Error("Invalid PMTiles byte range");const a=await fetch(t.url,{headers:{Range:`bytes=${e}-${e+r-1}`},signal:n});if(!a.ok)throw new Error(`Unable to read PMTiles: HTTP ${a.status}`);const s=a.headers.get("ETag");if(t._etag&&s!==t._etag)throw new Error("PMTiles archive changed; recreate the layer");s&&(t._etag=s);let i=await a.arrayBuffer();if(a.status===200)i=i.slice(e,e+r);else if(a.status!==206||!a.headers.get("Content-Range")?.startsWith(`bytes ${e}-${e+r-1}/`))throw new Error("Invalid PMTiles range response");if(i.byteLength!==r)throw new Error("Truncated PMTiles range");return i}export{o as read};
2
- //# sourceMappingURL=read.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/read.js"],
4
- "sourcesContent": ["export async function read(backend, offset, length, signal) {\r\n signal?.throwIfAborted();\r\n if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(length) ||\r\n offset < 0 || length <= 0 || !Number.isSafeInteger(offset + length)) {\r\n throw new Error('Invalid PMTiles byte range');\r\n }\r\n const response = await fetch(backend.url, {\r\n headers: { Range: `bytes=${offset}-${offset + length - 1}` }, signal,\r\n });\r\n if (!response.ok) {\r\n throw new Error(`Unable to read PMTiles: HTTP ${response.status}`);\r\n }\r\n const etag = response.headers.get('ETag');\r\n if (backend._etag && etag !== backend._etag) {\r\n throw new Error('PMTiles archive changed; recreate the layer');\r\n }\r\n if (etag) backend._etag = etag;\r\n let data = await response.arrayBuffer();\r\n if (response.status === 200) {\r\n data = data.slice(offset, offset + length);\r\n } else if (response.status !== 206 ||\r\n !response.headers.get('Content-Range')?.startsWith(`bytes ${offset}-${offset + length - 1}/`)) {\r\n throw new Error('Invalid PMTiles range response');\r\n }\r\n if (data.byteLength !== length) {\r\n throw new Error('Truncated PMTiles range');\r\n }\r\n return data;\r\n}\r\n"],
5
- "mappings": "AAAA,eAAsBA,EAAKC,EAASC,EAAQC,EAAQC,EAAQ,CAE1D,GADAA,GAAQ,eAAe,EACnB,CAAC,OAAO,cAAcF,CAAM,GAAK,CAAC,OAAO,cAAcC,CAAM,GAC/DD,EAAS,GAAKC,GAAU,GAAK,CAAC,OAAO,cAAcD,EAASC,CAAM,EAClE,MAAM,IAAI,MAAM,4BAA4B,EAE9C,MAAME,EAAW,MAAM,MAAMJ,EAAQ,IAAK,CACxC,QAAS,CAAE,MAAO,SAASC,CAAM,IAAIA,EAASC,EAAS,CAAC,EAAG,EAAG,OAAAC,CAChE,CAAC,EACD,GAAI,CAACC,EAAS,GACZ,MAAM,IAAI,MAAM,gCAAgCA,EAAS,MAAM,EAAE,EAEnE,MAAMC,EAAOD,EAAS,QAAQ,IAAI,MAAM,EACxC,GAAIJ,EAAQ,OAASK,IAASL,EAAQ,MACpC,MAAM,IAAI,MAAM,6CAA6C,EAE3DK,IAAML,EAAQ,MAAQK,GAC1B,IAAIC,EAAO,MAAMF,EAAS,YAAY,EACtC,GAAIA,EAAS,SAAW,IACtBE,EAAOA,EAAK,MAAML,EAAQA,EAASC,CAAM,UAChCE,EAAS,SAAW,KAC7B,CAACA,EAAS,QAAQ,IAAI,eAAe,GAAG,WAAW,SAASH,CAAM,IAAIA,EAASC,EAAS,CAAC,GAAG,EAC5F,MAAM,IAAI,MAAM,gCAAgC,EAElD,GAAII,EAAK,aAAeJ,EACtB,MAAM,IAAI,MAAM,yBAAyB,EAE3C,OAAOI,CACT",
6
- "names": ["read", "backend", "offset", "length", "signal", "response", "etag", "data"]
7
- }
@@ -1,2 +0,0 @@
1
- import{types as d}from"./types.js";import{sizes as g}from"./sizes.js";function v(c,T){const r=c.accessors[T],f=d[r.componentType],t=g[r.type];if(!f||!t||!Number.isInteger(r.count)||r.count<0)throw new Error("Invalid glTF accessor");const o=new f(r.count*t),l=(e,n,a,i,b)=>{const s=c.bufferViews[e],y=f.BYTES_PER_ELEMENT,w=c.buffers[s.buffer].binary;if(i||=t*y,!w||i<t*y||n<0||(s.byteOffset||0)+s.byteLength>w.byteLength||(a-1)*i+t*y+n>s.byteLength)throw new Error("glTF accessor outside buffer view");for(let u=0;u<a;u++){const p=new f(w.slice((s.byteOffset||0)+n+u*i,(s.byteOffset||0)+n+u*i+t*y));o.set(p,b(u)*t)}};if(r.bufferView!==void 0&&l(r.bufferView,r.byteOffset||0,r.count,c.bufferViews[r.bufferView].byteStride,e=>e),r.sparse){const e=r.sparse,n=d[e.indices.componentType];if(![Uint8Array,Uint16Array,Uint32Array].includes(n))throw new Error("Invalid sparse glTF indices");const a=c.bufferViews[e.indices.bufferView],i=(a.byteOffset||0)+(e.indices.byteOffset||0);if(e.count>r.count||(e.indices.byteOffset||0)+e.count*n.BYTES_PER_ELEMENT>a.byteLength)throw new Error("Invalid sparse glTF indices");const b=new n(c.buffers[a.buffer].binary.slice(i,i+e.count*n.BYTES_PER_ELEMENT));l(e.values.bufferView,e.values.byteOffset||0,e.count,0,s=>{if(b[s]>=r.count)throw new Error("Invalid sparse glTF index");return b[s]})}if(r.componentType===5126)return{data:o,size:t};const E=new Float32Array(o.length);for(let e=0;e<o.length;e++)E[e]=r.normalized?Math.max(-1,o[e]/(f===Int8Array?127:f===Int16Array?32767:f===Uint8Array?255:f===Uint32Array?4294967295:65535)):o[e];return{data:E,size:t,indices:o}}export{v as readAccessor};
2
- //# sourceMappingURL=readAccessor.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/readAccessor.js"],
4
- "sourcesContent": ["import { types } from \"./types.js\";\nimport { sizes } from \"./sizes.js\";\n\n/** Decode packed, interleaved, normalized or sparse glTF accessor data. */\n\nexport function readAccessor(description, index) {\n const spec = description.accessors[index], Type = types[spec.componentType], size = sizes[spec.type];\n if (!Type || !size || !Number.isInteger(spec.count) || spec.count < 0) {\n throw new Error('Invalid glTF accessor');\n }\n const data = new Type(spec.count * size);\n // The destination callback is sequential for base data and sparse-indexed for overrides.\n const read = (viewIndex, offset, count, stride, output) => {\n const view = description.bufferViews[viewIndex], bytes = Type.BYTES_PER_ELEMENT;\n const buffer = description.buffers[view.buffer].binary;\n stride ||= size * bytes;\n if (!buffer || stride < size * bytes || offset < 0 ||\n (view.byteOffset || 0) + view.byteLength > buffer.byteLength ||\n (count - 1) * stride + size * bytes + offset > view.byteLength) throw new Error('glTF accessor outside buffer view');\n for (let i = 0; i < count; i++) {\n const values = new Type(buffer.slice((view.byteOffset || 0) + offset + i * stride,\n (view.byteOffset || 0) + offset + i * stride + size * bytes));\n data.set(values, output(i) * size);\n }\n };\n if (spec.bufferView !== undefined) {\n read(\n spec.bufferView,\n spec.byteOffset || 0,\n spec.count,\n description.bufferViews[spec.bufferView].byteStride,\n i => i\n );\n }\n if (spec.sparse) {\n const sparse = spec.sparse, Index = types[sparse.indices.componentType];\n if (![Uint8Array, Uint16Array, Uint32Array].includes(Index)) {\n throw new Error('Invalid sparse glTF indices');\n }\n const view = description.bufferViews[sparse.indices.bufferView];\n const offset = (view.byteOffset || 0) + (sparse.indices.byteOffset || 0);\n if (sparse.count > spec.count || (sparse.indices.byteOffset || 0) + sparse.count * Index.BYTES_PER_ELEMENT > view.byteLength) {\n throw new Error('Invalid sparse glTF indices');\n }\n const indices = new Index(description.buffers[view.buffer].binary.slice(offset, offset + sparse.count * Index.BYTES_PER_ELEMENT));\n read(\n sparse.values.bufferView,\n sparse.values.byteOffset || 0,\n sparse.count,\n 0,\n i => {\n if (indices[i] >= spec.count) throw new Error('Invalid sparse glTF index');\n return indices[i];\n }\n );\n }\n if (spec.componentType === 5126) {\n return { data, size };\n }\n const normalized = new Float32Array(data.length);\n // Normalization is a glTF accessor rule, not sRGB conversion; indices stay integers.\n for (let i = 0; i < data.length; i++) {\n normalized[i] = spec.normalized\n ? Math.max(-1, data[i] / (Type === Int8Array ? 127 : Type === Int16Array ? 32767 : Type === Uint8Array ? 255 : Type === Uint32Array ? 4294967295 : 65535))\n : data[i];\n }\n return { data: normalized, size, indices: data };\n}\n"],
5
- "mappings": "AAAA,OAAS,SAAAA,MAAa,aACtB,OAAS,SAAAC,MAAa,aAIf,SAASC,EAAaC,EAAaC,EAAO,CAC/C,MAAMC,EAAOF,EAAY,UAAUC,CAAK,EAAGE,EAAON,EAAMK,EAAK,aAAa,EAAGE,EAAON,EAAMI,EAAK,IAAI,EACnG,GAAI,CAACC,GAAQ,CAACC,GAAQ,CAAC,OAAO,UAAUF,EAAK,KAAK,GAAKA,EAAK,MAAQ,EAClE,MAAM,IAAI,MAAM,uBAAuB,EAEzC,MAAMG,EAAO,IAAIF,EAAKD,EAAK,MAAQE,CAAI,EAEjCE,EAAO,CAACC,EAAWC,EAAQC,EAAOC,EAAQC,IAAW,CACzD,MAAMC,EAAOZ,EAAY,YAAYO,CAAS,EAAGM,EAAQV,EAAK,kBACxDW,EAASd,EAAY,QAAQY,EAAK,MAAM,EAAE,OAEhD,GADAF,IAAWN,EAAOS,EACd,CAACC,GAAUJ,EAASN,EAAOS,GAASL,EAAS,IAC9CI,EAAK,YAAc,GAAKA,EAAK,WAAaE,EAAO,aACjDL,EAAQ,GAAKC,EAASN,EAAOS,EAAQL,EAASI,EAAK,WAAY,MAAM,IAAI,MAAM,mCAAmC,EACrH,QAASG,EAAI,EAAGA,EAAIN,EAAOM,IAAK,CAC9B,MAAMC,EAAS,IAAIb,EAAKW,EAAO,OAAOF,EAAK,YAAc,GAAKJ,EAASO,EAAIL,GACxEE,EAAK,YAAc,GAAKJ,EAASO,EAAIL,EAASN,EAAOS,CAAK,CAAC,EAC9DR,EAAK,IAAIW,EAAQL,EAAOI,CAAC,EAAIX,CAAI,CACnC,CACF,EAUA,GATIF,EAAK,aAAe,QACtBI,EACEJ,EAAK,WACLA,EAAK,YAAc,EACnBA,EAAK,MACLF,EAAY,YAAYE,EAAK,UAAU,EAAE,WACzCa,GAAKA,CACP,EAEEb,EAAK,OAAQ,CACf,MAAMe,EAASf,EAAK,OAAQgB,EAAQrB,EAAMoB,EAAO,QAAQ,aAAa,EACtE,GAAI,CAAC,CAAC,WAAY,YAAa,WAAW,EAAE,SAASC,CAAK,EACxD,MAAM,IAAI,MAAM,6BAA6B,EAE/C,MAAMN,EAAOZ,EAAY,YAAYiB,EAAO,QAAQ,UAAU,EACxDT,GAAUI,EAAK,YAAc,IAAMK,EAAO,QAAQ,YAAc,GACtE,GAAIA,EAAO,MAAQf,EAAK,QAAUe,EAAO,QAAQ,YAAc,GAAKA,EAAO,MAAQC,EAAM,kBAAoBN,EAAK,WAChH,MAAM,IAAI,MAAM,6BAA6B,EAE/C,MAAMO,EAAU,IAAID,EAAMlB,EAAY,QAAQY,EAAK,MAAM,EAAE,OAAO,MAAMJ,EAAQA,EAASS,EAAO,MAAQC,EAAM,iBAAiB,CAAC,EAChIZ,EACEW,EAAO,OAAO,WACdA,EAAO,OAAO,YAAc,EAC5BA,EAAO,MACP,EACAF,GAAK,CACH,GAAII,EAAQJ,CAAC,GAAKb,EAAK,MAAO,MAAM,IAAI,MAAM,2BAA2B,EACzE,OAAOiB,EAAQJ,CAAC,CAClB,CACF,CACF,CACA,GAAIb,EAAK,gBAAkB,KACzB,MAAO,CAAE,KAAAG,EAAM,KAAAD,CAAK,EAEtB,MAAMgB,EAAa,IAAI,aAAaf,EAAK,MAAM,EAE/C,QAASU,EAAI,EAAGA,EAAIV,EAAK,OAAQU,IAC/BK,EAAWL,CAAC,EAAIb,EAAK,WACjB,KAAK,IAAI,GAAIG,EAAKU,CAAC,GAAKZ,IAAS,UAAY,IAAMA,IAAS,WAAa,MAAQA,IAAS,WAAa,IAAMA,IAAS,YAAc,WAAa,MAAM,EACvJE,EAAKU,CAAC,EAEZ,MAAO,CAAE,KAAMK,EAAY,KAAAhB,EAAM,QAASC,CAAK,CACjD",
6
- "names": ["types", "sizes", "readAccessor", "description", "index", "spec", "Type", "size", "data", "read", "viewIndex", "offset", "count", "stride", "output", "view", "bytes", "buffer", "i", "values", "sparse", "Index", "indices", "normalized"]
7
- }
@@ -1,2 +0,0 @@
1
- import{setHighlight as s}from"./setHighlight.js";import{showFeature as i}from"./showFeature.js";import{setParent as p}from"./setParent.js";import{update as u}from"./update.js";function n(e,r){if(r.request.abort(),r.mesh){e.highlightedFeature?.mesh===r.mesh&&(s(e,null),e.hoveredFeature=null,i(e,null)),p(r.mesh,null),u(e);const t=r.mesh.geometry;for(const o of Object.values(t.attributes))o.buffer.destroy();r.mesh.program.pipelineCache.clear()}}function g(e,r=!0){const t={enabled:r,loaded:0,skipped:0,pending:0,errors:[]};for(const o of e._areas.values())o.error?t.errors.push(o.error):o.done||t.pending++,t.loaded+=o.buildings??0,t.skipped+=o.skipped??0;e.fire("progress",t)}export{n as releaseArea,g as updateStatus};
2
- //# sourceMappingURL=releaseArea.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/releaseArea.js"],
4
- "sourcesContent": ["import { setHighlight } from './setHighlight.js';\nimport { showFeature } from './showFeature.js';\nimport { setParent } from './setParent.js';\nimport { update } from './update.js';\n\n/** Cancel pending work and dispose this block's GPU data, including any hover highlight. */\n\nexport function releaseArea(backend, area) {\n area.request.abort();\n if (area.mesh) {\n if (backend.highlightedFeature?.mesh === area.mesh) {\n setHighlight(backend, null);\n backend.hoveredFeature = null;\n showFeature(backend, null);\n }\n setParent(area.mesh, null);\n update(backend);\n const geometry = area.mesh.geometry;\n for (const attribute of Object.values(geometry.attributes)) attribute.buffer.destroy();\n area.mesh.program.pipelineCache.clear();\n }\n}\n/** Emit a snapshot for consumers; ready does not wait for all neighborhood tasks. */\n\nexport function updateStatus(backend, enabled = true) {\n const progress = { enabled, loaded: 0, skipped: 0, pending: 0, errors: [] };\n for (const area of backend._areas.values()) {\n if (area.error) progress.errors.push(area.error);\n else if (!area.done) progress.pending++;\n progress.loaded += area.buildings ?? 0;\n progress.skipped += area.skipped ?? 0;\n }\n backend.fire('progress', progress);\n}\n"],
5
- "mappings": "AAAA,OAAS,gBAAAA,MAAoB,oBAC7B,OAAS,eAAAC,MAAmB,mBAC5B,OAAS,aAAAC,MAAiB,iBAC1B,OAAS,UAAAC,MAAc,cAIhB,SAASC,EAAYC,EAASC,EAAM,CAEzC,GADAA,EAAK,QAAQ,MAAM,EACfA,EAAK,KAAM,CACTD,EAAQ,oBAAoB,OAASC,EAAK,OAC5CN,EAAaK,EAAS,IAAI,EAC1BA,EAAQ,eAAiB,KACzBJ,EAAYI,EAAS,IAAI,GAE3BH,EAAUI,EAAK,KAAM,IAAI,EACzBH,EAAOE,CAAO,EACd,MAAME,EAAWD,EAAK,KAAK,SAC3B,UAAWE,KAAa,OAAO,OAAOD,EAAS,UAAU,EAAGC,EAAU,OAAO,QAAQ,EACrFF,EAAK,KAAK,QAAQ,cAAc,MAAM,CACxC,CACF,CAGO,SAASG,EAAaJ,EAASK,EAAU,GAAM,CACpD,MAAMC,EAAW,CAAE,QAAAD,EAAS,OAAQ,EAAG,QAAS,EAAG,QAAS,EAAG,OAAQ,CAAC,CAAE,EAC1E,UAAWJ,KAAQD,EAAQ,OAAO,OAAO,EACnCC,EAAK,MAAOK,EAAS,OAAO,KAAKL,EAAK,KAAK,EACrCA,EAAK,MAAMK,EAAS,UAC9BA,EAAS,QAAUL,EAAK,WAAa,EACrCK,EAAS,SAAWL,EAAK,SAAW,EAEtCD,EAAQ,KAAK,WAAYM,CAAQ,CACnC",
6
- "names": ["setHighlight", "showFeature", "setParent", "update", "releaseArea", "backend", "area", "geometry", "attribute", "updateStatus", "enabled", "progress"]
7
- }
@@ -1,2 +0,0 @@
1
- import{destroyTexture as o}from"./destroyTexture.js";import{setParent as s}from"./setParent.js";import{update as u}from"./update.js";function f(e,r){e._terrainRequest?.abort();const t=e._rasterTiles.get(r);t&&(s(t,null),u(e),t.texture!==r.texture&&o(e,t.texture.texture),e._rasterTiles.delete(r))}export{f as removeRasterTile};
2
- //# sourceMappingURL=removeRasterTile.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/removeRasterTile.js"],
4
- "sourcesContent": ["import { destroyTexture } from './destroyTexture.js';\nimport { setParent } from './setParent.js';\nimport { update } from './update.js';\n\nexport function removeRasterTile(layer, tile) {\n layer._terrainRequest?.abort();\n const mesh = layer._rasterTiles.get(tile);\n if (!mesh) return;\n setParent(mesh, null);\n update(layer);\n if (mesh.texture !== tile.texture) destroyTexture(layer, mesh.texture.texture);\n layer._rasterTiles.delete(tile);\n}\n"],
5
- "mappings": "AAAA,OAAS,kBAAAA,MAAsB,sBAC/B,OAAS,aAAAC,MAAiB,iBAC1B,OAAS,UAAAC,MAAc,cAEhB,SAASC,EAAiBC,EAAOC,EAAM,CAC5CD,EAAM,iBAAiB,MAAM,EAC7B,MAAME,EAAOF,EAAM,aAAa,IAAIC,CAAI,EACnCC,IACLL,EAAUK,EAAM,IAAI,EACpBJ,EAAOE,CAAK,EACRE,EAAK,UAAYD,EAAK,SAASL,EAAeI,EAAOE,EAAK,QAAQ,OAAO,EAC7EF,EAAM,aAAa,OAAOC,CAAI,EAChC",
6
- "names": ["destroyTexture", "setParent", "update", "removeRasterTile", "layer", "tile", "mesh"]
7
- }
@@ -1,15 +0,0 @@
1
- import{computeBounds as me}from"./computeBounds.js";import{traverse as b}from"./traverse.js";import{updateCamera as ge}from"./updateCamera.js";import{updateWorldMatrix as ue}from"./updateWorldMatrix.js";import{destroyTexture as Z}from"./destroyTexture.js";import{drawGeometry as k}from"./drawGeometry.js";import{updatePointLights as de}from"./updatePointLights.js";import{renderSunlight as xe}from"./renderSunlight.js";import{sortMeshes as he}from"./sortMeshes.js";import{update as ye}from"./update.js";import{getRasterTileSize as fe,pruneRasterTiles as Me}from"./rasterTiles.js";import{getElevation as _e}from"./getElevation.js";import{roofCoverage as ve}from"./roofCoverage.js";function Ae(t){if(cancelAnimationFrame(t._frame),t._frame=null,t._shared!==t||!t.renderer)return;const s=t._map,w=performance.now();let E=!1;const g=s.getSize();if(!g.x||!g.y)return;if(s._animatingZoom){t._zoomTransitions||=new Map;for(const e of s.getContainer().getAnimations({subtree:!0})){if(!(e instanceof CSSTransition)||e.transitionProperty!=="transform"||!e.effect.target.classList.contains("leaflet-zoom-animated")||t._zoomTransitions.has(e))continue;const r=e.currentTime||0;e.pause(),t._zoomTransitions.set(e,{start:w,time:r})}for(const[e,{start:r,time:a}]of t._zoomTransitions)e.currentTime=Math.min(e.effect.getComputedTiming().endTime,a+w-r);if(t._zoomView){const e=t._zoomView,a=[...t._zoomTransitions.keys()].find(D=>D.effect.target===s._proxy)?.effect.getComputedTiming().progress??Math.min(1,(w-e.start)/250),f=s.getZoomScale(e.targetZoom,e.zoom),l=1+(f-1)*a,u=s.project(e.from,e.zoom),x=s.project(e.to,e.zoom);s._cameraView={zoom:s.getScaleZoom(l,e.zoom),center:s.unproject(u.add(x.subtract(u).multiplyBy(f*a/l)),e.zoom)},s._updateCameraOverlays()}}(!t._size||!t._size.equals(g))&&(t.renderer.width=g.x,t.renderer.height=g.y,t.renderer.canvas.width=Math.round(g.x*t.renderer.dpr),t.renderer.canvas.height=Math.round(g.y*t.renderer.dpr),t.renderer.canvas.style.width=`${g.x}px`,t.renderer.canvas.style.height=`${g.y}px`,t.renderer.depthTexture&&Z(t,t.renderer.depthTexture),t.renderer.depthTexture=t.renderer.device.createTexture({size:[t.renderer.canvas.width,t.renderer.canvas.height],format:"depth24plus",usage:GPUTextureUsage.RENDER_ATTACHMENT}),t._size=g);const q=s._cameraView?.zoom??s.getZoom(),ee=s._cameraView?.center??s.getCenter(),$=s.options.crs.scale(q)/(4007501668557849e-8*Math.cos(t._sceneOrigin.lat*Math.PI/180)),te=s.project(ee,q).subtract(s.project(t._sceneOrigin,q)),C=g.y*1.5/$,P=[te.x/$,(s._terrain3D?_e(s._terrain3D,ee):void 0)??0,te.y/$],B=s.getPitch()*Math.PI/180,F=s.getBearing()*Math.PI/180,c=t.camera;c.fov=2*Math.atan(1/3)*180/Math.PI,c.aspect=g.x/g.y,c.near=Math.max(.1,C/1e4),c.far=Math.max(1e4,C*10),c.position[0]=P[0]+Math.sin(F)*Math.sin(B)*C,c.position[1]=P[1]+Math.cos(B)*C,c.position[2]=P[2]+Math.cos(F)*Math.sin(B)*C,c.up[0]=-Math.sin(F)*Math.cos(B),c.up[1]=Math.sin(B),c.up[2]=-Math.cos(F)*Math.cos(B),c.target[0]=P[0],c.target[1]=P[1],c.target[2]=P[2],ge(c),ue(t.scene);for(const e of t._layers)e._beforeRender?.();const _=s._sunlight,R=new DOMPoint(..._?.direction||[-300,500,300],0).matrixTransform(new DOMMatrix(c.viewMatrix)),Y=Math.hypot(R.x,R.y,R.z)||1,ce=[R.x/Y,R.y/Y,R.z/Y],S=new DOMPoint(0,1,0,0).matrixTransform(new DOMMatrix(c.viewMatrix)),H=Math.hypot(S.x,S.y,S.z)||1,le=[S.x/H,S.y/H,S.z/H],o=c.projectionViewMatrix,i=[[o[3]+o[0],o[7]+o[4],o[11]+o[8],o[15]+o[12]],[o[3]-o[0],o[7]-o[4],o[11]-o[8],o[15]-o[12]],[o[3]+o[1],o[7]+o[5],o[11]+o[9],o[15]+o[13]],[o[3]-o[1],o[7]-o[5],o[11]-o[9],o[15]-o[13]],[o[2],o[6],o[10],o[14]],[o[3]-o[2],o[7]-o[6],o[11]-o[10],o[15]-o[14]]],U=[Math.hypot(i[0][0],i[0][1],i[0][2]),Math.hypot(i[1][0],i[1][1],i[1][2]),Math.hypot(i[2][0],i[2][1],i[2][2]),Math.hypot(i[3][0],i[3][1],i[3][2]),Math.hypot(i[4][0],i[4][1],i[4][2]),Math.hypot(i[5][0],i[5][1],i[5][2])];ue(t.scene),b(t.scene,e=>{if(!e.visible)return!0;if(e.geometry){e.geometry.bounds||me(e.geometry);const r=e.geometry.bounds,a=e.worldMatrix,f=r.center,l=a[0]*f[0]+a[4]*f[1]+a[8]*f[2]+a[12],u=a[1]*f[0]+a[5]*f[1]+a[9]*f[2]+a[13],x=a[2]*f[0]+a[6]*f[1]+a[10]*f[2]+a[14],D=o[2]*l+o[6]*u+o[10]*x+o[14],h=o[3]*l+o[7]*u+o[11]*x+o[15];e._sortDepth=D/h;const m=r.radius*Math.max(Math.hypot(a[0],a[1],a[2]),Math.hypot(a[4],a[5],a[6]),Math.hypot(a[8],a[9],a[10]));if(e._visibleInFrame=i[0][0]*l+i[0][1]*u+i[0][2]*x+i[0][3]>=-m*U[0]&&i[1][0]*l+i[1][1]*u+i[1][2]*x+i[1][3]>=-m*U[1]&&i[2][0]*l+i[2][1]*u+i[2][2]*x+i[2][3]>=-m*U[2]&&i[3][0]*l+i[3][1]*u+i[3][2]*x+i[3][3]>=-m*U[3]&&i[4][0]*l+i[4][1]*u+i[4][2]*x+i[4][3]>=-m*U[4]&&i[5][0]*l+i[5][1]*u+i[5][2]*x+i[5][3]>=-m*U[5],!e._visibleInFrame)return}});const n=t.renderer;let z=[];if([...t._layers].some(e=>e.options.roofTexture)){z=Object.values(s._layers).filter(r=>r._type==="pmtiles"&&r._rasterTiles&&r.options.opacity>0);const e=z.map(r=>`${L.Util.stamp(r)}:${r._rasterVersion||0}:${r.options.opacity}:${r.options.zIndex}`).join("|");if(!t._roofRaster||t._roofRaster.signature!==e&&(!z.some(r=>r._loadingTiles)||w-t._roofRaster.updatedAt>=50)){const r=z.flatMap(p=>[...p._rasterTiles.values()].filter(d=>d.done&&!d.request.signal.aborted&&d.image).map(d=>({tile:d,layer:p}))),a=r.length?Math.max(...r.map(({tile:p})=>p.coords.z)):s.getZoom(),f=new L.Bounds;for(const{tile:{coords:p},layer:d}of r){const j=fe().multiplyBy(s.getZoomScale(a,p.z));f.extend(new L.Point(p.x,p.y).scaleBy(j)),f.extend(new L.Point(p.x+1,p.y+1).scaleBy(j))}const l=f.min||s.project(t._sceneOrigin,a),u=f.isValid()?f.getSize():new L.Point(1,1),D=Math.min(1,4096/Math.max(u.x,u.y)),h=Math.max(1,Math.ceil(u.x*D)),m=Math.max(1,Math.ceil(u.y*D)),re=s.project(t._sceneOrigin,a),oe=s.options.crs.scale(a)/(4007501668557849e-8*Math.cos(t._sceneOrigin.lat*Math.PI/180)),G=new DOMMatrix;G.m11=oe/u.x,G.m33=oe/u.y,G.m41=(re.x-l.x)/u.x,G.m43=(re.y-l.y)/u.y;const v=t._roofRaster?.texture;v&&(v.width!==h||v.height!==m)&&(Z(t,v.texture),v.texture=n.device.createTexture({size:[h,m],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),v.width=h,v.height=m),t._roofRaster={signature:e,updatedAt:w,matrix:Array.from(G.toFloat64Array()),texture:v||{device:n.device,texture:n.device.createTexture({size:[h,m],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:n.device.createSampler({addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"}),samplerOptions:{addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"},image:null,width:h,height:m,format:"rgba8unorm",srgb:!1,flipY:!1,uploaded:null}};const M=n.device;if(!n.roofBlit){const p=M.createShaderModule({code:`
2
- @group(0) @binding(0) var source: texture_2d<f32>;
3
- @group(0) @binding(1) var sourceSampler: sampler;
4
- @group(0) @binding(2) var<uniform> opacity: f32;
5
- struct Varyings { @builtin(position) position: vec4f, @location(0) uv: vec2f };
6
- @vertex fn vertexMain(@builtin(vertex_index) index: u32) -> Varyings {
7
- let uv = vec2f(f32(index & 1u), f32(index >> 1u));
8
- return Varyings(vec4f(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0, 0.0, 1.0), uv);
9
- }
10
- @fragment fn fragmentMain(input: Varyings) -> @location(0) vec4f {
11
- let color = textureSample(source, sourceSampler, input.uv);
12
- return vec4f(color.rgb, color.a * opacity);
13
- }
14
- `});n.roofBlit={pipeline:M.createRenderPipeline({layout:"auto",vertex:{module:p,entryPoint:"vertexMain"},fragment:{module:p,entryPoint:"fragmentMain",targets:[{format:"rgba8unorm",blend:{color:{srcFactor:"src-alpha",dstFactor:"one-minus-src-alpha",operation:"add"},alpha:{srcFactor:"one",dstFactor:"one-minus-src-alpha",operation:"add"}}}]},primitive:{topology:"triangle-strip"}}),sampler:M.createSampler({magFilter:"linear",minFilter:"linear"})}}const X=new Float32Array(Math.max(1,r.length)*64),J=M.createBuffer({size:X.byteLength,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),ie=M.createCommandEncoder(),A=ie.beginRenderPass({colorAttachments:[{view:t._roofRaster.texture.texture.createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}]});A.setPipeline(n.roofBlit.pipeline),r.sort((p,d)=>(p.layer.options.zIndex||0)-(d.layer.options.zIndex||0)||p.tile.coords.z-d.tile.coords.z);for(const[p,{tile:d,layer:j}]of r.entries()){const{coords:K,image:pe}=d,T=d.texture;T.uploaded!==T.image&&(M.queue.copyExternalImageToTexture({source:pe},{texture:T.texture},[T.texture.width,T.texture.height]),T.uploaded=T.image),X[p*64]=j.options.opacity;const Q=fe().multiplyBy(s.getZoomScale(a,K.z)),ae=new L.Point(K.x,K.y).scaleBy(Q).subtract(l),ne=ae.x*h/u.x,se=ae.y*m/u.y;A.setViewport(ne,se,Math.min(Q.x*h/u.x,h-ne),Math.min(Q.y*m/u.y,m-se),0,1),A.setBindGroup(0,M.createBindGroup({layout:n.roofBlit.pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:T.texture.createView()},{binding:1,resource:n.roofBlit.sampler},{binding:2,resource:{buffer:J,offset:p*256,size:4}}]})),A.draw(4)}A.end(),M.queue.writeBuffer(J,0,X),M.queue.submit([ie.finish()]),J.destroy()}}else t._roofRaster&&(Z(t,t._roofRaster.texture.texture),t._roofRaster=null);const V=[];b(t.scene,e=>{if(!e.visible)return!0;if(!(!e.geometry||!e._visibleInFrame)){if(e.program.uniforms.roofTexture&&!z.length&&(e._roofRevealed=!0),e.program.uniforms.roofTexture&&!e._roofRevealed&&z.length){if(e._roofCoverageSignature!==t._roofRaster?.signature&&(e._roofCoverageSignature=t._roofRaster?.signature,e._roofCovered=ve(e,t,z)),!e._roofCovered){e._appearance=0;return}e._roofRevealed=!0}if(e.fadeDuration){e.fadeStart??=e.tile?.loadedAt??w;const r=Math.min(1,(w-e.fadeStart)/e.fadeDuration);e._appearance=r*r*(3-2*r),E||=r<1}V.push(e)}}),he(V);const W=n.device.createCommandEncoder(),I=[];if(_?.altitude>=3)for(const e of t._layers)e._type!=="terrain"&&b(e.root,r=>{if(!r.visible)return!0;r.geometry&&!r.tile&&r._appearance!==0&&!r.program.nightLight&&r.program.depthTest!==!1&&I.push(r)});(!n.uniformBuffer||n.uniformBuffer.size<(V.length*2+I.length+1)*256)&&(n.uniformBuffer&&Z(t,n.uniformBuffer),n.uniformBuffer=n.device.createBuffer({size:Math.max(64,V.length*4+I.length*2)*256,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),n.uniformData=new Float32Array(n.uniformBuffer.size/4));const y=n.uniformData;y.set(c.viewMatrix,0),y.set(c.projectionMatrix,16),y.set(t._roofRaster?.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],32),y.set(ce,48),y[51]=_&&_.altitude<=0?0:1,y.set(le,52);const N=_?Math.max(0,Math.min(1,(3-_.altitude)/9)):0;y[55]=N*N*(3-2*N),y.set(_?.tint||[1,1,1],56),y[59]=0,N>0&&de(t),n.uniformSlot=1,xe(t,W,I,_);const O=W.beginRenderPass({colorAttachments:[{view:n.context.getCurrentTexture().createView(),clearValue:{r:0,g:0,b:0,a:0},loadOp:"clear",storeOp:"store"}],depthStencilAttachment:{view:n.depthTexture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});O.setViewport(0,0,n.canvas.width,n.canvas.height,0,1),O.setBindGroup(1,n.sunlight.bindGroup);for(const e of V){const r=e.worldMatrix;e.texture&&(e.program.uniforms.baseTexture.value=e.texture,e.program.uniforms.opacity.value=e.opacity);const a=e.program.uniforms;a.roofTexture&&(a.roofTexture.value=t._roofRaster?.texture||n.roofFallbackTexture);const f=r[0]*(r[5]*r[10]-r[6]*r[9])-r[4]*(r[1]*r[10]-r[2]*r[9])+r[8]*(r[1]*r[6]-r[2]*r[5]);if(!Number.isFinite(f)||f===0)throw new Error("Singular 3D transform");const l=f<0?"cw":"ccw",u=e.program;u.transparent&&u._layerMaterial.doubleSided&&!e._nativeSource?(k(t,e,O,"front",l),k(t,e,O,"back",l)):k(t,e,O,u.cullMode,l)}O.end(),n.device.queue.writeBuffer(n.uniformBuffer,0,n.uniformData,0,n.uniformSlot*64),n.device.queue.submit([W.finish()]);for(const e of t._layers)e._wantedRasterTiles&&(E=Me(e)||E);(s._animatingZoom||E)&&ye(t)}export{Ae as render};
15
- //# sourceMappingURL=render.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/render.js"],
4
- "sourcesContent": ["import { computeBounds } from \"./computeBounds.js\";\nimport { traverse } from \"./traverse.js\";\nimport { updateCamera } from \"./updateCamera.js\";\nimport { updateWorldMatrix } from \"./updateWorldMatrix.js\";\nimport { destroyTexture } from './destroyTexture.js';\nimport { drawGeometry } from './drawGeometry.js';\nimport { updatePointLights } from './updatePointLights.js';\nimport { renderSunlight } from './renderSunlight.js';\nimport { sortMeshes } from \"./sortMeshes.js\";\nimport { update } from \"./update.js\";\nimport { getRasterTileSize, pruneRasterTiles } from \"./rasterTiles.js\";\nimport { getElevation } from \"./getElevation.js\";\nimport { roofCoverage } from \"./roofCoverage.js\";\n\n/**\n * Rendering owner: CSS pixels -> scene metres -> perspective camera.\n * Lights and transparent sort centers are converted into the current camera space.\n * Without raster tiles, logical map projection supplies the same static alignment.\n */\n\nexport function render(backend) {\n cancelAnimationFrame(backend._frame);\n backend._frame = null;\n if (backend._shared !== backend || !backend.renderer) return;\n const map = backend._map;\n const now = performance.now();\n let appearing = false;\n const size = map.getSize();\n if (!size.x || !size.y) return;\n if (map._animatingZoom) {\n backend._zoomTransitions ||= new Map();\n for (const animation of map.getContainer().getAnimations({ subtree: true })) {\n if (!(animation instanceof CSSTransition) || animation.transitionProperty !== 'transform' ||\n !animation.effect.target.classList.contains('leaflet-zoom-animated') ||\n backend._zoomTransitions.has(animation)) {\n continue;\n }\n const time = animation.currentTime || 0;\n animation.pause();\n backend._zoomTransitions.set(animation, { start: now, time });\n }\n // Freeze CSS between rendered frames: the compositor must not outrun the canvas.\n for (const [animation, { start, time }] of backend._zoomTransitions) {\n animation.currentTime = Math.min(animation.effect.getComputedTiming().endTime, time + now - start);\n }\n if (backend._zoomView) {\n const view = backend._zoomView;\n const proxy = [...backend._zoomTransitions.keys()].find(animation => animation.effect.target === map._proxy);\n const progress = proxy?.effect.getComputedTiming().progress ?? Math.min(1, (now - view.start) / 250);\n const targetScale = map.getZoomScale(view.targetZoom, view.zoom), scale = 1 + (targetScale - 1) * progress;\n const from = map.project(view.from, view.zoom), to = map.project(view.to, view.zoom);\n map._cameraView = { zoom: map.getScaleZoom(scale, view.zoom),\n center: map.unproject(from.add(to.subtract(from).multiplyBy(targetScale * progress / scale)), view.zoom) };\n map._updateCameraOverlays();\n }\n }\n if (!backend._size || !backend._size.equals(size)) {\n backend.renderer.width = size.x;\n backend.renderer.height = size.y;\n backend.renderer.canvas.width = Math.round(size.x * backend.renderer.dpr);\n backend.renderer.canvas.height = Math.round(size.y * backend.renderer.dpr);\n backend.renderer.canvas.style.width = `${size.x}px`;\n backend.renderer.canvas.style.height = `${size.y}px`;\n if (backend.renderer.depthTexture) destroyTexture(backend, backend.renderer.depthTexture);\n backend.renderer.depthTexture = backend.renderer.device.createTexture({\n size: [backend.renderer.canvas.width, backend.renderer.canvas.height],\n format: 'depth24plus',\n usage: GPUTextureUsage.RENDER_ATTACHMENT,\n });\n backend._size = size;\n }\n\n // Match the map's perspective, including the intermediate view of an animated zoom.\n const zoom = map._cameraView?.zoom ?? map.getZoom(), center = map._cameraView?.center ?? map.getCenter();\n const pixelsPerMeter = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\n const offset = map.project(center, zoom).subtract(map.project(backend._sceneOrigin, zoom));\n const distance = size.y * 1.5 / pixelsPerMeter;\n const target = [\n offset.x / pixelsPerMeter,\n (map._terrain3D ? getElevation(map._terrain3D, center): undefined) ?? 0,\n offset.y / pixelsPerMeter\n ];\n const pitch = map.getPitch() * Math.PI / 180;\n const bearing = map.getBearing() * Math.PI / 180;\n const camera = backend.camera;\n camera.fov = 2 * Math.atan(1 / 3) * 180 / Math.PI;\n camera.aspect = size.x / size.y;\n camera.near = Math.max(0.1, distance / 10000);\n camera.far = Math.max(10000, distance * 10);\n camera.position[0] = target[0] + Math.sin(bearing) * Math.sin(pitch) * distance;\n camera.position[1] = target[1] + Math.cos(pitch) * distance;\n camera.position[2] = target[2] + Math.cos(bearing) * Math.sin(pitch) * distance;\n camera.up[0] = -Math.sin(bearing) * Math.cos(pitch);\n camera.up[1] = Math.sin(pitch);\n camera.up[2] = -Math.cos(bearing) * Math.cos(pitch);\n camera.target[0] = target[0]; camera.target[1] = target[1]; camera.target[2] = target[2];\n // Refresh the camera view, projection and combined projection-view matrices.\n updateCamera(camera);\n updateWorldMatrix(backend.scene);\n for (const layer of backend._layers) layer._beforeRender?.();\n const sunlight = map._sunlight;\n const lightPoint = new DOMPoint(...(sunlight?.direction || [-300, 500, 300]), 0).matrixTransform(new DOMMatrix(camera.viewMatrix));\n const lightLength = Math.hypot(lightPoint.x, lightPoint.y, lightPoint.z) || 1;\n const light = [lightPoint.x / lightLength, lightPoint.y / lightLength, lightPoint.z / lightLength];\n const skyPoint = new DOMPoint(0, 1, 0, 0).matrixTransform(new DOMMatrix(camera.viewMatrix));\n const skyLength = Math.hypot(skyPoint.x, skyPoint.y, skyPoint.z) || 1;\n const sky = [skyPoint.x / skyLength, skyPoint.y / skyLength, skyPoint.z / skyLength];\n const projection = camera.projectionViewMatrix;\n const frustum = [\n [projection[3] + projection[0], projection[7] + projection[4], projection[11] + projection[8], projection[15] + projection[12]],\n [projection[3] - projection[0], projection[7] - projection[4], projection[11] - projection[8], projection[15] - projection[12]],\n [projection[3] + projection[1], projection[7] + projection[5], projection[11] + projection[9], projection[15] + projection[13]],\n [projection[3] - projection[1], projection[7] - projection[5], projection[11] - projection[9], projection[15] - projection[13]],\n [projection[2], projection[6], projection[10], projection[14]],\n [projection[3] - projection[2], projection[7] - projection[6], projection[11] - projection[10], projection[15] - projection[14]],\n ];\n const frustumLengths = [\n Math.hypot(frustum[0][0], frustum[0][1], frustum[0][2]),\n Math.hypot(frustum[1][0], frustum[1][1], frustum[1][2]),\n Math.hypot(frustum[2][0], frustum[2][1], frustum[2][2]),\n Math.hypot(frustum[3][0], frustum[3][1], frustum[3][2]),\n Math.hypot(frustum[4][0], frustum[4][1], frustum[4][2]),\n Math.hypot(frustum[5][0], frustum[5][1], frustum[5][2]),\n ];\n updateWorldMatrix(backend.scene);\n traverse(backend.scene, mesh => {\n if (!mesh.visible) return true;\n if (mesh.geometry) {\n if (!mesh.geometry.bounds) computeBounds(mesh.geometry);\n const bounds = mesh.geometry.bounds;\n const world = mesh.worldMatrix;\n const center = bounds.center;\n const x = world[0] * center[0] + world[4] * center[1] + world[8] * center[2] + world[12];\n const y = world[1] * center[0] + world[5] * center[1] + world[9] * center[2] + world[13];\n const z = world[2] * center[0] + world[6] * center[1] + world[10] * center[2] + world[14];\n const clipZ = projection[2] * x + projection[6] * y + projection[10] * z + projection[14];\n const clipW = projection[3] * x + projection[7] * y + projection[11] * z + projection[15];\n mesh._sortDepth = clipZ / clipW;\n const radius = bounds.radius * Math.max(\n Math.hypot(world[0], world[1], world[2]),\n Math.hypot(world[4], world[5], world[6]),\n Math.hypot(world[8], world[9], world[10])\n );\n mesh._visibleInFrame =\n frustum[0][0] * x + frustum[0][1] * y + frustum[0][2] * z + frustum[0][3] >= -radius * frustumLengths[0] &&\n frustum[1][0] * x + frustum[1][1] * y + frustum[1][2] * z + frustum[1][3] >= -radius * frustumLengths[1] &&\n frustum[2][0] * x + frustum[2][1] * y + frustum[2][2] * z + frustum[2][3] >= -radius * frustumLengths[2] &&\n frustum[3][0] * x + frustum[3][1] * y + frustum[3][2] * z + frustum[3][3] >= -radius * frustumLengths[3] &&\n frustum[4][0] * x + frustum[4][1] * y + frustum[4][2] * z + frustum[4][3] >= -radius * frustumLengths[4] &&\n frustum[5][0] * x + frustum[5][1] * y + frustum[5][2] * z + frustum[5][3] >= -radius * frustumLengths[5];\n if (!mesh._visibleInFrame) return;\n }\n });\n const renderer = backend.renderer;\n let rasters = [];\n if ([...backend._layers].some(layer => layer.options.roofTexture)) {\n rasters = Object.values(map._layers).filter(layer => layer._type === 'pmtiles' && layer._rasterTiles && layer.options.opacity > 0);\n const signature = rasters.map(layer =>\n `${L.Util.stamp(layer)}:${layer._rasterVersion || 0}:${layer.options.opacity}:${layer.options.zIndex}`).join('|');\n if (!backend._roofRaster || backend._roofRaster.signature !== signature &&\n (!rasters.some(layer => layer._loadingTiles) || now - backend._roofRaster.updatedAt >= 50)) {\n const tiles = rasters.flatMap(layer => [...layer._rasterTiles.values()]\n .filter(tile => tile.done && !tile.request.signal.aborted && tile.image)\n .map(tile => ({ tile, layer })));\n const zoom = tiles.length ? Math.max(...tiles.map(({ tile }) => tile.coords.z)) : map.getZoom();\n const bounds = new L.Bounds();\n for (const { tile: { coords }, layer } of tiles) {\n const size = getRasterTileSize().multiplyBy(map.getZoomScale(zoom, coords.z));\n bounds.extend(new L.Point(coords.x, coords.y).scaleBy(size));\n bounds.extend(new L.Point(coords.x + 1, coords.y + 1).scaleBy(size));\n }\n const min = bounds.min || map.project(backend._sceneOrigin, zoom);\n const size = bounds.isValid() ? bounds.getSize() : new L.Point(1, 1);\n // ponytail: cap at 4096 px; virtual textures if wide views need native detail.\n const limit = 4096;\n const scale = Math.min(1, limit / Math.max(size.x, size.y));\n const width = Math.max(1, Math.ceil(size.x * scale));\n const height = Math.max(1, Math.ceil(size.y * scale));\n const origin = map.project(backend._sceneOrigin, zoom);\n const pixels = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\n const matrix = new DOMMatrix();\n matrix.m11 = pixels / size.x; matrix.m33 = pixels / size.y;\n matrix.m41 = (origin.x - min.x) / size.x; matrix.m43 = (origin.y - min.y) / size.y;\n const texture = backend._roofRaster?.texture;\n if (texture && (texture.width !== width || texture.height !== height)) {\n destroyTexture(backend, texture.texture);\n texture.texture = renderer.device.createTexture({\n size: [width, height],\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n });\n texture.width = width;\n texture.height = height;\n }\n backend._roofRaster = {\n signature, updatedAt: now, matrix: Array.from(matrix.toFloat64Array()),\n texture: texture || {\n device: renderer.device,\n texture: renderer.device.createTexture({\n size: [width, height],\n format: 'rgba8unorm',\n usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT,\n }),\n sampler: renderer.device.createSampler({\n addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge',\n }),\n samplerOptions: { addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' },\n image: null, width, height,\n format: 'rgba8unorm', srgb: false, flipY: false, uploaded: null,\n },\n };\n // Compose the atlas on the GPU: re-uploading a large canvas stalls Firefox for hundreds of ms.\n const device = renderer.device;\n if (!renderer.roofBlit) {\n const module = device.createShaderModule({\n code: `\n @group(0) @binding(0) var source: texture_2d<f32>;\n @group(0) @binding(1) var sourceSampler: sampler;\n @group(0) @binding(2) var<uniform> opacity: f32;\n struct Varyings { @builtin(position) position: vec4f, @location(0) uv: vec2f };\n @vertex fn vertexMain(@builtin(vertex_index) index: u32) -> Varyings {\n let uv = vec2f(f32(index & 1u), f32(index >> 1u));\n return Varyings(vec4f(uv.x * 2.0 - 1.0, 1.0 - uv.y * 2.0, 0.0, 1.0), uv);\n }\n @fragment fn fragmentMain(input: Varyings) -> @location(0) vec4f {\n let color = textureSample(source, sourceSampler, input.uv);\n return vec4f(color.rgb, color.a * opacity);\n }\n `\n });\n renderer.roofBlit = {\n pipeline: device.createRenderPipeline({\n layout: 'auto',\n vertex: { module, entryPoint: 'vertexMain' },\n fragment: {\n module,\n entryPoint: 'fragmentMain',\n targets: [{\n format: 'rgba8unorm',\n blend: {\n color: { srcFactor: 'src-alpha', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },\n },\n }],\n },\n primitive: { topology: 'triangle-strip' },\n }),\n sampler: device.createSampler({ magFilter: 'linear', minFilter: 'linear' }),\n };\n }\n const opacities = new Float32Array(Math.max(1, tiles.length) * 64);\n const opacityBuffer = device.createBuffer({\n size: opacities.byteLength,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n const encoder = device.createCommandEncoder();\n const atlasPass = encoder.beginRenderPass({\n colorAttachments: [{\n view: backend._roofRaster.texture.texture.createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n }],\n });\n atlasPass.setPipeline(renderer.roofBlit.pipeline);\n tiles.sort((a, b) => (a.layer.options.zIndex || 0) - (b.layer.options.zIndex || 0) ||\n a.tile.coords.z - b.tile.coords.z);\n for (const [i, { tile, layer }] of tiles.entries()) {\n const { coords, image } = tile;\n const source = tile.texture;\n if (source.uploaded !== source.image) {\n device.queue.copyExternalImageToTexture({ source: image }, { texture: source.texture },\n [source.texture.width, source.texture.height]);\n source.uploaded = source.image;\n }\n opacities[i * 64] = layer.options.opacity;\n const tileSize = getRasterTileSize().multiplyBy(map.getZoomScale(zoom, coords.z));\n const offset = new L.Point(coords.x, coords.y).scaleBy(tileSize).subtract(min);\n const x = offset.x * width / size.x, y = offset.y * height / size.y;\n atlasPass.setViewport(x, y, Math.min(tileSize.x * width / size.x, width - x),\n Math.min(tileSize.y * height / size.y, height - y), 0, 1);\n atlasPass.setBindGroup(0, device.createBindGroup({\n layout: renderer.roofBlit.pipeline.getBindGroupLayout(0),\n entries: [\n { binding: 0, resource: source.texture.createView() },\n { binding: 1, resource: renderer.roofBlit.sampler },\n { binding: 2, resource: { buffer: opacityBuffer, offset: i * 256, size: 4 } },\n ],\n }));\n atlasPass.draw(4);\n }\n atlasPass.end();\n device.queue.writeBuffer(opacityBuffer, 0, opacities);\n device.queue.submit([encoder.finish()]);\n opacityBuffer.destroy();\n }\n } else if (backend._roofRaster) {\n destroyTexture(backend, backend._roofRaster.texture.texture);\n backend._roofRaster = null;\n }\n // Visible meshes: opaque first, transparent surfaces back-to-front.\n const meshes = [];\n traverse(backend.scene, mesh => {\n if (!mesh.visible) return true;\n if (!mesh.geometry || !mesh._visibleInFrame) return;\n if (mesh.program.uniforms.roofTexture && !rasters.length) mesh._roofRevealed = true;\n if (mesh.program.uniforms.roofTexture && !mesh._roofRevealed && rasters.length) {\n if (mesh._roofCoverageSignature !== backend._roofRaster?.signature) {\n mesh._roofCoverageSignature = backend._roofRaster?.signature;\n mesh._roofCovered = roofCoverage(mesh, backend, rasters);\n }\n if (!mesh._roofCovered) { mesh._appearance = 0; return; }\n mesh._roofRevealed = true;\n }\n if (mesh.fadeDuration) {\n mesh.fadeStart ??= mesh.tile?.loadedAt ?? now;\n const progress = Math.min(1, (now - mesh.fadeStart) / mesh.fadeDuration);\n mesh._appearance = progress * progress * (3 - 2 * progress);\n appearing ||= progress < 1;\n }\n meshes.push(mesh);\n });\n sortMeshes(meshes);\n const encoder = renderer.device.createCommandEncoder();\n // One uniform upload per frame: per-mesh writeBuffer calls dominate Firefox's GPU process.\n // Slot 0 holds the camera; 256-byte mesh slots follow (double-sided meshes use two).\n const shadowMeshes = [];\n if (sunlight?.altitude >= 3) {\n for (const layer of backend._layers) {\n if (layer._type === 'terrain') continue;\n traverse(layer.root, mesh => {\n if (!mesh.visible) return true;\n if (mesh.geometry && !mesh.tile && mesh._appearance !== 0 &&\n !mesh.program.nightLight && mesh.program.depthTest !== false) shadowMeshes.push(mesh);\n });\n }\n }\n if (!renderer.uniformBuffer || renderer.uniformBuffer.size < (meshes.length * 2 + shadowMeshes.length + 1) * 256) {\n if (renderer.uniformBuffer) destroyTexture(backend, renderer.uniformBuffer);\n renderer.uniformBuffer = renderer.device.createBuffer({\n size: Math.max(64, meshes.length * 4 + shadowMeshes.length * 2) * 256,\n usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,\n });\n renderer.uniformData = new Float32Array(renderer.uniformBuffer.size / 4);\n }\n const frameData = renderer.uniformData;\n frameData.set(camera.viewMatrix, 0);\n frameData.set(camera.projectionMatrix, 16);\n frameData.set(backend._roofRaster?.matrix || [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], 32);\n frameData.set(light, 48);\n frameData[51] = sunlight && sunlight.altitude <= 0 ? 0 : 1;\n frameData.set(sky, 52);\n const night = sunlight ? Math.max(0, Math.min(1, (3 - sunlight.altitude) / 9)) : 0;\n frameData[55] = night * night * (3 - 2 * night);\n frameData.set(sunlight?.tint || [1, 1, 1], 56);\n frameData[59] = 0;\n if (night > 0) updatePointLights(backend);\n renderer.uniformSlot = 1;\n renderSunlight(backend, encoder, shadowMeshes, sunlight);\n const pass = encoder.beginRenderPass({\n colorAttachments: [{\n view: renderer.context.getCurrentTexture().createView(),\n clearValue: { r: 0, g: 0, b: 0, a: 0 },\n loadOp: 'clear',\n storeOp: 'store',\n }],\n depthStencilAttachment: {\n view: renderer.depthTexture.createView(),\n depthClearValue: 1,\n depthLoadOp: 'clear',\n depthStoreOp: 'store',\n },\n });\n pass.setViewport(0, 0, renderer.canvas.width, renderer.canvas.height, 0, 1);\n pass.setBindGroup(1, renderer.sunlight.bindGroup);\n for (const mesh of meshes) {\n const world = mesh.worldMatrix;\n if (mesh.texture) {\n mesh.program.uniforms.baseTexture.value = mesh.texture;\n mesh.program.uniforms.opacity.value = mesh.opacity;\n }\n const uniforms = mesh.program.uniforms;\n if (uniforms.roofTexture) uniforms.roofTexture.value = backend._roofRaster?.texture || renderer.roofFallbackTexture;\n const determinant = world[0] * (world[5] * world[10] - world[6] * world[9]) -\n world[4] * (world[1] * world[10] - world[2] * world[9]) +\n world[8] * (world[1] * world[6] - world[2] * world[5]);\n if (!Number.isFinite(determinant) || determinant === 0) {\n throw new Error('Singular 3D transform');\n }\n const frontFace = determinant < 0 ? 'cw' : 'ccw';\n const program = mesh.program;\n if (program.transparent && program._layerMaterial.doubleSided && !mesh._nativeSource) {\n drawGeometry(backend, mesh, pass, 'front', frontFace);\n drawGeometry(backend, mesh, pass, 'back', frontFace);\n } else {\n drawGeometry(backend, mesh, pass, program.cullMode, frontFace);\n }\n }\n pass.end();\n renderer.device.queue.writeBuffer(renderer.uniformBuffer, 0, renderer.uniformData, 0, renderer.uniformSlot * 64);\n renderer.device.queue.submit([encoder.finish()]);\n for (const layer of backend._layers) {\n if (layer._wantedRasterTiles) appearing = pruneRasterTiles(layer) || appearing;\n }\n if (map._animatingZoom || appearing) update(backend);\n}\n"],
5
- "mappings": "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",
6
- "names": ["computeBounds", "traverse", "updateCamera", "updateWorldMatrix", "destroyTexture", "drawGeometry", "updatePointLights", "renderSunlight", "sortMeshes", "update", "getRasterTileSize", "pruneRasterTiles", "getElevation", "roofCoverage", "render", "backend", "map", "now", "appearing", "size", "animation", "time", "start", "view", "progress", "targetScale", "scale", "from", "to", "zoom", "center", "pixelsPerMeter", "offset", "distance", "target", "pitch", "bearing", "camera", "layer", "sunlight", "lightPoint", "lightLength", "light", "skyPoint", "skyLength", "sky", "projection", "frustum", "frustumLengths", "mesh", "bounds", "world", "x", "y", "z", "clipZ", "clipW", "radius", "renderer", "rasters", "signature", "tiles", "tile", "coords", "min", "width", "height", "origin", "pixels", "matrix", "texture", "device", "module", "opacities", "opacityBuffer", "encoder", "atlasPass", "a", "b", "i", "image", "source", "tileSize", "meshes", "shadowMeshes", "frameData", "night", "pass", "uniforms", "determinant", "frontFace", "program"]
7
- }
@@ -1,13 +0,0 @@
1
- import{computeBounds as R}from"./computeBounds.js";import{updateCamera as D}from"./updateCamera.js";import{resizeSunlight as O}from"./resizeSunlight.js";function z(w,L,c,l){const s=w.renderer,a=s.device,i=s.sunlight;if(!c.length||!l||l.altitude<3){if(!i.enabled)return;const e=new Float32Array(20);e.set([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),a.queue.writeBuffer(i.buffer,0,e),i.enabled=!1,i.cache=null;return}const g=i.cache;if(i.enabled&&g?.meshes.size===c.length&&l.direction.every((e,t)=>e===g.direction[t])&&c.every(e=>{const t=g.meshes.get(e),n=e.geometry.drawRange;return t&&t.world===e._worldMatrixVersion&&t.geometry===e.geometry&&t.start===n.start&&t.count===n.count&&t.appearance===(e._appearance??1)&&Object.values(e.geometry.attributes).every(r=>!r.needsUpdate)}))return;const x=new Float32Array(20);i.enabled=!0,O(w,Math.min(2048,a.limits.maxTextureDimension2D));const d=[1/0,1/0,1/0],y=[-1/0,-1/0,-1/0];for(const e of c){(!e.geometry.bounds||e.geometry.attributes.position.needsUpdate)&&R(e.geometry);const t=e.geometry.bounds,n=e.worldMatrix;let r=e._shadowBounds;if(!r||r.version!==e._worldMatrixVersion||r.bounds!==t){r=e._shadowBounds={version:e._worldMatrixVersion,bounds:t,min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]};for(let o=0;o<8;o++){const I=o&1?t.max[0]:t.min[0],S=o&2?t.max[1]:t.min[1],G=o&4?t.max[2]:t.min[2],V=n[3]*I+n[7]*S+n[11]*G+n[15];for(let f=0;f<3;f++){const _=(n[f]*I+n[f+4]*S+n[f+8]*G+n[f+12])/V;r.min[f]=Math.min(r.min[f],_),r.max[f]=Math.max(r.max[f],_)}}}for(let o=0;o<3;o++)d[o]=Math.min(d[o],r.min[o]),y[o]=Math.max(y[o],r.max[o])}d[1]=Math.min(0,d[1]);const b=Math.max(100,Math.hypot(...d.map((e,t)=>y[t]-e))),M=d.map((e,t)=>(e+y[t])/2),v={position:M.map((e,t)=>e+l.direction[t]*b*2),target:M,up:[0,0,-1],fov:45,aspect:1,near:1,far:b*5,viewMatrix:[],projectionMatrix:[],projectionViewMatrix:[]};D(v);const B=new DOMMatrix(v.viewMatrix),h=[1/0,1/0,1/0],p=[-1/0,-1/0,-1/0];for(let e=0;e<8;e++){const t=new DOMPoint(...d.map((n,r)=>e&1<<r?y[r]:n),1).matrixTransform(B);[t.x,t.y,t.z].forEach((n,r)=>{h[r]=Math.min(h[r],n-20),p[r]=Math.max(p[r],n+20)})}const m=h.map((e,t)=>p[t]-e),P=new DOMMatrix([2/m[0],0,0,0,0,2/m[1],0,0,0,0,-1/m[2],0,-(p[0]+h[0])/m[0],-(p[1]+h[1])/m[1],p[2]/m[2],1]);if(x.set(P.multiply(B).toFloat32Array()),x[16]=1,a.queue.writeBuffer(i.buffer,0,x),!i.pipeline){i.meshLayout=a.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX|GPUShaderStage.FRAGMENT,buffer:{type:"uniform",hasDynamicOffset:!0}}]}),i.depthLayout=a.createBindGroupLayout({entries:[{binding:0,visibility:GPUShaderStage.VERTEX,buffer:{type:"uniform"}}]}),i.depthBindGroup=a.createBindGroup({layout:i.depthLayout,entries:[{binding:0,resource:{buffer:i.buffer}}]});const e=a.createShaderModule({code:`
2
- struct Mesh { world: mat4x4<f32>, padding: array<vec4<f32>, 4>, highlight: vec4<f32> };
3
- @group(0) @binding(0) var<uniform> mesh: Mesh;
4
- @group(1) @binding(0) var<uniform> matrix: mat4x4<f32>;
5
- @vertex fn main(@location(0) position: vec3<f32>) -> @builtin(position) vec4<f32> {
6
- return matrix * mesh.world * vec4<f32>(position, 1.0);
7
- }
8
- @fragment fn fragmentMain(@builtin(position) position: vec4<f32>) {
9
- let noise = fract(52.9829189 * fract(dot(floor(position.xy), vec2<f32>(0.06711056, 0.00583715))));
10
- if (mesh.highlight.w < 1.0 && noise >= mesh.highlight.w) { discard; }
11
- }
12
- `});i.pipeline=a.createRenderPipeline({layout:a.createPipelineLayout({bindGroupLayouts:[i.meshLayout,i.depthLayout]}),vertex:{module:e,entryPoint:"main",buffers:[{arrayStride:12,attributes:[{shaderLocation:0,offset:0,format:"float32x3"}]}]},fragment:{module:e,entryPoint:"fragmentMain",targets:[]},primitive:{topology:"triangle-list",cullMode:"none"},depthStencil:{format:"depth32float",depthWriteEnabled:!0,depthCompare:"less",depthBias:2,depthBiasSlopeScale:2}})}const u=L.beginRenderPass({colorAttachments:[],depthStencilAttachment:{view:i.texture.createView(),depthClearValue:1,depthLoadOp:"clear",depthStoreOp:"store"}});u.setPipeline(i.pipeline),u.setBindGroup(1,i.depthBindGroup);for(const e of c){const t=s.uniformSlot++*256;s.uniformData.set(e.worldMatrix,t/4),s.uniformData[t/4+35]=e._appearance??1,e._shadowBuffer!==s.uniformBuffer&&(e._shadowBuffer=s.uniformBuffer,e._shadowBindGroup=a.createBindGroup({layout:i.meshLayout,entries:[{binding:0,resource:{buffer:s.uniformBuffer,size:144}}]}));for(const o of Object.values(e.geometry.attributes))o.needsUpdate&&(a.queue.writeBuffer(o.buffer,0,o.data),o.needsUpdate=!1);u.setBindGroup(0,e._shadowBindGroup,[t]),u.setVertexBuffer(0,e.geometry.attributes.position.buffer);const n=e.geometry.attributes.index,r=e.geometry.drawRange;n?(u.setIndexBuffer(n.buffer,n.indexFormat),u.drawIndexed(r.count,1,r.start,0,0)):u.draw(r.count,1,r.start,0)}u.end(),i.cache={direction:[...l.direction],meshes:new Map(c.map(e=>[e,{world:e._worldMatrixVersion,geometry:e.geometry,start:e.geometry.drawRange.start,count:e.geometry.drawRange.count,appearance:e._appearance??1}]))}}export{z as renderSunlight};
13
- //# sourceMappingURL=renderSunlight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/renderSunlight.js"],
4
- "sourcesContent": ["import { computeBounds } from './computeBounds.js';\nimport { updateCamera } from './updateCamera.js';\nimport { resizeSunlight } from './resizeSunlight.js';\n\n/** One shared directional depth map. Off-screen but loaded geometry can cast shadows. */\n\nexport function renderSunlight(backend, encoder, meshes, sunlight) {\n const renderer = backend.renderer, device = renderer.device, sun = renderer.sunlight;\n if (!meshes.length || !sunlight || sunlight.altitude < 3) {\n if (!sun.enabled) return;\n const values = new Float32Array(20);\n values.set([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n device.queue.writeBuffer(sun.buffer, 0, values);\n sun.enabled = false;\n sun.cache = null;\n return;\n }\n const cache = sun.cache;\n const unchanged = sun.enabled && cache?.meshes.size === meshes.length &&\n sunlight.direction.every((value, i) => value === cache.direction[i]) &&\n meshes.every(mesh => {\n const previous = cache.meshes.get(mesh), range = mesh.geometry.drawRange;\n return previous && previous.world === mesh._worldMatrixVersion && previous.geometry === mesh.geometry &&\n previous.start === range.start && previous.count === range.count &&\n previous.appearance === (mesh._appearance ?? 1) &&\n Object.values(mesh.geometry.attributes).every(attribute => !attribute.needsUpdate);\n });\n if (unchanged) return;\n const values = new Float32Array(20);\n sun.enabled = true;\n resizeSunlight(backend, Math.min(2048, device.limits.maxTextureDimension2D));\n const min = [Infinity, Infinity, Infinity], max = [-Infinity, -Infinity, -Infinity];\n for (const mesh of meshes) {\n if (!mesh.geometry.bounds || mesh.geometry.attributes.position.needsUpdate) computeBounds(mesh.geometry);\n const bounds = mesh.geometry.bounds, matrix = mesh.worldMatrix;\n let cached = mesh._shadowBounds;\n if (!cached || cached.version !== mesh._worldMatrixVersion || cached.bounds !== bounds) {\n cached = mesh._shadowBounds = { version: mesh._worldMatrixVersion, bounds,\n min: [Infinity, Infinity, Infinity], max: [-Infinity, -Infinity, -Infinity] };\n for (let i = 0; i < 8; i++) {\n const x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\n const z = i & 4 ? bounds.max[2] : bounds.min[2];\n const w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15];\n for (let axis = 0; axis < 3; axis++) {\n const value = (matrix[axis] * x + matrix[axis + 4] * y + matrix[axis + 8] * z + matrix[axis + 12]) / w;\n cached.min[axis] = Math.min(cached.min[axis], value);\n cached.max[axis] = Math.max(cached.max[axis], value);\n }\n }\n }\n for (let axis = 0; axis < 3; axis++) {\n min[axis] = Math.min(min[axis], cached.min[axis]);\n max[axis] = Math.max(max[axis], cached.max[axis]);\n }\n }\n // Include ground receivers below/around the loaded buildings and trees.\n min[1] = Math.min(0, min[1]);\n const radius = Math.max(100, Math.hypot(...min.map((v, i) => max[i] - v)));\n const center = min.map((v, i) => (v + max[i]) / 2);\n const lightCamera = {\n position: center.map((v, i) => v + sunlight.direction[i] * radius * 2),\n target: center, up: [0, 0, -1], fov: 45, aspect: 1, near: 1, far: radius * 5,\n viewMatrix: [], projectionMatrix: [], projectionViewMatrix: [],\n };\n updateCamera(lightCamera);\n const view = new DOMMatrix(lightCamera.viewMatrix);\n const low = [Infinity, Infinity, Infinity], high = [-Infinity, -Infinity, -Infinity];\n for (let i = 0; i < 8; i++) {\n const point = new DOMPoint(...min.map((v, axis) => (i & (1 << axis)) ? max[axis] : v), 1).matrixTransform(view);\n [point.x, point.y, point.z].forEach((value, axis) => {\n low[axis] = Math.min(low[axis], value - 20);\n high[axis] = Math.max(high[axis], value + 20);\n });\n }\n const span = low.map((v, i) => high[i] - v);\n const projection = new DOMMatrix([\n 2 / span[0], 0, 0, 0, 0, 2 / span[1], 0, 0, 0, 0, -1 / span[2], 0,\n -(high[0] + low[0]) / span[0], -(high[1] + low[1]) / span[1], high[2] / span[2], 1,\n ]);\n values.set(projection.multiply(view).toFloat32Array());\n values[16] = 1;\n device.queue.writeBuffer(sun.buffer, 0, values);\n if (!sun.pipeline) {\n sun.meshLayout = device.createBindGroupLayout({\n entries: [\n { binding: 0, visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT, buffer: { type: 'uniform', hasDynamicOffset: true } },\n ]\n });\n // Do not bind the sampled depth texture while it is a render attachment.\n sun.depthLayout = device.createBindGroupLayout({\n entries: [\n { binding: 0, visibility: GPUShaderStage.VERTEX, buffer: { type: 'uniform' } },\n ]\n });\n sun.depthBindGroup = device.createBindGroup({\n layout: sun.depthLayout, entries: [{ binding: 0, resource: { buffer: sun.buffer } }],\n });\n const shader = device.createShaderModule({\n code: `\n struct Mesh { world: mat4x4<f32>, padding: array<vec4<f32>, 4>, highlight: vec4<f32> };\n @group(0) @binding(0) var<uniform> mesh: Mesh;\n @group(1) @binding(0) var<uniform> matrix: mat4x4<f32>;\n @vertex fn main(@location(0) position: vec3<f32>) -> @builtin(position) vec4<f32> {\n return matrix * mesh.world * vec4<f32>(position, 1.0);\n }\n @fragment fn fragmentMain(@builtin(position) position: vec4<f32>) {\n let noise = fract(52.9829189 * fract(dot(floor(position.xy), vec2<f32>(0.06711056, 0.00583715))));\n if (mesh.highlight.w < 1.0 && noise >= mesh.highlight.w) { discard; }\n }\n ` });\n sun.pipeline = device.createRenderPipeline({\n layout: device.createPipelineLayout({ bindGroupLayouts: [sun.meshLayout, sun.depthLayout] }),\n vertex: {\n module: shader, entryPoint: 'main', buffers: [\n { arrayStride: 12, attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x3' }] },\n ]\n },\n fragment: { module: shader, entryPoint: 'fragmentMain', targets: [] },\n primitive: { topology: 'triangle-list', cullMode: 'none' },\n depthStencil: {\n format: 'depth32float', depthWriteEnabled: true, depthCompare: 'less',\n depthBias: 2, depthBiasSlopeScale: 2\n },\n });\n }\n const pass = encoder.beginRenderPass({\n colorAttachments: [],\n depthStencilAttachment: {\n view: sun.texture.createView(), depthClearValue: 1,\n depthLoadOp: 'clear', depthStoreOp: 'store'\n },\n });\n pass.setPipeline(sun.pipeline);\n pass.setBindGroup(1, sun.depthBindGroup);\n for (const mesh of meshes) {\n const offset = renderer.uniformSlot++ * 256;\n renderer.uniformData.set(mesh.worldMatrix, offset / 4);\n renderer.uniformData[offset / 4 + 35] = mesh._appearance ?? 1;\n if (mesh._shadowBuffer !== renderer.uniformBuffer) {\n mesh._shadowBuffer = renderer.uniformBuffer;\n mesh._shadowBindGroup = device.createBindGroup({\n layout: sun.meshLayout, entries: [\n { binding: 0, resource: { buffer: renderer.uniformBuffer, size: 144 } },\n ]\n });\n }\n for (const attribute of Object.values(mesh.geometry.attributes)) {\n if (attribute.needsUpdate) {\n device.queue.writeBuffer(attribute.buffer, 0, attribute.data);\n attribute.needsUpdate = false;\n }\n }\n pass.setBindGroup(0, mesh._shadowBindGroup, [offset]);\n pass.setVertexBuffer(0, mesh.geometry.attributes.position.buffer);\n const index = mesh.geometry.attributes.index, range = mesh.geometry.drawRange;\n if (index) {\n pass.setIndexBuffer(index.buffer, index.indexFormat);\n pass.drawIndexed(range.count, 1, range.start, 0, 0);\n } else pass.draw(range.count, 1, range.start, 0);\n }\n pass.end();\n sun.cache = {\n direction: [...sunlight.direction],\n meshes: new Map(meshes.map(mesh => [mesh, {\n world: mesh._worldMatrixVersion, geometry: mesh.geometry,\n start: mesh.geometry.drawRange.start, count: mesh.geometry.drawRange.count,\n appearance: mesh._appearance ?? 1,\n }])),\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["computeBounds", "updateCamera", "resizeSunlight", "renderSunlight", "backend", "encoder", "meshes", "sunlight", "renderer", "device", "sun", "values", "cache", "value", "i", "mesh", "previous", "range", "attribute", "min", "max", "bounds", "matrix", "cached", "x", "y", "z", "w", "axis", "radius", "v", "center", "lightCamera", "view", "low", "high", "point", "span", "projection", "shader", "pass", "offset", "index"]
7
- }
@@ -1,2 +0,0 @@
1
- const e=new WeakMap;export{e as renderers};
2
- //# sourceMappingURL=renderers.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/renderers.js"],
4
- "sourcesContent": ["/** Rendering owner per map; entries are removed on the last layer removal. */\nexport const renderers = new WeakMap();\n"],
5
- "mappings": "AACO,MAAMA,EAAY,IAAI",
6
- "names": ["renderers"]
7
- }
@@ -1,2 +0,0 @@
1
- import{bindSunlight as i}from"./bindSunlight.js";import{destroyTexture as o}from"./destroyTexture.js";function x(r,t){const u=r.renderer.device,e=r.renderer.sunlight;e.size!==t&&(e.texture&&o(r,e.texture),e.size=t,e.texture=u.createTexture({size:[t,t],format:"depth32float",usage:GPUTextureUsage.RENDER_ATTACHMENT|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}),i(r))}export{x as resizeSunlight};
2
- //# sourceMappingURL=resizeSunlight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/resizeSunlight.js"],
4
- "sourcesContent": ["import { bindSunlight } from './bindSunlight.js';\nimport { destroyTexture } from './destroyTexture.js';\n\n\nexport function resizeSunlight(backend, size) {\n const device = backend.renderer.device, sun = backend.renderer.sunlight;\n if (sun.size === size) return;\n if (sun.texture) destroyTexture(backend, sun.texture);\n sun.size = size;\n sun.texture = device.createTexture({\n size: [size, size], format: 'depth32float',\n usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_SRC,\n });\n bindSunlight(backend);\n}\n"],
5
- "mappings": "AAAA,OAAS,gBAAAA,MAAoB,oBAC7B,OAAS,kBAAAC,MAAsB,sBAGxB,SAASC,EAAeC,EAASC,EAAM,CAC5C,MAAMC,EAASF,EAAQ,SAAS,OAAQG,EAAMH,EAAQ,SAAS,SAC3DG,EAAI,OAASF,IACbE,EAAI,SAASL,EAAeE,EAASG,EAAI,OAAO,EACpDA,EAAI,KAAOF,EACXE,EAAI,QAAUD,EAAO,cAAc,CACjC,KAAM,CAACD,EAAMA,CAAI,EAAG,OAAQ,eAC5B,MAAO,gBAAgB,kBAAoB,gBAAgB,gBAAkB,gBAAgB,QAC/F,CAAC,EACDJ,EAAaG,CAAO,EACtB",
6
- "names": ["bindSunlight", "destroyTexture", "resizeSunlight", "backend", "size", "device", "sun"]
7
- }
@@ -1,2 +0,0 @@
1
- function O(_,L,w){const M=L._map,c=_.geometry.bounds,r=_.worldMatrix;let z=!1;for(const o of w){const f=o._tileZoom,j=M.project(L._sceneOrigin,f),v=M.options.crs.scale(f)/(4007501668557849e-8*Math.cos(L._sceneOrigin.lat*Math.PI/180)),t=[1/0,1/0],e=[-1/0,-1/0];for(let n=0;n<8;n++){const i=n&1?c.max[0]:c.min[0],h=n&2?c.max[1]:c.min[1],d=n&4?c.max[2]:c.min[2],a=j.x+(r[0]*i+r[4]*h+r[8]*d+r[12])*v,s=j.y+(r[2]*i+r[6]*h+r[10]*d+r[14])*v;t[0]=Math.min(t[0],a),t[1]=Math.min(t[1],s),e[0]=Math.max(e[0],a),e[1]=Math.max(e[1],s)}if(o.header.maxLat!==void 0&&o.header.minLon!==void 0&&o.header.minLat!==void 0&&o.header.maxLon!==void 0){const n=M.project([o.header.maxLat,o.header.minLon],f),i=M.project([o.header.minLat,o.header.maxLon],f);if(t[0]=Math.max(t[0],n.x),t[1]=Math.max(t[1],n.y),e[0]=Math.min(e[0],i.x),e[1]=Math.min(e[1],i.y),t[0]>=e[0]||t[1]>=e[1])continue}z=!0;let g=[[t[0],t[1],e[0],e[1]]];for(const n of o._rasterTiles.values()){if(!n.done&&!n.error)continue;const i=256*2**(f-n.coords.z),h=n.coords.x*i,d=n.coords.y*i;if(g=g.flatMap(([a,s,m,x])=>{const y=Math.max(a,h),u=Math.max(s,d),I=Math.min(m,h+i),l=Math.min(x,d+i);if(y>=I||u>=l)return[[a,s,m,x]];const p=[];return s<u&&p.push([a,s,m,u]),l<x&&p.push([a,l,m,x]),a<y&&p.push([a,u,y,l]),I<m&&p.push([I,u,m,l]),p}),!g.length)return!0}}return!z}export{O as roofCoverage};
2
- //# sourceMappingURL=roofCoverage.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/roofCoverage.js"],
4
- "sourcesContent": ["/** Test the mesh's ground footprint against loaded imagery, including coarse parent tiles. */\r\nexport function roofCoverage(mesh, backend, rasters) {\r\n const map = backend._map, bounds = mesh.geometry.bounds, world = mesh.worldMatrix;\r\n let intersectsArchive = false;\r\n for (const layer of rasters) {\r\n const zoom = layer._tileZoom, origin = map.project(backend._sceneOrigin, zoom);\r\n const scale = map.options.crs.scale(zoom) / (40075016.68557849 * Math.cos(backend._sceneOrigin.lat * Math.PI / 180));\r\n const min = [Infinity, Infinity], max = [-Infinity, -Infinity];\r\n for (let i = 0; i < 8; i++) {\r\n const x = i & 1 ? bounds.max[0] : bounds.min[0], y = i & 2 ? bounds.max[1] : bounds.min[1];\r\n const z = i & 4 ? bounds.max[2] : bounds.min[2];\r\n const px = origin.x + (world[0] * x + world[4] * y + world[8] * z + world[12]) * scale;\r\n const py = origin.y + (world[2] * x + world[6] * y + world[10] * z + world[14]) * scale;\r\n min[0] = Math.min(min[0], px); min[1] = Math.min(min[1], py);\r\n max[0] = Math.max(max[0], px); max[1] = Math.max(max[1], py);\r\n }\r\n if (layer.header.maxLat !== undefined && layer.header.minLon !== undefined &&\r\n layer.header.minLat !== undefined && layer.header.maxLon !== undefined) {\r\n const nw = map.project([layer.header.maxLat, layer.header.minLon], zoom);\r\n const se = map.project([layer.header.minLat, layer.header.maxLon], zoom);\r\n min[0] = Math.max(min[0], nw.x); min[1] = Math.max(min[1], nw.y);\r\n max[0] = Math.min(max[0], se.x); max[1] = Math.min(max[1], se.y);\r\n if (min[0] >= max[0] || min[1] >= max[1]) continue;\r\n }\r\n intersectsArchive = true;\r\n let remaining = [[min[0], min[1], max[0], max[1]]];\r\n for (const tile of layer._rasterTiles.values()) {\r\n // Failed imagery already reports an error; do not hide the building indefinitely.\r\n if (!tile.done && !tile.error) continue;\r\n const size = 256 * 2 ** (zoom - tile.coords.z);\r\n const left = tile.coords.x * size, top = tile.coords.y * size;\r\n remaining = remaining.flatMap(([x0, y0, x1, y1]) => {\r\n const l = Math.max(x0, left), t = Math.max(y0, top);\r\n const r = Math.min(x1, left + size), b = Math.min(y1, top + size);\r\n if (l >= r || t >= b) return [[x0, y0, x1, y1]];\r\n const pieces = [];\r\n if (y0 < t) pieces.push([x0, y0, x1, t]);\r\n if (b < y1) pieces.push([x0, b, x1, y1]);\r\n if (x0 < l) pieces.push([x0, t, l, b]);\r\n if (r < x1) pieces.push([r, t, x1, b]);\r\n return pieces;\r\n });\r\n if (!remaining.length) return true;\r\n }\r\n }\r\n return !intersectsArchive;\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["roofCoverage", "mesh", "backend", "rasters", "map", "bounds", "world", "intersectsArchive", "layer", "zoom", "origin", "scale", "min", "max", "i", "x", "y", "z", "px", "py", "nw", "se", "remaining", "tile", "size", "left", "top", "x0", "y0", "x1", "y1", "l", "t", "r", "b", "pieces"]
7
- }
@@ -1,2 +0,0 @@
1
- function b(y){const d=[],m=[],x=[];for(const{points:h,lengths:n}of y)for(let o=1;o<h.length;o++){const t=h[o-1],g=h[o],a=g[0]-t[0],l=g[1]-t[1],i=n[o]-n[o-1];if(!i)continue;const s=-l/i*2.5,c=a/i*2.5;for(let f=Math.floor(n[o-1]/30)*30;f<n[o];f+=30){const p=Math.max(0,(f-n[o-1])/i),u=Math.min(1,(f+18-n[o-1])/i);if(u<=p)continue;const e=[t[0]+a*p,t[1]+l*p],r=[t[0]+a*u,t[1]+l*u],z=t[2]+.4;for(const M of[[e[0]-s,e[1]-c],[e[0]+s,e[1]+c],[r[0]+s,r[1]+c],[e[0]-s,e[1]-c],[r[0]+s,r[1]+c],[r[0]-s,r[1]-c]])d.push(M[0],z,M[1]),m.push(0,1,0),x.push(.08,.7,.85)}}return{position:d,normal:m,color:x}}export{b as routeGeometry};
2
- //# sourceMappingURL=routeGeometry.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/routeGeometry.js"],
4
- "sourcesContent": ["/** Dashed lane outline, in layer-local metres. */\n\nexport function routeGeometry(lanes) {\n const position = [], normal = [], color = [];\n for (const { points, lengths } of lanes) for (let i = 1; i < points.length; i++) {\n const a = points[i - 1], b = points[i];\n const dx = b[0] - a[0], dz = b[1] - a[1], length = lengths[i] - lengths[i - 1];\n if (!length) continue;\n const x = -dz / length * 2.5, z = dx / length * 2.5;\n for (let distance = Math.floor(lengths[i - 1] / 30) * 30; distance < lengths[i]; distance += 30) {\n const start = Math.max(0, (distance - lengths[i - 1]) / length);\n const end = Math.min(1, (distance + 18 - lengths[i - 1]) / length);\n if (end <= start) continue;\n const p = [a[0] + dx * start, a[1] + dz * start], q = [a[0] + dx * end, a[1] + dz * end], y = a[2] + 0.4;\n for (const point of [[p[0] - x, p[1] - z], [p[0] + x, p[1] + z], [q[0] + x, q[1] + z],\n [p[0] - x, p[1] - z], [q[0] + x, q[1] + z], [q[0] - x, q[1] - z]]) {\n position.push(point[0], y, point[1]); normal.push(0, 1, 0); color.push(0.08, 0.7, 0.85);\n }\n }\n }\n return { position, normal, color };\n}\n"],
5
- "mappings": "AAEO,SAASA,EAAcC,EAAO,CACnC,MAAMC,EAAW,CAAC,EAAGC,EAAS,CAAC,EAAGC,EAAQ,CAAC,EAC3C,SAAW,CAAE,OAAAC,EAAQ,QAAAC,CAAQ,IAAKL,EAAO,QAASM,EAAI,EAAGA,EAAIF,EAAO,OAAQE,IAAK,CAC/E,MAAMC,EAAIH,EAAOE,EAAI,CAAC,EAAGE,EAAIJ,EAAOE,CAAC,EAC/BG,EAAKD,EAAE,CAAC,EAAID,EAAE,CAAC,EAAGG,EAAKF,EAAE,CAAC,EAAID,EAAE,CAAC,EAAGI,EAASN,EAAQC,CAAC,EAAID,EAAQC,EAAI,CAAC,EAC7E,GAAI,CAACK,EAAQ,SACb,MAAMC,EAAI,CAACF,EAAKC,EAAS,IAAKE,EAAIJ,EAAKE,EAAS,IAChD,QAASG,EAAW,KAAK,MAAMT,EAAQC,EAAI,CAAC,EAAI,EAAE,EAAI,GAAIQ,EAAWT,EAAQC,CAAC,EAAGQ,GAAY,GAAI,CAC/F,MAAMC,EAAQ,KAAK,IAAI,GAAID,EAAWT,EAAQC,EAAI,CAAC,GAAKK,CAAM,EACxDK,EAAM,KAAK,IAAI,GAAIF,EAAW,GAAKT,EAAQC,EAAI,CAAC,GAAKK,CAAM,EACjE,GAAIK,GAAOD,EAAO,SAClB,MAAME,EAAI,CAACV,EAAE,CAAC,EAAIE,EAAKM,EAAOR,EAAE,CAAC,EAAIG,EAAKK,CAAK,EAAGG,EAAI,CAACX,EAAE,CAAC,EAAIE,EAAKO,EAAKT,EAAE,CAAC,EAAIG,EAAKM,CAAG,EAAGG,EAAIZ,EAAE,CAAC,EAAI,GACrG,UAAWa,IAAS,CAAC,CAACH,EAAE,CAAC,EAAIL,EAAGK,EAAE,CAAC,EAAIJ,CAAC,EAAG,CAACI,EAAE,CAAC,EAAIL,EAAGK,EAAE,CAAC,EAAIJ,CAAC,EAAG,CAACK,EAAE,CAAC,EAAIN,EAAGM,EAAE,CAAC,EAAIL,CAAC,EACpF,CAACI,EAAE,CAAC,EAAIL,EAAGK,EAAE,CAAC,EAAIJ,CAAC,EAAG,CAACK,EAAE,CAAC,EAAIN,EAAGM,EAAE,CAAC,EAAIL,CAAC,EAAG,CAACK,EAAE,CAAC,EAAIN,EAAGM,EAAE,CAAC,EAAIL,CAAC,CAAC,EAC9DZ,EAAS,KAAKmB,EAAM,CAAC,EAAGD,EAAGC,EAAM,CAAC,CAAC,EAAGlB,EAAO,KAAK,EAAG,EAAG,CAAC,EAAGC,EAAM,KAAK,IAAM,GAAK,GAAI,CAE1F,CACF,CACA,MAAO,CAAE,SAAAF,EAAU,OAAAC,EAAQ,MAAAC,CAAM,CACnC",
6
- "names": ["routeGeometry", "lanes", "position", "normal", "color", "points", "lengths", "i", "a", "b", "dx", "dz", "length", "x", "z", "distance", "start", "end", "p", "q", "y", "point"]
7
- }
@@ -1,2 +0,0 @@
1
- function p(d,{timeZone:l,duration:a,services:u}){const n=new Date(d);if(!Number.isFinite(n.getTime()))throw new Error("Invalid date");const f=new Intl.DateTimeFormat("en-GB",{timeZone:l,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hourCycle:"h23"}),e=Object.fromEntries(f.formatToParts(n).filter(t=>t.type!=="literal").map(t=>[t.type,Number(t.value)])),o=e.hour*60+e.minute+(e.second+n.getUTCMilliseconds()/1e3)/60,y=new Date(Date.UTC(e.year,e.month-1,e.day)).getUTCDay(),c=t=>t.split(":").reduce((i,r)=>i*60+Number(r)),m=[];for(const{from:t,to:i,every:r=1/0,months:h,weekdays:g}of u)if(!(h?.includes(e.month)===!1||g?.includes(y)===!1))for(let s=c(t);s<=c(i);s+=r)m.push(s);return m.sort((t,i)=>t-i).filter(t=>o>=t&&o<t+a).map(t=>({id:`${e.year}-${e.month}-${e.day}-${t}`,departure:`${String(Math.floor(t/60)).padStart(2,"0")}:${String(t%60).padStart(2,"0")}`,progress:(o-t)/a}))}export{p as scheduledTrips};
2
- //# sourceMappingURL=scheduledTrips.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/scheduledTrips.js"],
4
- "sourcesContent": ["/**\n * Trips of a frequency-based timetable (like GTFS frequencies.txt) underway at `date`, in the timetable's local time.\n * @param {{timeZone: string, duration: number, services: Array<{from: string, to: string, every?: number, months?: number[], weekdays?: number[]}>}} timetable\n * `duration` and `every` are minutes; `from`/`to` are 'HH:MM' first/last departures; months are 1-12, weekdays 0 (Sunday)-6.\n * @returns {Array<{id: string, departure: string, progress: number}>} `progress` is 0-1 along the lane.\n */\n\nexport function scheduledTrips(date, { timeZone, duration, services }) {\n const time = new Date(date);\n if (!Number.isFinite(time.getTime())) throw new Error('Invalid date');\n const clock = new Intl.DateTimeFormat('en-GB', {\n timeZone, year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23',\n });\n const parts = Object.fromEntries(clock.formatToParts(time).filter(p => p.type !== 'literal').map(p => [p.type, Number(p.value)]));\n const minute = parts.hour * 60 + parts.minute + (parts.second + time.getUTCMilliseconds() / 1000) / 60;\n const weekday = new Date(Date.UTC(parts.year, parts.month - 1, parts.day)).getUTCDay();\n const minutes = clockTime => clockTime.split(':').reduce((hours, value) => hours * 60 + Number(value));\n const departures = [];\n for (const { from, to, every = Infinity, months, weekdays } of services) {\n if (months?.includes(parts.month) === false || weekdays?.includes(weekday) === false) continue;\n for (let departure = minutes(from); departure <= minutes(to); departure += every) departures.push(departure);\n }\n return departures.sort((a, b) => a - b).filter(departure => minute >= departure && minute < departure + duration).map(departure => ({\n id: `${parts.year}-${parts.month}-${parts.day}-${departure}`,\n departure: `${String(Math.floor(departure / 60)).padStart(2, '0')}:${String(departure % 60).padStart(2, '0')}`,\n progress: (minute - departure) / duration,\n }));\n}\n"],
5
- "mappings": "AAOO,SAASA,EAAeC,EAAM,CAAE,SAAAC,EAAU,SAAAC,EAAU,SAAAC,CAAS,EAAG,CACrE,MAAMC,EAAO,IAAI,KAAKJ,CAAI,EAC1B,GAAI,CAAC,OAAO,SAASI,EAAK,QAAQ,CAAC,EAAG,MAAM,IAAI,MAAM,cAAc,EACpE,MAAMC,EAAQ,IAAI,KAAK,eAAe,QAAS,CAC7C,SAAAJ,EAAU,KAAM,UAAW,MAAO,UAAW,IAAK,UAClD,KAAM,UAAW,OAAQ,UAAW,OAAQ,UAAW,UAAW,KACpE,CAAC,EACKK,EAAQ,OAAO,YAAYD,EAAM,cAAcD,CAAI,EAAE,OAAOG,GAAKA,EAAE,OAAS,SAAS,EAAE,IAAIA,GAAK,CAACA,EAAE,KAAM,OAAOA,EAAE,KAAK,CAAC,CAAC,CAAC,EAC1HC,EAASF,EAAM,KAAO,GAAKA,EAAM,QAAUA,EAAM,OAASF,EAAK,mBAAmB,EAAI,KAAQ,GAC9FK,EAAU,IAAI,KAAK,KAAK,IAAIH,EAAM,KAAMA,EAAM,MAAQ,EAAGA,EAAM,GAAG,CAAC,EAAE,UAAU,EAC/EI,EAAUC,GAAaA,EAAU,MAAM,GAAG,EAAE,OAAO,CAACC,EAAOC,IAAUD,EAAQ,GAAK,OAAOC,CAAK,CAAC,EAC/FC,EAAa,CAAC,EACpB,SAAW,CAAE,KAAAC,EAAM,GAAAC,EAAI,MAAAC,EAAQ,IAAU,OAAAC,EAAQ,SAAAC,CAAS,IAAKhB,EAC7D,GAAI,EAAAe,GAAQ,SAASZ,EAAM,KAAK,IAAM,IAASa,GAAU,SAASV,CAAO,IAAM,IAC/E,QAASW,EAAYV,EAAQK,CAAI,EAAGK,GAAaV,EAAQM,CAAE,EAAGI,GAAaH,EAAOH,EAAW,KAAKM,CAAS,EAE7G,OAAON,EAAW,KAAK,CAACO,EAAGC,IAAMD,EAAIC,CAAC,EAAE,OAAOF,GAAaZ,GAAUY,GAAaZ,EAASY,EAAYlB,CAAQ,EAAE,IAAIkB,IAAc,CAClI,GAAI,GAAGd,EAAM,IAAI,IAAIA,EAAM,KAAK,IAAIA,EAAM,GAAG,IAAIc,CAAS,GAC1D,UAAW,GAAG,OAAO,KAAK,MAAMA,EAAY,EAAE,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAY,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,GAC5G,UAAWZ,EAASY,GAAalB,CACnC,EAAE,CACJ",
6
- "names": ["scheduledTrips", "date", "timeZone", "duration", "services", "time", "clock", "parts", "p", "minute", "weekday", "minutes", "clockTime", "hours", "value", "departures", "from", "to", "every", "months", "weekdays", "departure", "a", "b"]
7
- }
@@ -1,2 +0,0 @@
1
- import{releaseArea as a}from"./releaseArea.js";import{updateArea as r}from"./updateArea.js";function p(o,t){o.options.data=t,delete o.options.url;for(const e of o._areas.values())a(o,e);return o._areas.clear(),r(o),o}export{p as setGeoJSONData};
2
- //# sourceMappingURL=setGeoJSONData.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setGeoJSONData.js"],
4
- "sourcesContent": ["import { releaseArea } from './releaseArea.js';\nimport { updateArea } from './updateArea.js';\n\nexport function setGeoJSONData(layer, data) {\n layer.options.data = data;\n delete layer.options.url;\n for (const area of layer._areas.values()) releaseArea(layer, area);\n layer._areas.clear();\n updateArea(layer);\n return layer;\n}\n"],
5
- "mappings": "AAAA,OAAS,eAAAA,MAAmB,mBAC5B,OAAS,cAAAC,MAAkB,kBAEpB,SAASC,EAAeC,EAAOC,EAAM,CAC1CD,EAAM,QAAQ,KAAOC,EACrB,OAAOD,EAAM,QAAQ,IACrB,UAAWE,KAAQF,EAAM,OAAO,OAAO,EAAGH,EAAYG,EAAOE,CAAI,EACjE,OAAAF,EAAM,OAAO,MAAM,EACnBF,EAAWE,CAAK,EACTA,CACT",
6
- "names": ["releaseArea", "updateArea", "setGeoJSONData", "layer", "data", "area"]
7
- }
@@ -1,2 +0,0 @@
1
- import{update as t}from"./update.js";function l(i,h){h?.model&&(h=null),!(i.highlightedFeature?.mesh===h?.mesh&&i.highlightedFeature?.vertexStart===h?.vertexStart)&&(i.highlightedFeature&&(i.highlightedFeature.mesh.highlight=null),i.highlightedFeature=h,h&&(h.mesh.highlight=[h.vertexStart,h.vertexEnd]),t(i))}export{l as setHighlight};
2
- //# sourceMappingURL=setHighlight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setHighlight.js"],
4
- "sourcesContent": ["import { update } from './update.js';\n\n/** Highlight a source vertex range in the shader; vertex colors stay untouched. */\n\nexport function setHighlight(backend, feature) {\n if (feature?.model) feature = null;\n if (backend.highlightedFeature?.mesh === feature?.mesh &&\n backend.highlightedFeature?.vertexStart === feature?.vertexStart) return;\n if (backend.highlightedFeature) backend.highlightedFeature.mesh.highlight = null;\n backend.highlightedFeature = feature;\n if (feature) feature.mesh.highlight = [feature.vertexStart, feature.vertexEnd];\n update(backend);\n}\n"],
5
- "mappings": "AAAA,OAAS,UAAAA,MAAc,cAIhB,SAASC,EAAaC,EAASC,EAAS,CACzCA,GAAS,QAAOA,EAAU,MAC1B,EAAAD,EAAQ,oBAAoB,OAASC,GAAS,MAChDD,EAAQ,oBAAoB,cAAgBC,GAAS,eACnDD,EAAQ,qBAAoBA,EAAQ,mBAAmB,KAAK,UAAY,MAC5EA,EAAQ,mBAAqBC,EACzBA,IAASA,EAAQ,KAAK,UAAY,CAACA,EAAQ,YAAaA,EAAQ,SAAS,GAC7EH,EAAOE,CAAO,EAChB",
6
- "names": ["update", "setHighlight", "backend", "feature"]
7
- }
@@ -1,2 +0,0 @@
1
- import{setRasterOpacity as o}from"./rasterTiles.js";function p(t,i){return t.options.opacity=i,o(t,i),t}export{p as setPMTileOpacity};
2
- //# sourceMappingURL=setPMTileOpacity.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setPMTileOpacity.js"],
4
- "sourcesContent": ["import { setRasterOpacity } from './rasterTiles.js';\n\nexport function setPMTileOpacity(backend, opacity) {\n backend.options.opacity = opacity;\n setRasterOpacity(backend, opacity);\n return backend;\n}\n"],
5
- "mappings": "AAAA,OAAS,oBAAAA,MAAwB,mBAE1B,SAASC,EAAiBC,EAASC,EAAS,CACjD,OAAAD,EAAQ,QAAQ,QAAUC,EAC1BH,EAAiBE,EAASC,CAAO,EAC1BD,CACT",
6
- "names": ["setRasterOpacity", "setPMTileOpacity", "backend", "opacity"]
7
- }
@@ -1,2 +0,0 @@
1
- import{setRasterZIndex as o}from"./rasterTiles.js";function i(t,e){return t.options.zIndex=e,o(t,e),t}export{i as setPMTileZIndex};
2
- //# sourceMappingURL=setPMTileZIndex.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setPMTileZIndex.js"],
4
- "sourcesContent": ["import { setRasterZIndex } from './rasterTiles.js';\n\nexport function setPMTileZIndex(backend, zIndex) {\n backend.options.zIndex = zIndex;\n setRasterZIndex(backend, zIndex);\n return backend;\n}\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,mBAEzB,SAASC,EAAgBC,EAASC,EAAQ,CAC/C,OAAAD,EAAQ,QAAQ,OAASC,EACzBH,EAAgBE,EAASC,CAAM,EACxBD,CACT",
6
- "names": ["setRasterZIndex", "setPMTileZIndex", "backend", "zIndex"]
7
- }
@@ -1,2 +0,0 @@
1
- function t(i,r){i.parent&&i.parent.children.splice(i.parent.children.indexOf(i),1),i.parent=r,r&&r.children.push(i)}export{t as setParent};
2
- //# sourceMappingURL=setParent.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setParent.js"],
4
- "sourcesContent": ["/** Reparent/detach scene data without drawing or disposing GPU resources. */\n\nexport function setParent(node, parent) {\n if (node.parent) node.parent.children.splice(node.parent.children.indexOf(node), 1);\n node.parent = parent;\n if (parent) parent.children.push(node);\n}\n"],
5
- "mappings": "AAEO,SAASA,EAAUC,EAAMC,EAAQ,CAClCD,EAAK,QAAQA,EAAK,OAAO,SAAS,OAAOA,EAAK,OAAO,SAAS,QAAQA,CAAI,EAAG,CAAC,EAClFA,EAAK,OAASC,EACVA,GAAQA,EAAO,SAAS,KAAKD,CAAI,CACvC",
6
- "names": ["setParent", "node", "parent"]
7
- }
@@ -1,2 +0,0 @@
1
- import{getElevation as r}from"./getElevation.js";function s(t){if(!t.root||!t.location)return;t._terrainBaseY??=t.root.position[1];const o=t._map?._terrain3D,i=o&&r(o,t.location),n=Number.isFinite(i)?t.options.terrainOffset??0:0;t.root.position[1]=t._terrainBaseY+(i??0)+n}export{s as setTerrainHeight};
2
- //# sourceMappingURL=setTerrainHeight.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setTerrainHeight.js"],
4
- "sourcesContent": ["import { getElevation } from './getElevation.js';\r\n\r\nexport function setTerrainHeight(layer) {\r\n if (!layer.root || !layer.location) return;\r\n layer._terrainBaseY ??= layer.root.position[1];\r\n const terrain = layer._map?._terrain3D;\r\n const elevation = terrain && getElevation(terrain, layer.location);\r\n const offset = Number.isFinite(elevation) ? layer.options.terrainOffset ?? 0 : 0;\r\n layer.root.position[1] = layer._terrainBaseY + (elevation ?? 0) + offset;\r\n}\r\n"],
5
- "mappings": "AAAA,OAAS,gBAAAA,MAAoB,oBAEtB,SAASC,EAAiBC,EAAO,CACtC,GAAI,CAACA,EAAM,MAAQ,CAACA,EAAM,SAAU,OACpCA,EAAM,gBAAkBA,EAAM,KAAK,SAAS,CAAC,EAC7C,MAAMC,EAAUD,EAAM,MAAM,WACtBE,EAAYD,GAAWH,EAAaG,EAASD,EAAM,QAAQ,EAC3DG,EAAS,OAAO,SAASD,CAAS,EAAIF,EAAM,QAAQ,eAAiB,EAAI,EAC/EA,EAAM,KAAK,SAAS,CAAC,EAAIA,EAAM,eAAiBE,GAAa,GAAKC,CACpE",
6
- "names": ["getElevation", "setTerrainHeight", "layer", "terrain", "elevation", "offset"]
7
- }
@@ -1,2 +0,0 @@
1
- function i(r,o,a,t){for(let e=o;e<a;e++)r.geometry.attributes.color.data.set([t.r,t.g,t.b],e*3);r.geometry.attributes.color.needsUpdate=!0}export{i as setVertexColor};
2
- //# sourceMappingURL=setVertexColor.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/setVertexColor.js"],
4
- "sourcesContent": ["/**\n * Paints the vertices `[start, end)` of a mesh and marks its color buffer dirty.\n * @param {Object} mesh Layer-created mesh with a color attribute.\n * @param {number} start Inclusive vertex index, not an offset into the RGB array.\n * @param {number} end Exclusive vertex index.\n * @param {Object} color sRGB {r,g,b}, typically from parseColor().\n */\n\nexport function setVertexColor(mesh, start, end, color) {\n for (let i = start; i < end; i++) {\n mesh.geometry.attributes.color.data.set([color.r, color.g, color.b], i * 3);\n }\n mesh.geometry.attributes.color.needsUpdate = true;\n}\n"],
5
- "mappings": "AAQO,SAASA,EAAeC,EAAMC,EAAOC,EAAKC,EAAO,CACtD,QAASC,EAAIH,EAAOG,EAAIF,EAAKE,IAC3BJ,EAAK,SAAS,WAAW,MAAM,KAAK,IAAI,CAACG,EAAM,EAAGA,EAAM,EAAGA,EAAM,CAAC,EAAGC,EAAI,CAAC,EAE5EJ,EAAK,SAAS,WAAW,MAAM,YAAc,EAC/C",
6
- "names": ["setVertexColor", "mesh", "start", "end", "color", "i"]
7
- }