leaflet-city-mapper 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -3
- package/cucumber.mjs +1 -1
- package/dist/leaflet-city-mapper.js +3 -1
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/package.json +2 -1
- package/src/archives/decodeDirectory.js +32 -0
- package/src/archives/decodeHeader.js +19 -0
- package/src/archives/getZxy.js +75 -0
- package/src/archives/loadDirectory.js +7 -0
- package/src/archives/tileId.js +19 -0
- package/src/archives/varint.js +15 -0
- package/src/camera/angles.js +6 -0
- package/src/camera/animationPoint.js +8 -0
- package/src/camera/cameraMapReady.js +8 -0
- package/src/camera/cancelCameraAnimation.js +11 -0
- package/src/camera/cleanupCameraMap.js +11 -0
- package/src/camera/constrainCameraToBounds.js +3 -0
- package/src/camera/displayPoint.js +3 -0
- package/src/camera/fitCameraBounds.js +48 -0
- package/src/camera/groundBounds.js +11 -0
- package/src/camera/initializeCameraMap.js +25 -0
- package/src/camera/mapAnimateCamera.js +17 -0
- package/src/camera/mapCamera.js +123 -0
- package/src/camera/mapContainerPointToLayerPoint.js +7 -0
- package/src/camera/mapGetBearing.js +1 -0
- package/src/camera/mapGetBounds.js +14 -0
- package/src/camera/mapGetBoundsCenterZoom.js +7 -0
- package/src/camera/mapGetBoundsZoom.js +14 -0
- package/src/camera/mapGetCenterLayerPoint.js +5 -0
- package/src/camera/mapGetPitch.js +1 -0
- package/src/camera/mapLayerPointToContainerPoint.js +7 -0
- package/src/camera/mapLimitCenter.js +12 -0
- package/src/camera/mapLimitOffset.js +10 -0
- package/src/camera/mapPanBy.js +9 -0
- package/src/camera/mapPanInside.js +14 -0
- package/src/camera/mapResetNorth.js +1 -0
- package/src/camera/mapResetNorthPitch.js +1 -0
- package/src/camera/mapSetBearing.js +1 -0
- package/src/camera/mapSetPitch.js +1 -0
- package/src/camera/mapSetPitchAndBearing.js +14 -0
- package/src/camera/mapSetZoomAround.js +11 -0
- package/src/camera/mapStopPitchBearingAnimation.js +6 -0
- package/src/camera/mapTryAnimatedPan.js +9 -0
- package/src/camera/mapUpdateCameraOverlays.js +7 -0
- package/src/camera/pointOf.js +3 -0
- package/src/camera/project.js +20 -0
- package/src/camera/runCameraAnimations.js +28 -0
- package/src/camera/scheduleCameraAnimation.js +8 -0
- package/src/camera/updateSky.js +16 -0
- package/src/camera/verticalGroundY.js +4 -0
- package/src/collision/collectMeshes.js +5 -0
- package/src/collision/collider.js +63 -0
- package/src/collision/intersectMeshes.js +133 -0
- package/src/collision/sortHits.js +23 -0
- package/src/constants/Compass.js +7 -0
- package/src/constants/ContainerResize.js +7 -0
- package/src/constants/HEIGHT.js +1 -0
- package/src/constants/PitchDrag.js +7 -0
- package/src/constants/ShiftRotate.js +7 -0
- package/src/constants/TILE_RADIUS.js +1 -0
- package/src/constants/TILE_SIZE.js +1 -0
- package/src/constants/TouchMode.js +6 -0
- package/src/constants/attachState.js +1 -0
- package/src/constants/cameraControlsState.js +1 -0
- package/src/constants/cityMapper.js +6 -0
- package/src/constants/dark.js +1 -0
- package/src/constants/elevationWGSL.js +27 -0
- package/src/constants/glass.js +1 -0
- package/src/constants/indexState.js +1 -0
- package/src/constants/mapCameraState.js +1 -0
- package/src/constants/nativeEventMaps.js +1 -0
- package/src/constants/nativeLayerState.js +1 -0
- package/src/constants/nativeMethodHandlers.js +31 -0
- package/src/constants/onMapChangeState.js +1 -0
- package/src/constants/onZoomAnimState.js +1 -0
- package/src/constants/parts.js +19 -0
- package/src/constants/pendingUpdates.js +1 -0
- package/src/constants/pumpState.js +1 -0
- package/src/constants/ringDirections.js +10 -0
- package/src/constants/roundProfile.js +1 -0
- package/src/constants/shirt.js +1 -0
- package/src/constants/skin.js +2 -0
- package/src/constants/trafficShader.js +49 -0
- package/src/constants/trousers.js +1 -0
- package/src/constants/tyre.js +1 -0
- package/src/constants/underEntryState.js +1 -0
- package/src/constants/vehicles.js +40 -0
- package/src/controls/acceptPitchDrag.js +4 -0
- package/src/controls/acceptRotateDrag.js +3 -0
- package/src/controls/adjustCameraDrag.js +10 -0
- package/src/controls/cameraControls.js +60 -0
- package/src/controls/cameraDragClick.js +9 -0
- package/src/controls/cameraDragContextMenu.js +8 -0
- package/src/controls/cameraDragDown.js +20 -0
- package/src/controls/cameraDragEnd.js +6 -0
- package/src/controls/cameraDragMove.js +23 -0
- package/src/controls/changeCameraTouch.js +14 -0
- package/src/controls/cleanupCameraTouch.js +24 -0
- package/src/controls/compassAddHooks.js +15 -0
- package/src/controls/compassOrientation.js +6 -0
- package/src/controls/compassRemoveHooks.js +5 -0
- package/src/controls/containerResizeAddHooks.js +8 -0
- package/src/controls/containerResizeRemoveHooks.js +5 -0
- package/src/controls/dragCamera.js +22 -0
- package/src/controls/editable.js +3 -0
- package/src/controls/endAllCameraDrags.js +7 -0
- package/src/controls/endAllCameraTouches.js +7 -0
- package/src/controls/endCameraTouch.js +11 -0
- package/src/controls/endCameraTouchEvent.js +5 -0
- package/src/controls/finishCameraDrag.js +9 -0
- package/src/controls/finishCompassPermission.js +16 -0
- package/src/controls/loadCameraControls.js +9 -0
- package/src/controls/moveCameraTouch.js +22 -0
- package/src/controls/notifyCameraTouchChange.js +1 -0
- package/src/controls/pitchDragAddHooks.js +6 -0
- package/src/controls/pitchDragRemoveHooks.js +5 -0
- package/src/controls/refreshRotateControl.js +7 -0
- package/src/controls/refreshRotateFocus.js +5 -0
- package/src/controls/removeCameraDrag.js +23 -0
- package/src/controls/resizeMap.js +3 -0
- package/src/controls/rotateButtonClick.js +7 -0
- package/src/controls/rotateButtonKeydown.js +11 -0
- package/src/controls/rotateControl.js +3 -0
- package/src/controls/rotateOnAdd.js +38 -0
- package/src/controls/rotateOnRemove.js +6 -0
- package/src/controls/shiftRotateAddHooks.js +8 -0
- package/src/controls/shiftRotateRemoveHooks.js +5 -0
- package/src/controls/shiftRotateWheel.js +9 -0
- package/src/controls/startCameraTouch.js +23 -0
- package/src/core/addImageState.js +7 -0
- package/src/core/addRasterImage.js +10 -0
- package/src/core/adjustCameraMarkerPan.js +22 -0
- package/src/core/beforeNativeRender.js +10 -0
- package/src/core/boundsQuad.js +11 -0
- package/src/core/bringNativeLayerToBack.js +3 -0
- package/src/core/bringNativeLayerToFront.js +3 -0
- package/src/core/cameraCircleBounds.js +6 -0
- package/src/core/cameraMarkerDrag.js +18 -0
- package/src/core/cameraMarkerOnDrag.js +8 -0
- package/src/core/cancelGridFade.js +10 -0
- package/src/core/closestCameraLayerPoint.js +7 -0
- package/src/core/compareNativeHits.js +3 -0
- package/src/core/current.js +3 -0
- package/src/core/disposeNativeLayer.js +35 -0
- package/src/core/fireRasterLoad.js +5 -0
- package/src/core/forwardNativeError.js +3 -0
- package/src/core/gridlayerGetEvents.js +7 -0
- package/src/core/gridlayerGetTiledPixelBounds.js +8 -0
- package/src/core/handleNativeMapEvent.js +47 -0
- package/src/core/hideTargets.js +16 -0
- package/src/core/initNativeGPU.js +21 -0
- package/src/core/initializeGridContainer.js +6 -0
- package/src/core/initializeNativeLayer.js +42 -0
- package/src/core/localPixel.js +5 -0
- package/src/core/localPixelForGeometry.js +6 -0
- package/src/core/localPosition.js +6 -0
- package/src/core/markerCameraIconPoint.js +9 -0
- package/src/core/markerGetEvents.js +5 -0
- package/src/core/markerInitInteraction.js +8 -0
- package/src/core/markerQuadCorners.js +31 -0
- package/src/core/markerSetIcon.js +9 -0
- package/src/core/markerSetPos.js +14 -0
- package/src/core/markerSetRotation.js +7 -0
- package/src/core/markerUpdateZIndex.js +8 -0
- package/src/core/nativeAddLatLng.js +3 -0
- package/src/core/nativeBringToBack.js +3 -0
- package/src/core/nativeBringToFront.js +3 -0
- package/src/core/nativeEvents.js +26 -0
- package/src/core/nativeImageError.js +8 -0
- package/src/core/nativeImageRefresh.js +7 -0
- package/src/core/nativeLayer.js +97 -0
- package/src/core/nativeLayerMethod.js +21 -0
- package/src/core/nativeRedraw.js +3 -0
- package/src/core/nativeSetBounds.js +3 -0
- package/src/core/nativeSetIcon.js +3 -0
- package/src/core/nativeSetLatLng.js +3 -0
- package/src/core/nativeSetLatLngs.js +3 -0
- package/src/core/nativeSetOpacity.js +3 -0
- package/src/core/nativeSetRadius.js +3 -0
- package/src/core/nativeSetStyle.js +3 -0
- package/src/core/nativeSetUrl.js +3 -0
- package/src/core/nativeSetZIndex.js +3 -0
- package/src/core/nativeSetZIndexOffset.js +3 -0
- package/src/core/popupAdjustPan.js +23 -0
- package/src/core/popupGetEvents.js +5 -0
- package/src/core/popupUpdatePosition.js +14 -0
- package/src/core/putNativeMesh.js +33 -0
- package/src/core/quadNativeMesh.js +15 -0
- package/src/core/readyNativeGPU.js +6 -0
- package/src/core/refreshNativeEvent.js +5 -0
- package/src/core/refreshNativeLayer.js +29 -0
- package/src/core/refreshNativeLayerContract.js +3 -0
- package/src/core/rejectNativeReady.js +3 -0
- package/src/core/removeImageState.js +8 -0
- package/src/core/removeNativeEvents.js +16 -0
- package/src/core/removeTargets.js +8 -0
- package/src/core/reorderNativeLayer.js +6 -0
- package/src/core/resolveNativeReady.js +3 -0
- package/src/core/restoreNativeEvents.js +6 -0
- package/src/core/runGridFades.js +14 -0
- package/src/core/runMarkerPanFrame.js +12 -0
- package/src/core/scheduleGridFade.js +9 -0
- package/src/core/scheduleMarkerPan.js +8 -0
- package/src/core/styleNativeMesh.js +10 -0
- package/src/core/syncGridLayer.js +22 -0
- package/src/core/syncImageOverlay.js +9 -0
- package/src/core/syncMarker.js +12 -0
- package/src/core/syncVectorLayer.js +26 -0
- package/src/core/synchronizeNativeLayer.js +35 -0
- package/src/core/textureFor.js +48 -0
- package/src/core/tooltipGetEvents.js +5 -0
- package/src/core/tooltipSetPosition.js +8 -0
- package/src/core/updateGridOpacity.js +23 -0
- package/src/core/updateNativeLayerView.js +6 -0
- package/src/core/uploadCanvasTexture.js +19 -0
- package/src/geometry/addBridges.js +88 -0
- package/src/geometry/below.js +3 -0
- package/src/geometry/box.js +3 -0
- package/src/geometry/bridgeElevation.js +19 -0
- package/src/geometry/bridgeLocal.js +4 -0
- package/src/geometry/build.js +19 -0
- package/src/geometry/circleAt.js +5 -0
- package/src/geometry/clipLine.js +23 -0
- package/src/geometry/clipSegment.js +19 -0
- package/src/geometry/computeBounds.js +33 -0
- package/src/geometry/conformModelToTerrain.js +67 -0
- package/src/geometry/cross.js +3 -0
- package/src/geometry/disk.js +11 -0
- package/src/geometry/diskAt.js +4 -0
- package/src/geometry/dot.js +6 -0
- package/src/geometry/emitter.js +8 -0
- package/src/geometry/lampPostGeometry.js +24 -0
- package/src/geometry/lampRing.js +11 -0
- package/src/geometry/lightGeometry.js +15 -0
- package/src/geometry/line.js +54 -0
- package/src/geometry/nativeGeometry.js +55 -0
- package/src/geometry/nativeTriangle.js +3 -0
- package/src/geometry/polygon.js +22 -0
- package/src/geometry/push.js +3 -0
- package/src/geometry/quad.js +4 -0
- package/src/geometry/roofCoverage.js +52 -0
- package/src/geometry/samePoint.js +3 -0
- package/src/geometry/segment.js +21 -0
- package/src/geometry/setVertexColor.js +15 -0
- package/src/geometry/sub.js +6 -0
- package/src/geometry/surface.js +17 -0
- package/src/geometry/treeGeometry.js +31 -0
- package/src/geometry/treeRing.js +14 -0
- package/src/geometry/triangle.js +12 -0
- package/src/geometry/vertexNormals.js +32 -0
- package/src/geometry/visit.js +9 -0
- package/src/index.js +41 -323
- package/src/lighting/cacheLightGrid.js +23 -0
- package/src/lighting/collectLightMeshes.js +6 -0
- package/src/lighting/lightGrid.js +42 -0
- package/src/lighting/updatePointLights.js +34 -0
- package/src/lighting/visitCells.js +15 -0
- package/src/lighting/worldLights.js +27 -0
- package/src/models/decodeModel.js +45 -0
- package/src/models/hasUnsupportedPrimitives.js +10 -0
- package/src/models/loadBuffer.js +6 -0
- package/src/models/loadImage.js +15 -0
- package/src/models/loadModel.js +69 -0
- package/src/models/materialFor.js +21 -0
- package/src/models/modelNode.js +93 -0
- package/src/models/readAccessor.js +53 -0
- package/src/models/readAccessorValues.js +16 -0
- package/src/models/textureFor.js +35 -0
- package/src/picking/collectVisibleMesh.js +4 -0
- package/src/picking/findFeature.js +49 -0
- package/src/picking/hit.js +23 -0
- package/src/picking/hitMesh.js +30 -0
- package/src/picking/pointerClick.js +5 -0
- package/src/picking/pointerLeave.js +5 -0
- package/src/picking/pointerMove.js +5 -0
- package/src/picking/raycast.js +59 -0
- package/src/picking/setHighlight.js +13 -0
- package/src/picking/shouldSkipOther.js +3 -0
- package/src/picking/showFeature.js +34 -0
- package/src/raster/addRasterTile.js +114 -0
- package/src/raster/comparePendingTiles.js +5 -0
- package/src/raster/createGeometry.js +22 -0
- package/src/raster/createRasterMesh.js +47 -0
- package/src/raster/finishAttachment.js +11 -0
- package/src/raster/finishRasterTile.js +47 -0
- package/src/raster/getRasterEvents.js +6 -0
- package/src/raster/getRasterTileSize.js +5 -0
- package/src/raster/initRaster.js +38 -0
- package/src/raster/isLoading.js +5 -0
- package/src/raster/loadRasterTile.js +10 -0
- package/src/raster/onPMTileAdd.js +10 -0
- package/src/raster/onPMTileRemove.js +8 -0
- package/src/raster/pruneRasterTiles.js +37 -0
- package/src/raster/pumpRasterTiles.js +22 -0
- package/src/raster/readyRaster.js +13 -0
- package/src/raster/registerTerrainTile.js +12 -0
- package/src/raster/releaseRasterTile.js +18 -0
- package/src/raster/releaseRasterTiles.js +15 -0
- package/src/raster/removeRasterTile.js +13 -0
- package/src/raster/reportError.js +6 -0
- package/src/raster/setPMTileOpacity.js +7 -0
- package/src/raster/setPMTileZIndex.js +7 -0
- package/src/raster/setRasterOpacity.js +11 -0
- package/src/raster/setRasterTerrain.js +21 -0
- package/src/raster/setRasterZIndex.js +11 -0
- package/src/raster/updateAttachedTiles.js +10 -0
- package/src/raster/updateRasterTiles.js +59 -0
- package/src/rendering/collectFrameMeshes.js +31 -0
- package/src/rendering/collectMeshes.js +36 -0
- package/src/rendering/compareMeshes.js +10 -0
- package/src/rendering/compareRoofTiles.js +4 -0
- package/src/rendering/composeRoofAtlas.js +52 -0
- package/src/rendering/createMesh.js +33 -0
- package/src/rendering/createProgram.js +92 -0
- package/src/rendering/destroyAfterSubmission.js +8 -0
- package/src/rendering/destroyTexture.js +6 -0
- package/src/rendering/disposeMesh.js +14 -0
- package/src/rendering/drawGeometry.js +129 -0
- package/src/rendering/drawSceneMeshes.js +51 -0
- package/src/rendering/ensureRoofBlit.js +40 -0
- package/src/rendering/prepareFrameMeshes.js +42 -0
- package/src/rendering/prepareFrameUniforms.js +49 -0
- package/src/rendering/rebuildRoofAtlas.js +67 -0
- package/src/rendering/render.js +57 -0
- package/src/rendering/reportCompilation.js +17 -0
- package/src/rendering/resizeRenderer.js +19 -0
- package/src/rendering/sortMeshes.js +6 -0
- package/src/rendering/synchronizeZoomView.js +34 -0
- package/src/rendering/textureBinding.js +7 -0
- package/src/rendering/updateMapCamera.js +32 -0
- package/src/rendering/updateRoofRaster.js +32 -0
- package/src/scene/attach.js +161 -0
- package/src/scene/attachLayer.js +10 -0
- package/src/scene/cancelUpdate.js +10 -0
- package/src/scene/emptyEvents.js +3 -0
- package/src/scene/emptyNode.js +11 -0
- package/src/scene/endZoom.js +16 -0
- package/src/scene/failAttachment.js +9 -0
- package/src/scene/get3DEvents.js +13 -0
- package/src/scene/init3D.js +30 -0
- package/src/scene/initializeLayer.js +16 -0
- package/src/scene/initializerFor.js +14 -0
- package/src/scene/layerInitialize.js +38 -0
- package/src/scene/layerLayerAdd.js +21 -0
- package/src/scene/onAdd3DLayer.js +35 -0
- package/src/scene/onMapChange.js +16 -0
- package/src/scene/onRemove3DLayer.js +69 -0
- package/src/scene/onZoomAnim.js +16 -0
- package/src/scene/placeEntry.js +11 -0
- package/src/scene/placeUnderEntry.js +8 -0
- package/src/scene/ready3D.js +25 -0
- package/src/scene/releaseRenderer.js +14 -0
- package/src/scene/removeEntry.js +6 -0
- package/src/scene/renderPendingMapChange.js +11 -0
- package/src/scene/renderPendingUpdates.js +19 -0
- package/src/scene/renderPendingZoomAnimation.js +7 -0
- package/src/scene/rendererDeviceError.js +10 -0
- package/src/scene/rendererDeviceLost.js +11 -0
- package/src/scene/replaceEntry.js +7 -0
- package/src/scene/reportError.js +3 -0
- package/src/scene/requestAdapter.js +12 -0
- package/src/scene/requestDevice.js +9 -0
- package/src/scene/resolveNextInitialization.js +12 -0
- package/src/scene/restoreObject.js +71 -0
- package/src/scene/runPlacements.js +7 -0
- package/src/scene/showWebGPUWarning.js +16 -0
- package/src/scene/traverse.js +7 -0
- package/src/scene/underEntry.js +17 -0
- package/src/scene/update.js +19 -0
- package/src/scene/updateCamera.js +34 -0
- package/src/scene/updateWorldMatrix.js +48 -0
- package/src/shaders/materialShaders.js +246 -0
- package/src/shadows/bindSunlight.js +12 -0
- package/src/shadows/drawShadowMeshes.js +48 -0
- package/src/shadows/ensureShadowPipeline.js +53 -0
- package/src/shadows/renderSunlight.js +46 -0
- package/src/shadows/resizeSunlight.js +15 -0
- package/src/shadows/shadowBounds.js +32 -0
- package/src/shadows/shadowCacheMatches.js +23 -0
- package/src/shadows/shadowMatrix.js +39 -0
- package/src/sources/addGeneratedTriangle.js +6 -0
- package/src/sources/addTriangle.js +17 -0
- package/src/sources/attachAreaMesh.js +58 -0
- package/src/sources/buildArea.js +42 -0
- package/src/sources/buildAreaFeature.js +41 -0
- package/src/sources/buildAreaPoint.js +25 -0
- package/src/sources/buildAreaPolygon.js +29 -0
- package/src/sources/compareAreaDistance.js +4 -0
- package/src/sources/generateTreeGeometry.js +11 -0
- package/src/sources/groundOffset.js +3 -0
- package/src/sources/initializeGeoJSON.js +8 -0
- package/src/sources/instanceAreaGeometry.js +29 -0
- package/src/sources/projectRing.js +20 -0
- package/src/sources/projectedTree.js +13 -0
- package/src/sources/pump.js +54 -0
- package/src/sources/releaseArea.js +22 -0
- package/src/sources/setGeoJSONData.js +12 -0
- package/src/sources/setGeoJSONLayerData.js +5 -0
- package/src/sources/sourceAreaContext.js +9 -0
- package/src/sources/updateArea.js +45 -0
- package/src/sources/updateStatus.js +12 -0
- package/src/sunlight/addTimeLayer.js +3 -0
- package/src/sunlight/addTo.js +10 -0
- package/src/sunlight/atmosphere.js +28 -0
- package/src/sunlight/initSunlight.js +14 -0
- package/src/sunlight/initialize.js +11 -0
- package/src/sunlight/mix.js +6 -0
- package/src/sunlight/onAdd.js +5 -0
- package/src/sunlight/onAddSun.js +66 -0
- package/src/sunlight/remove.js +7 -0
- package/src/sunlight/removeSun.js +15 -0
- package/src/sunlight/removeTimeLayer.js +3 -0
- package/src/sunlight/render.js +7 -0
- package/src/sunlight/rgb.js +6 -0
- package/src/sunlight/styleTimeControl.js +7 -0
- package/src/sunlight/tickSun.js +5 -0
- package/src/sunlight/updateSky.js +20 -0
- package/src/sunlight/updateSun.js +34 -0
- package/src/sunlight/useLiveTime.js +6 -0
- package/src/sunlight/useSelectedTime.js +20 -0
- package/src/terrain/clearLayerTerrain.js +5 -0
- package/src/terrain/getElevation.js +10 -0
- package/src/terrain/initTerrain.js +20 -0
- package/src/terrain/loadReadyTerrain.js +5 -0
- package/src/terrain/loadTerrain.js +63 -0
- package/src/terrain/loadTerrainTiles.js +13 -0
- package/src/terrain/onTerrainAdd.js +21 -0
- package/src/terrain/onTerrainChange.js +14 -0
- package/src/terrain/onTerrainRemove.js +41 -0
- package/src/terrain/readBridges.js +4 -0
- package/src/terrain/sample.js +7 -0
- package/src/terrain/setLayerTerrain.js +5 -0
- package/src/terrain/terrainAtlas.js +23 -0
- package/src/terrain/terrainElevation.js +20 -0
- package/src/terrain/terrainGrid.js +24 -0
- package/src/traffic/addTraffic.js +7 -0
- package/src/traffic/along.js +14 -0
- package/src/traffic/clockMinutes.js +6 -0
- package/src/traffic/compareDepartures.js +5 -0
- package/src/traffic/createTrafficMesh.js +7 -0
- package/src/traffic/destroyTrafficGpu.js +5 -0
- package/src/traffic/disposeTrafficObject.js +13 -0
- package/src/traffic/drawTrafficRoute.js +6 -0
- package/src/traffic/failTraffic.js +6 -0
- package/src/traffic/failedTrafficLoad.js +5 -0
- package/src/traffic/fetchTrafficLanes.js +10 -0
- package/src/traffic/groundTraffic.js +15 -0
- package/src/traffic/initTraffic.js +54 -0
- package/src/traffic/loadTraffic.js +15 -0
- package/src/traffic/loadedTrafficLanes.js +16 -0
- package/src/traffic/locateTraffic.js +9 -0
- package/src/traffic/moveTraffic.js +15 -0
- package/src/traffic/placeTraffic.js +21 -0
- package/src/traffic/prepareTraffic.js +25 -0
- package/src/traffic/readyTraffic.js +6 -0
- package/src/traffic/rebaseTraffic.js +58 -0
- package/src/traffic/rebuildTrafficMesh.js +28 -0
- package/src/traffic/removeTraffic.js +17 -0
- package/src/traffic/routeColor.js +6 -0
- package/src/traffic/routeGeometry.js +31 -0
- package/src/traffic/scheduledTrips.js +40 -0
- package/src/traffic/startTraffic.js +8 -0
- package/src/traffic/tickTraffic.js +57 -0
- package/src/traffic/toLanes.js +16 -0
- package/src/traffic/tooltip.js +11 -0
- package/src/traffic/trafficBounds.js +17 -0
- package/src/traffic/trafficNow.js +4 -0
- package/src/traffic/trafficStorage.js +5 -0
- package/src/traffic/tripsAt.js +27 -0
- package/src/traffic/updateTraffic.js +8 -0
- package/src/traffic/updateTrafficTerrain.js +12 -0
- package/src/traffic/vehicleOffsets.js +11 -0
- package/src/triangulation/area.js +9 -0
- package/src/triangulation/clean.js +18 -0
- package/src/triangulation/containsVertex.js +11 -0
- package/src/triangulation/cross.js +3 -0
- package/src/triangulation/crossesBoundary.js +8 -0
- package/src/triangulation/crossesRing.js +9 -0
- package/src/triangulation/equal.js +3 -0
- package/src/triangulation/inside.js +10 -0
- package/src/triangulation/insideHole.js +7 -0
- package/src/triangulation/intersects.js +11 -0
- package/src/triangulation/isClockWise.js +13 -0
- package/src/triangulation/minimumX.js +6 -0
- package/src/triangulation/on.js +4 -0
- package/src/triangulation/sortHoles.js +26 -0
- package/src/triangulation/triangulate.js +86 -0
- package/src/utils/channel.js +2 -2
- package/src/utils/compareDistance.js +3 -0
- package/src/utils/noOperation.js +1 -0
- package/src/utils/toSRGB.js +3 -1
- package/src/utils/wrap.js +3 -1
- package/src/vehicles/bicycleModel.js +23 -0
- package/src/vehicles/boatBenches.js +8 -0
- package/src/vehicles/boatModel.js +27 -0
- package/src/vehicles/busModel.js +6 -0
- package/src/vehicles/carModel.js +22 -0
- package/src/vehicles/carriage.js +19 -0
- package/src/vehicles/metroModel.js +9 -0
- package/src/vehicles/mirror.js +8 -0
- package/src/vehicles/pedestrianModel.js +17 -0
- package/src/vehicles/tramModel.js +9 -0
- package/src/walk/blocked.js +6 -0
- package/src/walk/createWalk.js +60 -0
- package/src/walk/initWalk.js +18 -0
- package/src/walk/initialize.js +6 -0
- package/src/walk/local.js +10 -0
- package/src/walk/onAdd.js +4 -0
- package/src/walk/onBlur.js +3 -0
- package/src/walk/onKey.js +12 -0
- package/src/walk/onPointer.js +13 -0
- package/src/walk/onRemove.js +4 -0
- package/src/walk/onTerrain.js +5 -0
- package/src/walk/place.js +18 -0
- package/src/walk/start.js +37 -0
- package/src/walk/step.js +53 -0
- package/src/walk/stop.js +27 -0
- package/src/walk/toggle.js +6 -0
- package/dist/utils/CELL.js +0 -2
- package/dist/utils/CELL.js.map +0 -7
- package/dist/utils/addBridges.js +0 -2
- package/dist/utils/addBridges.js.map +0 -7
- package/dist/utils/addRasterTile.js +0 -2
- package/dist/utils/addRasterTile.js.map +0 -7
- package/dist/utils/along.js +0 -2
- package/dist/utils/along.js.map +0 -7
- package/dist/utils/atmosphere.js +0 -2
- package/dist/utils/atmosphere.js.map +0 -7
- package/dist/utils/attach.js +0 -2
- package/dist/utils/attach.js.map +0 -7
- package/dist/utils/bindSunlight.js +0 -2
- package/dist/utils/bindSunlight.js.map +0 -7
- package/dist/utils/box.js +0 -2
- package/dist/utils/box.js.map +0 -7
- package/dist/utils/bridgeElevation.js +0 -2
- package/dist/utils/bridgeElevation.js.map +0 -7
- package/dist/utils/build.js +0 -2
- package/dist/utils/build.js.map +0 -7
- package/dist/utils/cameraControls.js +0 -2
- package/dist/utils/cameraControls.js.map +0 -7
- package/dist/utils/channel.js +0 -2
- package/dist/utils/channel.js.map +0 -7
- package/dist/utils/collider.js +0 -2
- package/dist/utils/collider.js.map +0 -7
- package/dist/utils/colliders.js +0 -2
- package/dist/utils/colliders.js.map +0 -7
- package/dist/utils/computeBounds.js +0 -2
- package/dist/utils/computeBounds.js.map +0 -7
- package/dist/utils/conformModelToTerrain.js +0 -2
- package/dist/utils/conformModelToTerrain.js.map +0 -7
- package/dist/utils/createMesh.js +0 -2
- package/dist/utils/createMesh.js.map +0 -7
- package/dist/utils/createProgram.js +0 -3
- package/dist/utils/createProgram.js.map +0 -7
- package/dist/utils/decodeDirectory.js +0 -2
- package/dist/utils/decodeDirectory.js.map +0 -7
- package/dist/utils/decodeHeader.js +0 -2
- package/dist/utils/decodeHeader.js.map +0 -7
- package/dist/utils/decodeModel.js +0 -2
- package/dist/utils/decodeModel.js.map +0 -7
- package/dist/utils/decompress.js +0 -2
- package/dist/utils/decompress.js.map +0 -7
- package/dist/utils/destroyTexture.js +0 -2
- package/dist/utils/destroyTexture.js.map +0 -7
- package/dist/utils/disposeMesh.js +0 -2
- package/dist/utils/disposeMesh.js.map +0 -7
- package/dist/utils/drawGeometry.js +0 -2
- package/dist/utils/drawGeometry.js.map +0 -7
- package/dist/utils/elevationWGSL.js +0 -24
- package/dist/utils/elevationWGSL.js.map +0 -7
- package/dist/utils/emptyNode.js +0 -2
- package/dist/utils/emptyNode.js.map +0 -7
- package/dist/utils/endZoom.js +0 -2
- package/dist/utils/endZoom.js.map +0 -7
- package/dist/utils/findFeature.js +0 -2
- package/dist/utils/findFeature.js.map +0 -7
- package/dist/utils/geometry.js +0 -1
- package/dist/utils/geometry.js.map +0 -7
- package/dist/utils/getElevation.js +0 -2
- package/dist/utils/getElevation.js.map +0 -7
- package/dist/utils/getHeader.js +0 -2
- package/dist/utils/getHeader.js.map +0 -7
- package/dist/utils/getZxy.js +0 -2
- package/dist/utils/getZxy.js.map +0 -7
- package/dist/utils/glass.js +0 -2
- package/dist/utils/glass.js.map +0 -7
- package/dist/utils/headlight.js +0 -2
- package/dist/utils/headlight.js.map +0 -7
- package/dist/utils/hit.js +0 -2
- package/dist/utils/hit.js.map +0 -7
- package/dist/utils/horizontalPosition.js +0 -2
- package/dist/utils/horizontalPosition.js.map +0 -7
- package/dist/utils/horizontalRay.js +0 -2
- package/dist/utils/horizontalRay.js.map +0 -7
- package/dist/utils/hull.js +0 -2
- package/dist/utils/hull.js.map +0 -7
- package/dist/utils/initSunlight.js +0 -2
- package/dist/utils/initSunlight.js.map +0 -7
- package/dist/utils/initTerrain.js +0 -2
- package/dist/utils/initTerrain.js.map +0 -7
- package/dist/utils/initTraffic.js +0 -40
- package/dist/utils/initTraffic.js.map +0 -7
- package/dist/utils/initWalk.js +0 -2
- package/dist/utils/initWalk.js.map +0 -7
- package/dist/utils/intersectMeshes.js +0 -2
- package/dist/utils/intersectMeshes.js.map +0 -7
- package/dist/utils/isClockWise.js +0 -2
- package/dist/utils/isClockWise.js.map +0 -7
- package/dist/utils/lampPostGeometry.js +0 -2
- package/dist/utils/lampPostGeometry.js.map +0 -7
- package/dist/utils/lightGeometry.js +0 -2
- package/dist/utils/lightGeometry.js.map +0 -7
- package/dist/utils/lightGrid.js +0 -2
- package/dist/utils/lightGrid.js.map +0 -7
- package/dist/utils/limbs.js +0 -2
- package/dist/utils/limbs.js.map +0 -7
- package/dist/utils/loadModel.js +0 -2
- package/dist/utils/loadModel.js.map +0 -7
- package/dist/utils/loadSource.js +0 -2
- package/dist/utils/loadSource.js.map +0 -7
- package/dist/utils/loadTerrain.js +0 -2
- package/dist/utils/loadTerrain.js.map +0 -7
- package/dist/utils/mapCamera.js +0 -2
- package/dist/utils/mapCamera.js.map +0 -7
- package/dist/utils/materialShaders.js +0 -211
- package/dist/utils/materialShaders.js.map +0 -7
- package/dist/utils/mirror.js +0 -2
- package/dist/utils/mirror.js.map +0 -7
- package/dist/utils/moonPosition.js +0 -2
- package/dist/utils/moonPosition.js.map +0 -7
- package/dist/utils/moves.js +0 -2
- package/dist/utils/moves.js.map +0 -7
- package/dist/utils/nativeEvents.js +0 -2
- package/dist/utils/nativeEvents.js.map +0 -7
- package/dist/utils/nativeGeometry.js +0 -2
- package/dist/utils/nativeGeometry.js.map +0 -7
- package/dist/utils/nativeLayer.js +0 -2
- package/dist/utils/nativeLayer.js.map +0 -7
- package/dist/utils/nodeMatrix.js +0 -2
- package/dist/utils/nodeMatrix.js.map +0 -7
- package/dist/utils/onAdd3DLayer.js +0 -2
- package/dist/utils/onAdd3DLayer.js.map +0 -7
- package/dist/utils/onAddSun.js +0 -2
- package/dist/utils/onAddSun.js.map +0 -7
- package/dist/utils/onClick.js +0 -2
- package/dist/utils/onClick.js.map +0 -7
- package/dist/utils/onMapChange.js +0 -2
- package/dist/utils/onMapChange.js.map +0 -7
- package/dist/utils/onPMTileAdd.js +0 -2
- package/dist/utils/onPMTileAdd.js.map +0 -7
- package/dist/utils/onPMTileRemove.js +0 -2
- package/dist/utils/onPMTileRemove.js.map +0 -7
- package/dist/utils/onPointerLeave.js +0 -2
- package/dist/utils/onPointerLeave.js.map +0 -7
- package/dist/utils/onPointerMove.js +0 -2
- package/dist/utils/onPointerMove.js.map +0 -7
- package/dist/utils/onRemove3DLayer.js +0 -2
- package/dist/utils/onRemove3DLayer.js.map +0 -7
- package/dist/utils/onRemoveSun.js +0 -2
- package/dist/utils/onRemoveSun.js.map +0 -7
- package/dist/utils/onTerrainAdd.js +0 -2
- package/dist/utils/onTerrainAdd.js.map +0 -7
- package/dist/utils/onTerrainChange.js +0 -2
- package/dist/utils/onTerrainChange.js.map +0 -7
- package/dist/utils/onTerrainRemove.js +0 -2
- package/dist/utils/onTerrainRemove.js.map +0 -7
- package/dist/utils/onZoomAnim.js +0 -2
- package/dist/utils/onZoomAnim.js.map +0 -7
- package/dist/utils/paints.js +0 -2
- package/dist/utils/paints.js.map +0 -7
- package/dist/utils/parseColor.js +0 -2
- package/dist/utils/parseColor.js.map +0 -7
- package/dist/utils/parts.js +0 -2
- package/dist/utils/parts.js.map +0 -7
- package/dist/utils/projectCelestialBody.js +0 -2
- package/dist/utils/projectCelestialBody.js.map +0 -7
- package/dist/utils/pump.js +0 -2
- package/dist/utils/pump.js.map +0 -7
- package/dist/utils/rasterTiles.js +0 -2
- package/dist/utils/rasterTiles.js.map +0 -7
- package/dist/utils/raycast.js +0 -2
- package/dist/utils/raycast.js.map +0 -7
- package/dist/utils/read.js +0 -2
- package/dist/utils/read.js.map +0 -7
- package/dist/utils/readAccessor.js +0 -2
- package/dist/utils/readAccessor.js.map +0 -7
- package/dist/utils/releaseArea.js +0 -2
- package/dist/utils/releaseArea.js.map +0 -7
- package/dist/utils/removeRasterTile.js +0 -2
- package/dist/utils/removeRasterTile.js.map +0 -7
- package/dist/utils/render.js +0 -15
- package/dist/utils/render.js.map +0 -7
- package/dist/utils/renderSunlight.js +0 -13
- package/dist/utils/renderSunlight.js.map +0 -7
- package/dist/utils/renderers.js +0 -2
- package/dist/utils/renderers.js.map +0 -7
- package/dist/utils/resizeSunlight.js +0 -2
- package/dist/utils/resizeSunlight.js.map +0 -7
- package/dist/utils/roofCoverage.js +0 -2
- package/dist/utils/roofCoverage.js.map +0 -7
- package/dist/utils/routeGeometry.js +0 -2
- package/dist/utils/routeGeometry.js.map +0 -7
- package/dist/utils/scheduledTrips.js +0 -2
- package/dist/utils/scheduledTrips.js.map +0 -7
- package/dist/utils/setGeoJSONData.js +0 -2
- package/dist/utils/setGeoJSONData.js.map +0 -7
- package/dist/utils/setHighlight.js +0 -2
- package/dist/utils/setHighlight.js.map +0 -7
- package/dist/utils/setPMTileOpacity.js +0 -2
- package/dist/utils/setPMTileOpacity.js.map +0 -7
- package/dist/utils/setPMTileZIndex.js +0 -2
- package/dist/utils/setPMTileZIndex.js.map +0 -7
- package/dist/utils/setParent.js +0 -2
- package/dist/utils/setParent.js.map +0 -7
- package/dist/utils/setTerrainHeight.js +0 -2
- package/dist/utils/setTerrainHeight.js.map +0 -7
- package/dist/utils/setVertexColor.js +0 -2
- package/dist/utils/setVertexColor.js.map +0 -7
- package/dist/utils/showFeature.js +0 -2
- package/dist/utils/showFeature.js.map +0 -7
- package/dist/utils/sizes.js +0 -2
- package/dist/utils/sizes.js.map +0 -7
- package/dist/utils/skin.js +0 -2
- package/dist/utils/skin.js.map +0 -7
- package/dist/utils/solarPosition.js +0 -2
- package/dist/utils/solarPosition.js.map +0 -7
- package/dist/utils/sortMeshes.js +0 -2
- package/dist/utils/sortMeshes.js.map +0 -7
- package/dist/utils/speed.js +0 -2
- package/dist/utils/speed.js.map +0 -7
- package/dist/utils/startZoom.js +0 -2
- package/dist/utils/startZoom.js.map +0 -7
- package/dist/utils/taillight.js +0 -2
- package/dist/utils/taillight.js.map +0 -7
- package/dist/utils/terrainAtlas.js +0 -2
- package/dist/utils/terrainAtlas.js.map +0 -7
- package/dist/utils/terrainElevation.js +0 -2
- package/dist/utils/terrainElevation.js.map +0 -7
- package/dist/utils/terrainGrid.js +0 -2
- package/dist/utils/terrainGrid.js.map +0 -7
- package/dist/utils/textureSampler.js +0 -2
- package/dist/utils/textureSampler.js.map +0 -7
- package/dist/utils/tileId.js +0 -2
- package/dist/utils/tileId.js.map +0 -7
- package/dist/utils/toLanes.js +0 -2
- package/dist/utils/toLanes.js.map +0 -7
- package/dist/utils/toSRGB.js +0 -2
- package/dist/utils/toSRGB.js.map +0 -7
- package/dist/utils/tooltip.js +0 -3
- package/dist/utils/tooltip.js.map +0 -7
- package/dist/utils/traffic.js +0 -2
- package/dist/utils/traffic.js.map +0 -7
- package/dist/utils/traverse.js +0 -2
- package/dist/utils/traverse.js.map +0 -7
- package/dist/utils/treeGeometry.js +0 -2
- package/dist/utils/treeGeometry.js.map +0 -7
- package/dist/utils/triangulate.js +0 -2
- package/dist/utils/triangulate.js.map +0 -7
- package/dist/utils/tripsAt.js +0 -2
- package/dist/utils/tripsAt.js.map +0 -7
- package/dist/utils/types.js +0 -2
- package/dist/utils/types.js.map +0 -7
- package/dist/utils/underEntry.js +0 -2
- package/dist/utils/underEntry.js.map +0 -7
- package/dist/utils/update.js +0 -2
- package/dist/utils/update.js.map +0 -7
- package/dist/utils/updateArea.js +0 -2
- package/dist/utils/updateArea.js.map +0 -7
- package/dist/utils/updateCamera.js +0 -2
- package/dist/utils/updateCamera.js.map +0 -7
- package/dist/utils/updatePointLights.js +0 -2
- package/dist/utils/updatePointLights.js.map +0 -7
- package/dist/utils/updateWorldMatrix.js +0 -2
- package/dist/utils/updateWorldMatrix.js.map +0 -7
- package/dist/utils/vehicleOffsets.js +0 -2
- package/dist/utils/vehicleOffsets.js.map +0 -7
- package/dist/utils/vehicles.js +0 -2
- package/dist/utils/vehicles.js.map +0 -7
- package/dist/utils/vertexNormals.js +0 -2
- package/dist/utils/vertexNormals.js.map +0 -7
- package/dist/utils/walk.js +0 -2
- package/dist/utils/walk.js.map +0 -7
- package/dist/utils/white.js +0 -2
- package/dist/utils/white.js.map +0 -7
- package/dist/utils/worldLights.js +0 -2
- package/dist/utils/worldLights.js.map +0 -7
- package/dist/utils/wrap.js +0 -2
- package/dist/utils/wrap.js.map +0 -7
- package/src/utils/addBridges.js +0 -66
- package/src/utils/addRasterTile.js +0 -112
- package/src/utils/along.js +0 -9
- package/src/utils/atmosphere.js +0 -20
- package/src/utils/attach.js +0 -255
- package/src/utils/bindSunlight.js +0 -12
- package/src/utils/box.js +0 -1
- package/src/utils/bridgeElevation.js +0 -18
- package/src/utils/build.js +0 -20
- package/src/utils/cameraControls.js +0 -287
- package/src/utils/collider.js +0 -62
- package/src/utils/computeBounds.js +0 -17
- package/src/utils/conformModelToTerrain.js +0 -69
- package/src/utils/createMesh.js +0 -31
- package/src/utils/createProgram.js +0 -92
- package/src/utils/decodeDirectory.js +0 -40
- package/src/utils/decodeHeader.js +0 -15
- package/src/utils/decodeModel.js +0 -43
- package/src/utils/destroyTexture.js +0 -7
- package/src/utils/disposeMesh.js +0 -13
- package/src/utils/drawGeometry.js +0 -122
- package/src/utils/elevationWGSL.js +0 -27
- package/src/utils/emptyNode.js +0 -9
- package/src/utils/endZoom.js +0 -15
- package/src/utils/findFeature.js +0 -49
- package/src/utils/geometry.js +0 -2
- package/src/utils/getElevation.js +0 -10
- package/src/utils/getZxy.js +0 -76
- package/src/utils/glass.js +0 -1
- package/src/utils/hit.js +0 -41
- package/src/utils/initSunlight.js +0 -9
- package/src/utils/initTerrain.js +0 -19
- package/src/utils/initTraffic.js +0 -93
- package/src/utils/initWalk.js +0 -72
- package/src/utils/intersectMeshes.js +0 -121
- package/src/utils/isClockWise.js +0 -12
- package/src/utils/lampPostGeometry.js +0 -26
- package/src/utils/lightGeometry.js +0 -22
- package/src/utils/lightGrid.js +0 -50
- package/src/utils/loadModel.js +0 -217
- package/src/utils/loadTerrain.js +0 -65
- package/src/utils/mapCamera.js +0 -432
- package/src/utils/materialShaders.js +0 -243
- package/src/utils/mirror.js +0 -6
- package/src/utils/nativeEvents.js +0 -77
- package/src/utils/nativeGeometry.js +0 -131
- package/src/utils/nativeLayer.js +0 -317
- package/src/utils/onAdd3DLayer.js +0 -31
- package/src/utils/onAddSun.js +0 -147
- package/src/utils/onMapChange.js +0 -16
- package/src/utils/onPMTileAdd.js +0 -15
- package/src/utils/onPMTileRemove.js +0 -8
- package/src/utils/onRemove3DLayer.js +0 -78
- package/src/utils/onRemoveSun.js +0 -3
- package/src/utils/onTerrainAdd.js +0 -18
- package/src/utils/onTerrainChange.js +0 -13
- package/src/utils/onTerrainRemove.js +0 -40
- package/src/utils/onZoomAnim.js +0 -14
- package/src/utils/parts.js +0 -16
- package/src/utils/pump.js +0 -226
- package/src/utils/rasterTiles.js +0 -285
- package/src/utils/raycast.js +0 -60
- package/src/utils/readAccessor.js +0 -68
- package/src/utils/releaseArea.js +0 -34
- package/src/utils/removeRasterTile.js +0 -13
- package/src/utils/render.js +0 -406
- package/src/utils/renderSunlight.js +0 -170
- package/src/utils/resizeSunlight.js +0 -15
- package/src/utils/roofCoverage.js +0 -47
- package/src/utils/routeGeometry.js +0 -22
- package/src/utils/scheduledTrips.js +0 -29
- package/src/utils/setGeoJSONData.js +0 -11
- package/src/utils/setHighlight.js +0 -13
- package/src/utils/setPMTileOpacity.js +0 -7
- package/src/utils/setPMTileZIndex.js +0 -7
- package/src/utils/setVertexColor.js +0 -14
- package/src/utils/showFeature.js +0 -27
- package/src/utils/skin.js +0 -2
- package/src/utils/sortMeshes.js +0 -12
- package/src/utils/terrainAtlas.js +0 -21
- package/src/utils/terrainElevation.js +0 -20
- package/src/utils/terrainGrid.js +0 -23
- package/src/utils/tileId.js +0 -18
- package/src/utils/toLanes.js +0 -7
- package/src/utils/tooltip.js +0 -6
- package/src/utils/traffic.js +0 -315
- package/src/utils/traverse.js +0 -6
- package/src/utils/treeGeometry.js +0 -45
- package/src/utils/triangulate.js +0 -100
- package/src/utils/tripsAt.js +0 -16
- package/src/utils/underEntry.js +0 -17
- package/src/utils/update.js +0 -18
- package/src/utils/updateArea.js +0 -40
- package/src/utils/updateCamera.js +0 -32
- package/src/utils/updatePointLights.js +0 -38
- package/src/utils/updateWorldMatrix.js +0 -47
- package/src/utils/vehicleOffsets.js +0 -8
- package/src/utils/vehicles.js +0 -65
- package/src/utils/vertexNormals.js +0 -30
- package/src/utils/walk.js +0 -187
- package/src/utils/worldLights.js +0 -25
- /package/src/{utils → archives}/decompress.js +0 -0
- /package/src/{utils → archives}/getHeader.js +0 -0
- /package/src/{utils → archives}/loadSource.js +0 -0
- /package/src/{utils → archives}/read.js +0 -0
- /package/src/{utils → collision}/horizontalRay.js +0 -0
- /package/src/{utils → constants}/CELL.js +0 -0
- /package/src/{utils/sizes.js → constants/accessorSizes.js} +0 -0
- /package/src/{utils/types.js → constants/accessorTypes.js} +0 -0
- /package/src/{utils → constants}/colliders.js +0 -0
- /package/src/{utils → constants}/headlight.js +0 -0
- /package/src/{utils → constants}/hull.js +0 -0
- /package/src/{utils → constants}/limbs.js +0 -0
- /package/src/{utils → constants}/moves.js +0 -0
- /package/src/{utils → constants}/paints.js +0 -0
- /package/src/{utils → constants}/renderers.js +0 -0
- /package/src/{utils → constants}/speed.js +0 -0
- /package/src/{utils → constants}/taillight.js +0 -0
- /package/src/{utils → constants}/white.js +0 -0
- /package/src/{utils → models}/nodeMatrix.js +0 -0
- /package/src/{utils → models}/textureSampler.js +0 -0
- /package/src/{utils → picking}/onClick.js +0 -0
- /package/src/{utils → picking}/onPointerLeave.js +0 -0
- /package/src/{utils → picking}/onPointerMove.js +0 -0
- /package/src/{utils → scene}/setParent.js +0 -0
- /package/src/{utils → scene}/startZoom.js +0 -0
- /package/src/{utils → sunlight}/horizontalPosition.js +0 -0
- /package/src/{utils → sunlight}/moonPosition.js +0 -0
- /package/src/{utils → sunlight}/projectCelestialBody.js +0 -0
- /package/src/{utils → sunlight}/solarPosition.js +0 -0
- /package/src/{utils → terrain}/setTerrainHeight.js +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function f(e,n,l){const t=e._tooltip;if(!t)return;if(n){t.replaceChildren(e.options.tooltip(n)),t.hidden=!1;const s=e.container.getBoundingClientRect(),i=l.clientX-s.left,r=l.clientY-s.top;t.style.left=`${i+t.offsetWidth+16>s.width?i-t.offsetWidth-12:i+12}px`,t.style.top=`${r+t.offsetHeight+16>s.height?r-t.offsetHeight-12:r+12}px`}else t.hidden=!0;const o=e._shared;o&&([...o._layers].some(i=>i._tooltip&&!i._tooltip.hidden)?(o._cursor===void 0&&(o._cursor=e.container.style.cursor),e.container.style.cursor="pointer"):o._cursor!==void 0&&(e.container.style.cursor=o._cursor,delete o._cursor))}export{f as showFeature};
|
|
2
|
-
//# sourceMappingURL=showFeature.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/showFeature.js"],
|
|
4
|
-
"sourcesContent": ["/** Update tooltip content/position and arbitrate cursor ownership across shared layers. */\n\nexport function showFeature(backend, feature, event) {\n const tooltip = backend._tooltip;\n if (!tooltip) return;\n if (feature) {\n tooltip.replaceChildren(backend.options.tooltip(feature));\n tooltip.hidden = false;\n const rect = backend.container.getBoundingClientRect();\n const x = event.clientX - rect.left, y = event.clientY - rect.top;\n tooltip.style.left = `${x + tooltip.offsetWidth + 16 > rect.width ? x - tooltip.offsetWidth - 12 : x + 12}px`;\n tooltip.style.top = `${y + tooltip.offsetHeight + 16 > rect.height ? y - tooltip.offsetHeight - 12 : y + 12}px`;\n } else {\n tooltip.hidden = true;\n }\n const shared = backend._shared;\n if (shared) {\n const visible = [...shared._layers].some(layer => layer._tooltip && !layer._tooltip.hidden);\n if (visible) {\n if (shared._cursor === undefined) shared._cursor = backend.container.style.cursor;\n backend.container.style.cursor = 'pointer';\n } else if (shared._cursor !== undefined) {\n backend.container.style.cursor = shared._cursor;\n delete shared._cursor;\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAYC,EAASC,EAASC,EAAO,CACnD,MAAMC,EAAUH,EAAQ,SACxB,GAAI,CAACG,EAAS,OACd,GAAIF,EAAS,CACXE,EAAQ,gBAAgBH,EAAQ,QAAQ,QAAQC,CAAO,CAAC,EACxDE,EAAQ,OAAS,GACjB,MAAMC,EAAOJ,EAAQ,UAAU,sBAAsB,EAC/CK,EAAIH,EAAM,QAAUE,EAAK,KAAME,EAAIJ,EAAM,QAAUE,EAAK,IAC9DD,EAAQ,MAAM,KAAO,GAAGE,EAAIF,EAAQ,YAAc,GAAKC,EAAK,MAAQC,EAAIF,EAAQ,YAAc,GAAKE,EAAI,EAAE,KACzGF,EAAQ,MAAM,IAAM,GAAGG,EAAIH,EAAQ,aAAe,GAAKC,EAAK,OAASE,EAAIH,EAAQ,aAAe,GAAKG,EAAI,EAAE,IAC7G,MACEH,EAAQ,OAAS,GAEnB,MAAMI,EAASP,EAAQ,QACnBO,IACc,CAAC,GAAGA,EAAO,OAAO,EAAE,KAAKC,GAASA,EAAM,UAAY,CAACA,EAAM,SAAS,MAAM,GAEpFD,EAAO,UAAY,SAAWA,EAAO,QAAUP,EAAQ,UAAU,MAAM,QAC3EA,EAAQ,UAAU,MAAM,OAAS,WACxBO,EAAO,UAAY,SAC5BP,EAAQ,UAAU,MAAM,OAASO,EAAO,QACxC,OAAOA,EAAO,SAGpB",
|
|
6
|
-
"names": ["showFeature", "backend", "feature", "event", "tooltip", "rect", "x", "y", "shared", "layer"]
|
|
7
|
-
}
|
package/dist/utils/sizes.js
DELETED
package/dist/utils/sizes.js.map
DELETED
package/dist/utils/skin.js
DELETED
package/dist/utils/skin.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/skin.js"],
|
|
4
|
-
"sourcesContent": ["// Pedestrian, about 1.77 m tall, prisms as in utils/vehicles.js (forward -z). Limbs hang from their pivot at y = 0.\nexport const skin = [0.85, 0.64, 0.5], shirt = [0.75, 0.2, 0.15], trousers = [0.16, 0.2, 0.32], dark = [0.08, 0.07, 0.06];\n"],
|
|
5
|
-
"mappings": "AACO,MAAMA,EAAO,CAAC,IAAM,IAAM,EAAG,EAAGC,EAAQ,CAAC,IAAM,GAAK,GAAI,EAAGC,EAAW,CAAC,IAAM,GAAK,GAAI,EAAGC,EAAO,CAAC,IAAM,IAAM,GAAI",
|
|
6
|
-
"names": ["skin", "shirt", "trousers", "dark"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{horizontalPosition as m}from"./horizontalPosition.js";function b(h,i,n){const s=new Date(h).getTime();if(!Number.isFinite(s)||!Number.isFinite(i)||Math.abs(i)>90||!Number.isFinite(n)||Math.abs(n)>180)throw new Error("Invalid solar date or location");const o=Math.PI/180,e=s/864e5-10957.5,t=(357.5291+.98560028*e)*o,a=t+(1.9148*Math.sin(t)+.02*Math.sin(2*t)+3e-4*Math.sin(3*t)+102.9372+180)*o,r=23.4397*o,c=Math.asin(Math.sin(a)*Math.sin(r)),M=Math.atan2(Math.sin(a)*Math.cos(r),Math.cos(a));return m(e,i,n,M,c)}export{b as solarPosition};
|
|
2
|
-
//# sourceMappingURL=solarPosition.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/solarPosition.js"],
|
|
4
|
-
"sourcesContent": ["import { horizontalPosition } from \"./horizontalPosition.js\";\n\n// Solar centre, without atmospheric refraction.\n\nexport function solarPosition(date, lat, lng) {\n const time = new Date(date).getTime();\n if (!Number.isFinite(time) || !Number.isFinite(lat) || Math.abs(lat) > 90 ||\n !Number.isFinite(lng) || Math.abs(lng) > 180) throw new Error('Invalid solar date or location');\n const rad = Math.PI / 180, d = time / 86400000 - 10957.5;\n const mean = (357.5291 + 0.98560028 * d) * rad;\n const longitude = mean + (1.9148 * Math.sin(mean) + 0.02 * Math.sin(2 * mean) +\n 0.0003 * Math.sin(3 * mean) + 102.9372 + 180) * rad;\n const obliquity = 23.4397 * rad;\n const declination = Math.asin(Math.sin(longitude) * Math.sin(obliquity));\n const ascension = Math.atan2(Math.sin(longitude) * Math.cos(obliquity), Math.cos(longitude));\n return horizontalPosition(d, lat, lng, ascension, declination);\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,sBAAAA,MAA0B,0BAI5B,SAASC,EAAcC,EAAMC,EAAKC,EAAK,CAC5C,MAAMC,EAAO,IAAI,KAAKH,CAAI,EAAE,QAAQ,EACpC,GAAI,CAAC,OAAO,SAASG,CAAI,GAAK,CAAC,OAAO,SAASF,CAAG,GAAK,KAAK,IAAIA,CAAG,EAAI,IACrE,CAAC,OAAO,SAASC,CAAG,GAAK,KAAK,IAAIA,CAAG,EAAI,IAAK,MAAM,IAAI,MAAM,gCAAgC,EAChG,MAAME,EAAM,KAAK,GAAK,IAAKC,EAAIF,EAAO,MAAW,QAC3CG,GAAQ,SAAW,UAAaD,GAAKD,EACrCG,EAAYD,GAAQ,OAAS,KAAK,IAAIA,CAAI,EAAI,IAAO,KAAK,IAAI,EAAIA,CAAI,EAC1E,KAAS,KAAK,IAAI,EAAIA,CAAI,EAAI,SAAW,KAAOF,EAC5CI,EAAY,QAAUJ,EACtBK,EAAc,KAAK,KAAK,KAAK,IAAIF,CAAS,EAAI,KAAK,IAAIC,CAAS,CAAC,EACjEE,EAAY,KAAK,MAAM,KAAK,IAAIH,CAAS,EAAI,KAAK,IAAIC,CAAS,EAAG,KAAK,IAAID,CAAS,CAAC,EAC3F,OAAOT,EAAmBO,EAAGJ,EAAKC,EAAKQ,EAAWD,CAAW,CAC/D",
|
|
6
|
-
"names": ["horizontalPosition", "solarPosition", "date", "lat", "lng", "time", "rad", "d", "mean", "longitude", "obliquity", "declination", "ascension"]
|
|
7
|
-
}
|
package/dist/utils/sortMeshes.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function t(o){return o.sort((r,e)=>+!!e.ground-+!!r.ground||(r.ground&&e.ground?(r.renderOrder||0)-(e.renderOrder||0)||r.tile.coords.z-e.tile.coords.z:0)||Number(r.program.transparent)-Number(e.program.transparent)||(r.program.transparent?(r.renderOrder||0)-(e.renderOrder||0)||e._sortDepth-r._sortDepth||r.id-e.id:(r._sortDepth??0)-(e._sortDepth??0)||r.id-e.id))}export{t as sortMeshes};
|
|
2
|
-
//# sourceMappingURL=sortMeshes.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/sortMeshes.js"],
|
|
4
|
-
"sourcesContent": ["\nexport function sortMeshes(meshes) {\n return meshes.sort((a, b) => Number(Boolean(b.ground)) - Number(Boolean(a.ground)) ||\n (a.ground && b.ground ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\n a.tile.coords.z - b.tile.coords.z : 0) ||\n Number(a.program.transparent) - Number(b.program.transparent) ||\n (a.program.transparent\n ? (a.renderOrder || 0) - (b.renderOrder || 0) ||\n b._sortDepth - a._sortDepth || a.id - b.id\n : (a._sortDepth ?? 0) - (b._sortDepth ?? 0) || a.id - b.id)\n );\n}\n"],
|
|
5
|
-
"mappings": "AACO,SAASA,EAAWC,EAAQ,CACjC,OAAOA,EAAO,KAAK,CAACC,EAAGC,IAAM,CAAO,EAAQA,EAAE,OAAW,CAAO,EAAQD,EAAE,SACvEA,EAAE,QAAUC,EAAE,QAAUD,EAAE,aAAe,IAAMC,EAAE,aAAe,IAC/DD,EAAE,KAAK,OAAO,EAAIC,EAAE,KAAK,OAAO,EAAI,IACtC,OAAOD,EAAE,QAAQ,WAAW,EAAI,OAAOC,EAAE,QAAQ,WAAW,IAC3DD,EAAE,QAAQ,aACNA,EAAE,aAAe,IAAMC,EAAE,aAAe,IAC3CA,EAAE,WAAaD,EAAE,YAAcA,EAAE,GAAKC,EAAE,IACrCD,EAAE,YAAc,IAAMC,EAAE,YAAc,IAAMD,EAAE,GAAKC,EAAE,GAC5D,CACF",
|
|
6
|
-
"names": ["sortMeshes", "meshes", "a", "b"]
|
|
7
|
-
}
|
package/dist/utils/speed.js
DELETED
package/dist/utils/speed.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/speed.js"],
|
|
4
|
-
"sourcesContent": ["// Pure helpers of the 'traffic' type: lane interpolation and vehicle scheduling.\n/** Default urban speed (m/s) used to turn a lane's hourly `flow` into vehicles on the road. */\nexport const speed = 8;\n"],
|
|
5
|
-
"mappings": "AAEO,MAAMA,EAAQ",
|
|
6
|
-
"names": ["speed"]
|
|
7
|
-
}
|
package/dist/utils/startZoom.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/startZoom.js"],
|
|
4
|
-
"sourcesContent": ["/** Preserve the outgoing tile level before Leaflet changes its logical zoom. */\n\nexport function startZoom() {\n this._zoomLevel = null;\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,GAAY,CAC1B,KAAK,WAAa,IACpB",
|
|
6
|
-
"names": ["startZoom"]
|
|
7
|
-
}
|
package/dist/utils/taillight.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function u(m,t){const o=t.max.x-t.min.x+1,c=t.max.y-t.min.y+1,l=new Float32Array(o*c*65536).fill(-1e9);let r=1/0,a=-1/0;for(const[f,s]of m){const[x,y]=f.split("/").map(Number),h=(y-t.min.y)*256*o*256+(x-t.min.x)*256;for(let i=0;i<256;i++)for(let e=0;e<256;e++){const n=s[i*256+e];!Number.isFinite(n)||n<=-1e3||(l[h+i*o*256+e]=n,r=Math.min(r,n),a=Math.max(a,n))}}return{elevations:l,low:r,high:a}}export{u as terrainAtlas};
|
|
2
|
-
//# sourceMappingURL=terrainAtlas.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/terrainAtlas.js"],
|
|
4
|
-
"sourcesContent": ["/** Float32 DEM atlas; missing samples retain the shader no-data sentinel. */\n\nexport function terrainAtlas(tiles, bounds) {\n const columns = bounds.max.x - bounds.min.x + 1, rows = bounds.max.y - bounds.min.y + 1;\n const elevations = new Float32Array(columns * rows * 65536).fill(-1e9);\n let low = Infinity, high = -Infinity;\n for (const [key, values] of tiles) {\n const [x, y] = key.split('/').map(Number);\n const start = (y - bounds.min.y) * 256 * columns * 256 + (x - bounds.min.x) * 256;\n for (let row = 0; row < 256; row++) {\n for (let column = 0; column < 256; column++) {\n const value = values[row * 256 + column];\n if (!Number.isFinite(value) || value <= -1000) continue;\n elevations[start + row * columns * 256 + column] = value;\n low = Math.min(low, value);\n high = Math.max(high, value);\n }\n }\n }\n return { elevations, low, high };\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAaC,EAAOC,EAAQ,CAC1C,MAAMC,EAAUD,EAAO,IAAI,EAAIA,EAAO,IAAI,EAAI,EAAGE,EAAOF,EAAO,IAAI,EAAIA,EAAO,IAAI,EAAI,EAChFG,EAAa,IAAI,aAAaF,EAAUC,EAAO,KAAK,EAAE,KAAK,IAAI,EACrE,IAAIE,EAAM,IAAUC,EAAO,KAC3B,SAAW,CAACC,EAAKC,CAAM,IAAKR,EAAO,CACjC,KAAM,CAAC,EAAG,CAAC,EAAIO,EAAI,MAAM,GAAG,EAAE,IAAI,MAAM,EAClCE,GAAS,EAAIR,EAAO,IAAI,GAAK,IAAMC,EAAU,KAAO,EAAID,EAAO,IAAI,GAAK,IAC9E,QAASS,EAAM,EAAGA,EAAM,IAAKA,IAC3B,QAASC,EAAS,EAAGA,EAAS,IAAKA,IAAU,CAC3C,MAAMC,EAAQJ,EAAOE,EAAM,IAAMC,CAAM,EACnC,CAAC,OAAO,SAASC,CAAK,GAAKA,GAAS,OACxCR,EAAWK,EAAQC,EAAMR,EAAU,IAAMS,CAAM,EAAIC,EACnDP,EAAM,KAAK,IAAIA,EAAKO,CAAK,EACzBN,EAAO,KAAK,IAAIA,EAAMM,CAAK,EAC7B,CAEJ,CACA,MAAO,CAAE,WAAAR,EAAY,IAAAC,EAAK,KAAAC,CAAK,CACjC",
|
|
6
|
-
"names": ["terrainAtlas", "tiles", "bounds", "columns", "rows", "elevations", "low", "high", "key", "values", "start", "row", "column", "value"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function g(a,M){const f=a.x-.5,c=a.y-.5,e=Math.floor(f),l=Math.floor(c),o=f-e,h=c-l,r=(n,i)=>{const m=Math.floor(n/256),v=Math.floor(i/256),x=M.get(`${m}/${v}`);if(!x)return null;const u=x[(i-v*256)*256+n-m*256];return Number.isFinite(u)&&u>-1e3?u:null},t=[r(e,l),r(e+1,l),r(e,l+1),r(e+1,l+1)],s=t.map((n,i)=>Number.isFinite(n)?i:-1).filter(n=>n>=0);return s.length?s.length<4?t[s[0]]:(t[0]*(1-o)+t[1]*o)*(1-h)+(t[2]*(1-o)+t[3]*o)*h:null}export{g as terrainElevation};
|
|
2
|
-
//# sourceMappingURL=terrainElevation.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/terrainElevation.js"],
|
|
4
|
-
"sourcesContent": ["/** Bilinear DEM sampling, with the original first-valid-neighbour no-data rule. */\n\nexport function terrainElevation(point, tiles) {\n const x = point.x - 0.5, y = point.y - 0.5;\n const x0 = Math.floor(x), y0 = Math.floor(y);\n const fx = x - x0, fy = y - y0;\n const sample = (px, py) => {\n const tileX = Math.floor(px / 256), tileY = Math.floor(py / 256);\n const tile = tiles.get(`${tileX}/${tileY}`);\n if (!tile) return null;\n const elevation = tile[(py - tileY * 256) * 256 + px - tileX * 256];\n return Number.isFinite(elevation) && elevation > -1000 ? elevation : null;\n };\n const values = [sample(x0, y0), sample(x0 + 1, y0), sample(x0, y0 + 1), sample(x0 + 1, y0 + 1)];\n const valid = values.map((value, i) => Number.isFinite(value) ? i : -1).filter(i => i >= 0);\n if (!valid.length) return null;\n if (valid.length < 4) return values[valid[0]];\n return (values[0] * (1 - fx) + values[1] * fx) * (1 - fy) +\n (values[2] * (1 - fx) + values[3] * fx) * fy;\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAiBC,EAAOC,EAAO,CAC7C,MAAMC,EAAIF,EAAM,EAAI,GAAKG,EAAIH,EAAM,EAAI,GACjCI,EAAK,KAAK,MAAMF,CAAC,EAAGG,EAAK,KAAK,MAAMF,CAAC,EACrCG,EAAKJ,EAAIE,EAAIG,EAAKJ,EAAIE,EACtBG,EAAS,CAACC,EAAIC,IAAO,CACzB,MAAMC,EAAQ,KAAK,MAAMF,EAAK,GAAG,EAAGG,EAAQ,KAAK,MAAMF,EAAK,GAAG,EACzDG,EAAOZ,EAAM,IAAI,GAAGU,CAAK,IAAIC,CAAK,EAAE,EAC1C,GAAI,CAACC,EAAM,OAAO,KAClB,MAAMC,EAAYD,GAAMH,EAAKE,EAAQ,KAAO,IAAMH,EAAKE,EAAQ,GAAG,EAClE,OAAO,OAAO,SAASG,CAAS,GAAKA,EAAY,KAAQA,EAAY,IACvE,EACMC,EAAS,CAACP,EAAOJ,EAAIC,CAAE,EAAGG,EAAOJ,EAAK,EAAGC,CAAE,EAAGG,EAAOJ,EAAIC,EAAK,CAAC,EAAGG,EAAOJ,EAAK,EAAGC,EAAK,CAAC,CAAC,EACxFW,EAAQD,EAAO,IAAI,CAACE,EAAO,IAAM,OAAO,SAASA,CAAK,EAAI,EAAI,EAAE,EAAE,OAAOC,GAAKA,GAAK,CAAC,EAC1F,OAAKF,EAAM,OACPA,EAAM,OAAS,EAAUD,EAAOC,EAAM,CAAC,CAAC,GACpCD,EAAO,CAAC,GAAK,EAAIT,GAAMS,EAAO,CAAC,EAAIT,IAAO,EAAIC,IACnDQ,EAAO,CAAC,GAAK,EAAIT,GAAMS,EAAO,CAAC,EAAIT,GAAMC,EAHlB,IAI5B",
|
|
6
|
-
"names": ["terrainElevation", "point", "tiles", "x", "y", "x0", "y0", "fx", "fy", "sample", "px", "py", "tileX", "tileY", "tile", "elevation", "values", "valid", "value", "i"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function f(a){const o=[],u=[],l=[],c=[];for(let r=0;r<=a;r++)for(let t=0;t<=a;t++)if(o.push(t/a,0,r/a),u.push(0,1,0),l.push(t/a,r/a),r<a&&t<a){const e=r*(a+1)+t,p=e+1,n=e+a+1,w=n+1;c.push(e,n,p,p,n,w)}return{position:{size:3,data:new Float32Array(o)},normal:{size:3,data:new Float32Array(u)},uv:{size:2,data:new Float32Array(l)},index:{data:new Uint16Array(c)}}}export{f as terrainGrid};
|
|
2
|
-
//# sourceMappingURL=terrainGrid.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/terrainGrid.js"],
|
|
4
|
-
"sourcesContent": ["/** Unit tile grid; the vertex shader supplies the elevation. */\n\nexport function terrainGrid(divisions) {\n const positions = [], normals = [], uvs = [], indices = [];\n for (let row = 0; row <= divisions; row++) {\n for (let column = 0; column <= divisions; column++) {\n positions.push(column / divisions, 0, row / divisions);\n normals.push(0, 1, 0);\n uvs.push(column / divisions, row / divisions);\n if (row < divisions && column < divisions) {\n const a = row * (divisions + 1) + column;\n const b = a + 1, c = a + divisions + 1, d = c + 1;\n indices.push(a, c, b, b, c, d);\n }\n }\n }\n return {\n position: { size: 3, data: new Float32Array(positions) },\n normal: { size: 3, data: new Float32Array(normals) },\n uv: { size: 2, data: new Float32Array(uvs) },\n index: { data: new Uint16Array(indices) },\n };\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAYC,EAAW,CACrC,MAAMC,EAAY,CAAC,EAAGC,EAAU,CAAC,EAAGC,EAAM,CAAC,EAAGC,EAAU,CAAC,EACzD,QAASC,EAAM,EAAGA,GAAOL,EAAWK,IAClC,QAASC,EAAS,EAAGA,GAAUN,EAAWM,IAIxC,GAHAL,EAAU,KAAKK,EAASN,EAAW,EAAGK,EAAML,CAAS,EACrDE,EAAQ,KAAK,EAAG,EAAG,CAAC,EACpBC,EAAI,KAAKG,EAASN,EAAWK,EAAML,CAAS,EACxCK,EAAML,GAAaM,EAASN,EAAW,CACzC,MAAMO,EAAIF,GAAOL,EAAY,GAAKM,EAC5BE,EAAID,EAAI,EAAGE,EAAIF,EAAIP,EAAY,EAAGU,EAAID,EAAI,EAChDL,EAAQ,KAAKG,EAAGE,EAAGD,EAAGA,EAAGC,EAAGC,CAAC,CAC/B,CAGJ,MAAO,CACL,SAAU,CAAE,KAAM,EAAG,KAAM,IAAI,aAAaT,CAAS,CAAE,EACvD,OAAQ,CAAE,KAAM,EAAG,KAAM,IAAI,aAAaC,CAAO,CAAE,EACnD,GAAI,CAAE,KAAM,EAAG,KAAM,IAAI,aAAaC,CAAG,CAAE,EAC3C,MAAO,CAAE,KAAM,IAAI,YAAYC,CAAO,CAAE,CAC1C,CACF",
|
|
6
|
-
"names": ["terrainGrid", "divisions", "positions", "normals", "uvs", "indices", "row", "column", "a", "b", "c", "d"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function r(e){return{addressModeU:e.wrapS===33071?"clamp-to-edge":e.wrapS===33648?"mirror-repeat":"repeat",addressModeV:e.wrapT===33071?"clamp-to-edge":e.wrapT===33648?"mirror-repeat":"repeat",magFilter:e.magFilter===9728?"nearest":"linear",minFilter:e.minFilter===9728||e.minFilter===9984||e.minFilter===9986?"nearest":"linear"}}export{r as textureSampler};
|
|
2
|
-
//# sourceMappingURL=textureSampler.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/textureSampler.js"],
|
|
4
|
-
"sourcesContent": ["/** Translate glTF sampler constants into WebGPU sampler options. */\n\nexport function textureSampler(sampler) {\n return {\n addressModeU: sampler.wrapS === 33071 ? 'clamp-to-edge' : sampler.wrapS === 33648 ? 'mirror-repeat' : 'repeat',\n addressModeV: sampler.wrapT === 33071 ? 'clamp-to-edge' : sampler.wrapT === 33648 ? 'mirror-repeat' : 'repeat',\n magFilter: sampler.magFilter === 9728 ? 'nearest' : 'linear',\n minFilter: sampler.minFilter === 9728 || sampler.minFilter === 9984 || sampler.minFilter === 9986 ? 'nearest' : 'linear',\n };\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAeC,EAAS,CACtC,MAAO,CACL,aAAcA,EAAQ,QAAU,MAAQ,gBAAkBA,EAAQ,QAAU,MAAQ,gBAAkB,SACtG,aAAcA,EAAQ,QAAU,MAAQ,gBAAkBA,EAAQ,QAAU,MAAQ,gBAAkB,SACtG,UAAWA,EAAQ,YAAc,KAAO,UAAY,SACpD,UAAWA,EAAQ,YAAc,MAAQA,EAAQ,YAAc,MAAQA,EAAQ,YAAc,KAAO,UAAY,QAClH,CACF",
|
|
6
|
-
"names": ["textureSampler", "sampler"]
|
|
7
|
-
}
|
package/dist/utils/tileId.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function f(t,e,r){if(![t,e,r].every(Number.isInteger)||t<0||t>26||e<0||r<0||e>=2**t||r>=2**t)throw new Error("Invalid PMTiles tile coordinates");let o=(4**t-1)/3;const n=2**t;for(let i=n/2;i>=1;i/=2){const l=e&i?1:0,s=r&i?1:0;o+=i*i*(3*l^s),s||(l&&(e=n-1-e,r=n-1-r),[e,r]=[r,e])}return o}export{f as tileId};
|
|
2
|
-
//# sourceMappingURL=tileId.js.map
|
package/dist/utils/tileId.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/tileId.js"],
|
|
4
|
-
"sourcesContent": ["/** Cumulative Hilbert ID for an archive tile. */\n\nexport function tileId(z, x, y) {\n if (![z, x, y].every(Number.isInteger) || z < 0 || z > 26 ||\n x < 0 || y < 0 || x >= 2 ** z || y >= 2 ** z) throw new Error('Invalid PMTiles tile coordinates');\n let id = (4 ** z - 1) / 3;\n const n = 2 ** z;\n // Same cumulative Hilbert ordering used by build/pmtiles.js.\n for (let s = n / 2; s >= 1; s /= 2) {\n const rx = (x & s) ? 1 : 0, ry = (y & s) ? 1 : 0;\n id += s * s * ((3 * rx) ^ ry);\n if (!ry) {\n if (rx) { x = n - 1 - x; y = n - 1 - y; }\n [x, y] = [y, x];\n }\n }\n return id;\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAOC,EAAGC,EAAGC,EAAG,CAC9B,GAAI,CAAC,CAACF,EAAGC,EAAGC,CAAC,EAAE,MAAM,OAAO,SAAS,GAAKF,EAAI,GAAKA,EAAI,IACrDC,EAAI,GAAKC,EAAI,GAAKD,GAAK,GAAKD,GAAKE,GAAK,GAAKF,EAAG,MAAM,IAAI,MAAM,kCAAkC,EAClG,IAAIG,GAAM,GAAKH,EAAI,GAAK,EACxB,MAAM,EAAI,GAAKA,EAEf,QAASI,EAAI,EAAI,EAAGA,GAAK,EAAGA,GAAK,EAAG,CAClC,MAAMC,EAAMJ,EAAIG,EAAK,EAAI,EAAGE,EAAMJ,EAAIE,EAAK,EAAI,EAC/CD,GAAMC,EAAIA,GAAM,EAAIC,EAAMC,GACrBA,IACCD,IAAMJ,EAAI,EAAI,EAAIA,EAAGC,EAAI,EAAI,EAAIA,GACrC,CAACD,EAAGC,CAAC,EAAI,CAACA,EAAGD,CAAC,EAElB,CACA,OAAOE,CACT",
|
|
6
|
-
"names": ["tileId", "z", "x", "y", "id", "s", "rx", "ry"]
|
|
7
|
-
}
|
package/dist/utils/toLanes.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const o=({features:i=[]})=>i.flatMap(({geometry:n,properties:t})=>(n?.type==="LineString"?[n.coordinates]:n?.type==="MultiLineString"?n.coordinates:[]).map(a=>({latlngs:a.map(([e,l])=>[l,e]),properties:t??{},elevation:t?.elevation})));export{o as toLanes};
|
|
2
|
-
//# sourceMappingURL=toLanes.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/toLanes.js"],
|
|
4
|
-
"sourcesContent": ["// GeoJSON (Multi)LineStrings become lanes ({latlngs, properties, elevation?}); prepare() adds `points` ([x, z, ground]),\n// `lengths` and `length` in layer-local metres.\n\nexport const toLanes = ({ features = [] }) => features.flatMap(({ geometry, properties }) => {\n const lines = geometry?.type === 'LineString' ? [geometry.coordinates] : geometry?.type === 'MultiLineString' ? geometry.coordinates : [];\n return lines.map(line => ({ latlngs: line.map(([lng, lat]) => [lat, lng]), properties: properties ?? {}, elevation: properties?.elevation }));\n});\n"],
|
|
5
|
-
"mappings": "AAGO,MAAMA,EAAU,CAAC,CAAE,SAAAC,EAAW,CAAC,CAAE,IAAMA,EAAS,QAAQ,CAAC,CAAE,SAAAC,EAAU,WAAAC,CAAW,KACvED,GAAU,OAAS,aAAe,CAACA,EAAS,WAAW,EAAIA,GAAU,OAAS,kBAAoBA,EAAS,YAAc,CAAC,GAC3H,IAAIE,IAAS,CAAE,QAASA,EAAK,IAAI,CAAC,CAACC,EAAKC,CAAG,IAAM,CAACA,EAAKD,CAAG,CAAC,EAAG,WAAYF,GAAc,CAAC,EAAG,UAAWA,GAAY,SAAU,EAAE,CAC7I",
|
|
6
|
-
"names": ["toLanes", "features", "geometry", "properties", "line", "lng", "lat"]
|
|
7
|
-
}
|
package/dist/utils/toSRGB.js
DELETED
package/dist/utils/toSRGB.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/toSRGB.js"],
|
|
4
|
-
"sourcesContent": ["export const toSRGB = value => value <= 0.0031308 ? value * 12.92 : 1.055 * value ** (1 / 2.4) - 0.055;\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAASC,GAASA,GAAS,SAAYA,EAAQ,MAAQ,MAAQA,GAAU,kBAAW",
|
|
6
|
-
"names": ["toSRGB", "value"]
|
|
7
|
-
}
|
package/dist/utils/tooltip.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const n=({properties:e})=>{const t=document.createElement("div");return t.style.whiteSpace="pre-line",t.textContent=[e.name,e.departure&&`Departure ${e.departure} ${e.timetable.timeZone}`,e.description].filter(Boolean).join(`
|
|
2
|
-
`),t};export{n as tooltip};
|
|
3
|
-
//# sourceMappingURL=tooltip.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/tooltip.js"],
|
|
4
|
-
"sourcesContent": ["export const tooltip = ({ properties: p }) => {\n const content = document.createElement('div');\n content.style.whiteSpace = 'pre-line';\n content.textContent = [p.name, p.departure && `Departure ${p.departure} ${p.timetable.timeZone}`, p.description].filter(Boolean).join('\\n');\n return content;\n};\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAAU,CAAC,CAAE,WAAYC,CAAE,IAAM,CAC5C,MAAMC,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,MAAM,WAAa,WAC3BA,EAAQ,YAAc,CAACD,EAAE,KAAMA,EAAE,WAAa,aAAaA,EAAE,SAAS,IAAIA,EAAE,UAAU,QAAQ,GAAIA,EAAE,WAAW,EAAE,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI,EACnIC,CACT",
|
|
6
|
-
"names": ["tooltip", "p", "content"]
|
|
7
|
-
}
|
package/dist/utils/traffic.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import*as U from"./createMesh.js";import*as B from"./disposeMesh.js";import*as G from"./setHighlight.js";import*as _ from"./showFeature.js";import{update as P}from"./update.js";import{along as C}from"./along.js";import{build as E}from"./build.js";import{computeBounds as k}from"./computeBounds.js";import{routeGeometry as S}from"./routeGeometry.js";import{toLanes as z}from"./toLanes.js";import{tripsAt as R}from"./tripsAt.js";import{underEntry as q}from"./underEntry.js";import{getElevation as D}from"./getElevation.js";function x(e){let r={live:!0};return e.layer._map?.eachLayer(n=>{n.control?.time&&(r=n.control)}),{live:r.live,time:r.live?new Date:r.time}}function b(e,r,n,f,l=0){const u=U.createMesh(e.layer,r,f,l);return u.extras.featureFaces=n,u}function s(e,r){r&&(e.layer.highlightedFeature?.mesh===r&&(G.setHighlight(e.layer,null),e.layer.hoveredFeature=null,_.showFeature(e.layer,null)),B.disposeMesh(e.layer,r))}function T(e,r){e.status.textContent=`Error: ${r.message}`,e.status.setAttribute("role","alert"),console.error("Traffic layer",r)}function v(e){const{layer:r,lanes:n}=e,f=r._map._terrain3D?._terrainReady&&r._map._terrain3D,l=r.root.position[1];for(const u of n)u.points.forEach((i,o)=>{const p=f&&(u.elevation??D(f,u.latlngs[o]));i[2]=Number.isFinite(p)&&Number.isFinite(l)?p-l:0});e.lanesDirty=!0,e.nextCheck=-1/0}function I(e){const{layer:r,lanes:n}=e,f=r._map.options.crs,l=f.project(r.location),u=Math.cos(r.location.lat*Math.PI/180);for(const i of n){i.points=i.latlngs.map(([o,p])=>{const c=f.project(new L.LatLng(o,p));return[(c.x-l.x)*u,-(c.y-l.y)*u,0]}),i.lengths=[0];for(let o=1;o<i.points.length;o++)i.lengths.push(i.lengths[o-1]+Math.hypot(i.points[o][0]-i.points[o-1][0],i.points[o][1]-i.points[o-1][1]));i.length=i.lengths.at(-1)}v(e),s(e,e.route),e.route=null,e.tripsKey=null}function O(e){e.route=b(e,S(e.lanes),[],{emissive:[.03,.25,.3]})}function $(e){const{trips:r,model:n,vertices:f}=e;if(s(e,e.mesh),e.mesh=null,!r.length)return;const l=r.flatMap((i,o)=>E(n(o)).color),u=l.length/3;e.mesh=b(e,{position:l.map(()=>0),normal:l.map(()=>0),color:l},r.map((i,o)=>({id:i.id,properties:i.properties,faceStart:o*f/3,faceEnd:(o+1)*f/3,vertexStart:o*f,vertexEnd:(o+1)*f})),{},GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_SRC),e.mesh.geometry.drawRange.count=u,w(e)}function w(e){const r={attributes:{position:{data:e.lanes.flatMap(n=>n.points.flatMap(([f,l,u])=>[f-20,u,l-20,f+20,u+5,l+20]))}}};k(r),e.mesh.geometry.bounds=r.bounds}function A(e){for(const r of[e.gpu?.params,e.gpu?.template,e.gpu?.points,e.gpu?.vehicles])r?.destroy();e.gpu=null}function y(e,r){const n=e.createBuffer({size:Math.max(16,r.byteLength),usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST});return e.queue.writeBuffer(n,0,r),n}function K(e){const{device:r}=e.layer.renderer;if(e.gpu?.device!==r&&(A(e),e.gpu={device:r,pipeline:r.createComputePipeline({layout:"auto",compute:{module:r.createShaderModule({code:e.shader}),entryPoint:"main"}}),params:r.createBuffer({size:16,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST}),template:y(r,new Float32Array([...e.template.position,...e.template.normal]))},e.lanesDirty=!0),e.lanesDirty){const i=new Float32Array(e.lanes.reduce((p,c)=>p+c.points.length,0)*4);let o=0;for(const p of e.lanes)p.start=o/4,p.points.forEach((c,a)=>{i.set([c[0],c[1],c[2],p.lengths[a]],o),o+=4});e.gpu.points?.destroy(),e.gpu.points=y(r,i),e.lanesDirty=!1}const n=new Float32Array(e.trips.length*4),f=new Uint32Array(n.buffer);e.trips.forEach((i,o)=>{f[o*4]=i.lane.start,f[o*4+1]=i.lane.points.length,n[o*4+2]=i.distance,n[o*4+3]=i.speed,e.mesh.extras.featureFaces[o].properties=i.properties}),e.gpu.vehicles?.size>=n.byteLength?r.queue.writeBuffer(e.gpu.vehicles,0,n):(e.gpu.vehicles?.destroy(),e.gpu.vehicles=y(r,n));const{position:l,normal:u}=e.mesh.geometry.attributes;e.gpu.bindGroup=r.createBindGroup({layout:e.gpu.pipeline.getBindGroupLayout(0),entries:[e.gpu.params,e.gpu.template,e.gpu.points,e.gpu.vehicles,l.buffer,u.buffer].map((i,o)=>({binding:o,resource:{buffer:i}}))})}function N(e,r){const{device:n}=e.gpu;e.paramFloats[0]=e.elapsed=r,e.paramFloats[1]=e.side,e.paramInts[2]=e.vertices,e.paramInts[3]=e.trips.length*e.vertices,n.queue.writeBuffer(e.gpu.params,0,e.params);const f=n.createCommandEncoder(),l=f.beginComputePass();l.setPipeline(e.gpu.pipeline),l.setBindGroup(0,e.gpu.bindGroup),l.dispatchWorkgroups(Math.ceil(e.paramInts[3]/64)),l.end(),n.queue.submit([f.finish()]),e.stale=!0}function F(e,r){const{points:n,lengths:f,length:l}=r.lane;let u=r.distance+e.elapsed*r.speed;u-=l*Math.floor(u/l);const{x:i,y:o,z:p,dx:c,dz:a}=C(n,f,u);return{x:i-a*e.side,y:o,z:p+c*e.side,dx:c,dz:a}}function ie(e){if(!e.mesh||!e.stale)return;e.stale=!1;const{position:r,normal:n}=e.mesh.geometry.attributes;e.trips.forEach((f,l)=>{const{x:u,y:i,z:o,dx:p,dz:c}=F(e,f);for(let a=0,m=l*e.stride;a<e.stride;a+=3,m+=3){const t=e.template.position[a],h=e.template.position[a+2],d=e.template.normal[a],g=e.template.normal[a+2];r.data[m]=u-t*c-h*p,r.data[m+1]=i+e.template.position[a+1],r.data[m+2]=o+t*p-h*c,n.data[m]=-d*c-g*p,n.data[m+1]=e.template.normal[a+1],n.data[m+2]=d*p-g*c}})}function le(e){if(e.frame=void 0,!e.ready||!e.layer._map)return;if(!e.layer.renderer){e.frame=requestAnimationFrame(e.tick);return}e.mesh&&!(e.mesh.geometry.attributes.position.buffer.usage&GPUBufferUsage.STORAGE)&&(e.tripsKey=null,e.nextCheck=-1/0);const{live:r,time:n}=x(e),f=n?.getTime(),l=Number.isFinite(f);let u=!1;if(!r||!l||!(f>=e.rebasedAt&&f<e.nextCheck)){let i;try{e.trips=l?R(n,e.lanes,e.velocity):[],i=l?e.loaded?`${e.trips.length} vehicle${e.trips.length===1?"":"s"}${e.loaded.note?` \xB7 ${e.loaded.note}`:""}`:"Loading\u2026":"Select a valid simulation date"}catch(p){return T(e,p)}e.rebasedAt=f,e.nextCheck=f+1e3;const o=e.trips.map(p=>p.id).join();u=o!==e.tripsKey||e.outline&&!e.route&&e.lanes.length,e.outline&&!e.route&&e.lanes.length&&O(e),o!==e.tripsKey&&($(e),e.tripsKey=o),e.mesh&&K(e),e.status.textContent!==i&&(e.status.textContent=i),e.status.removeAttribute("role")}e.mesh&&N(e,(f-e.rebasedAt)/1e3),e.mesh&&e.lights&&(!r||!(performance.now()-e.litAt<100))&&(e.litAt=performance.now(),e.mesh.extras.lights=e.trips.flatMap(i=>{const{x:o,y:p,z:c,dx:a,dz:m}=F(e,i);return e.lights.map(({position:[t,h,d],...g})=>({...g,position:[o-t*m-d*a,p+h,c+t*a-d*m]}))})),(e.mesh||u)&&P(e.layer),r&&l&&(e.frame=requestAnimationFrame(e.tick))}async function j(e,r,n){const f=new URL(e.url,document.baseURI).href;if(/\.m?js(?:[?#]|$)/i.test(e.url))return(await import(f)).default(r,e.layer,n);if(!e.file){const l=await fetch(f,{signal:n});if(!l.ok)throw new Error(`HTTP ${l.status}`);e.file=await l.json()}return e.file}function H(e,r,n){r.aborted||!e.layer._map||n===e.loaded||(e.loaded=n,e.lanes=z(n),I(e),e.frame||e.tick())}function Y(e,r){r.name!=="AbortError"&&T(e,r)}function W(e){const{time:r}=x(e);if(!Number.isFinite(r?.getTime()))return;e.request?.abort();const{signal:n}=e.request=new AbortController;j(e,r,n).then(H.bind(null,e,n),Y.bind(null,e))}function fe(e,r){r?.layer!==e.layer&&(cancelAnimationFrame(e.frame),W(e),e.tick())}function ue(e){e.lanes.length&&(v(e),s(e,e.route),e.route=null,e.mesh&&w(e),e.frame||e.tick())}function M(e){e.layer._map.off("simulationtimechange layerremove",e.update).on("simulationtimechange layerremove",e.update),e.layer._map.off("terrainchange",e.terrain).on("terrainchange",e.terrain),q(e.layer,e.status),e.update()}function pe(e){e.ready=!0,e.layer._map&&M(e)}function ce(e){e.ready&&M(e)}function ae(e){e.request?.abort(),cancelAnimationFrame(e.frame),e.frame=void 0,e.layer._map.off("simulationtimechange layerremove",e.update).off("terrainchange",e.terrain),s(e,e.mesh),s(e,e.route),e.mesh=e.route=null,delete e.layer._beforeRaycast,A(e),e.lanes=[],e.trips=[],e.tripsKey=e.loaded=null}export{ce as addTraffic,b as createTrafficMesh,A as destroyTrafficGpu,s as disposeTrafficObject,O as drawTrafficRoute,T as failTraffic,Y as failedTrafficLoad,j as fetchTrafficLanes,v as groundTraffic,W as loadTraffic,H as loadedTrafficLanes,F as locateTraffic,N as moveTraffic,ie as placeTraffic,I as prepareTraffic,pe as readyTraffic,K as rebaseTraffic,$ as rebuildTrafficMesh,ae as removeTraffic,M as startTraffic,le as tickTraffic,w as trafficBounds,x as trafficNow,y as trafficStorage,fe as updateTraffic,ue as updateTrafficTerrain};
|
|
2
|
-
//# sourceMappingURL=traffic.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/traffic.js"],
|
|
4
|
-
"sourcesContent": ["import * as createMeshApi from './createMesh.js';\r\nimport * as disposeMesh from './disposeMesh.js';\r\nimport * as setHighlight from './setHighlight.js';\r\nimport * as showFeature from './showFeature.js';\r\nimport { update as updateScene } from './update.js';\r\nimport { along } from './along.js';\r\nimport { build } from './build.js';\r\nimport { computeBounds } from './computeBounds.js';\r\nimport { routeGeometry } from './routeGeometry.js';\r\nimport { toLanes } from './toLanes.js';\r\nimport { tripsAt } from './tripsAt.js';\r\nimport { underEntry } from './underEntry.js';\r\nimport { getElevation } from './getElevation.js';\r\n\r\nexport function trafficNow(state) {\r\n let control = { live: true };\r\n state.layer._map?.eachLayer(other => { if (other.control?.time) control = other.control; });\r\n return { live: control.live, time: control.live ? new Date() : control.time };\r\n}\r\n\r\nexport function createTrafficMesh(state, data, featureFaces, material, usage = 0) {\r\n const result = createMeshApi.createMesh(state.layer, data, material, usage);\r\n result.extras.featureFaces = featureFaces;\r\n return result;\r\n}\r\n\r\nexport function disposeTrafficObject(state, object) {\r\n if (!object) return;\r\n if (state.layer.highlightedFeature?.mesh === object) {\r\n setHighlight.setHighlight(state.layer, null);\r\n state.layer.hoveredFeature = null;\r\n showFeature.showFeature(state.layer, null);\r\n };\r\n disposeMesh.disposeMesh(state.layer, object);\r\n}\r\n\r\nexport function failTraffic(state, error) {\r\n state.status.textContent = `Error: ${error.message}`;\r\n state.status.setAttribute('role', 'alert');\r\n console.error('Traffic layer', error);\r\n}\r\n\r\nexport function groundTraffic(state) {\r\n const { layer, lanes } = state;\r\n const terrain = layer._map._terrain3D?._terrainReady && layer._map._terrain3D, base = layer.root.position[1];\r\n for (const lane of lanes) lane.points.forEach((point, i) => {\r\n const elevation = terrain && (lane.elevation ?? getElevation(terrain, lane.latlngs[i]));\r\n point[2] = Number.isFinite(elevation) && Number.isFinite(base) ? elevation - base : 0;\r\n });\r\n state.lanesDirty = true;\r\n state.nextCheck = -Infinity;\r\n}\r\n\r\nexport function prepareTraffic(state) {\r\n const { layer, lanes } = state;\r\n const crs = layer._map.options.crs, origin = crs.project(layer.location);\r\n const metres = Math.cos(layer.location.lat * Math.PI / 180);\r\n for (const lane of lanes) {\r\n lane.points = lane.latlngs.map(([lat, lng]) => {\r\n const point = crs.project(new L.LatLng(lat, lng));\r\n return [(point.x - origin.x) * metres, -(point.y - origin.y) * metres, 0];\r\n });\r\n lane.lengths = [0];\r\n for (let i = 1; i < lane.points.length; i++) {\r\n lane.lengths.push(lane.lengths[i - 1] + Math.hypot(lane.points[i][0] - lane.points[i - 1][0], lane.points[i][1] - lane.points[i - 1][1]));\r\n }\r\n lane.length = lane.lengths.at(-1);\r\n }\r\n groundTraffic(state);\r\n disposeTrafficObject(state, state.route);\r\n state.route = null;\r\n state.tripsKey = null;\r\n}\r\n\r\nexport function drawTrafficRoute(state) {\r\n state.route = createTrafficMesh(state, routeGeometry(state.lanes), [], { emissive: [0.03, 0.25, 0.3] });\r\n}\r\n\r\nexport function rebuildTrafficMesh(state) {\r\n const { trips, model, vertices } = state;\r\n disposeTrafficObject(state, state.mesh);\r\n state.mesh = null;\r\n if (!trips.length) return;\r\n const color = trips.flatMap((trip, i) => build(model(i)).color), count = color.length / 3;\r\n state.mesh = createTrafficMesh(state, { position: color.map(() => 0), normal: color.map(() => 0), color },\r\n trips.map((trip, i) => ({\r\n id: trip.id, properties: trip.properties, faceStart: i * vertices / 3, faceEnd: (i + 1) * vertices / 3,\r\n vertexStart: i * vertices, vertexEnd: (i + 1) * vertices\r\n })), {}, GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC);\r\n state.mesh.geometry.drawRange.count = count;\r\n trafficBounds(state);\r\n}\r\n\r\nexport function trafficBounds(state) {\r\n const extent = { attributes: { position: { data: state.lanes.flatMap(lane => lane.points.flatMap(([x, z, y]) => [x - 20, y, z - 20, x + 20, y + 5, z + 20])) } } };\r\n computeBounds(extent);\r\n state.mesh.geometry.bounds = extent.bounds;\r\n}\r\n\r\nexport function destroyTrafficGpu(state) {\r\n for (const buffer of [state.gpu?.params, state.gpu?.template, state.gpu?.points, state.gpu?.vehicles]) buffer?.destroy();\r\n state.gpu = null;\r\n}\r\n\r\nexport function trafficStorage(device, data) {\r\n const buffer = device.createBuffer({ size: Math.max(16, data.byteLength), usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\r\n device.queue.writeBuffer(buffer, 0, data);\r\n return buffer;\r\n}\r\n\r\nexport function rebaseTraffic(state) {\r\n const { device } = state.layer.renderer;\r\n if (state.gpu?.device !== device) {\r\n destroyTrafficGpu(state);\r\n state.gpu = {\r\n device,\r\n pipeline: device.createComputePipeline({ layout: 'auto', compute: { module: device.createShaderModule({ code: state.shader }), entryPoint: 'main' } }),\r\n params: device.createBuffer({ size: 16, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST }),\r\n template: trafficStorage(device, new Float32Array([...state.template.position, ...state.template.normal])),\r\n };\r\n state.lanesDirty = true;\r\n }\r\n if (state.lanesDirty) {\r\n const data = new Float32Array(state.lanes.reduce((count, lane) => count + lane.points.length, 0) * 4);\r\n let offset = 0;\r\n for (const lane of state.lanes) {\r\n lane.start = offset / 4;\r\n lane.points.forEach((point, i) => { data.set([point[0], point[1], point[2], lane.lengths[i]], offset); offset += 4; });\r\n }\r\n state.gpu.points?.destroy();\r\n state.gpu.points = trafficStorage(device, data);\r\n state.lanesDirty = false;\r\n }\r\n const data = new Float32Array(state.trips.length * 4), index = new Uint32Array(data.buffer);\r\n state.trips.forEach((trip, i) => {\r\n index[i * 4] = trip.lane.start;\r\n index[i * 4 + 1] = trip.lane.points.length;\r\n data[i * 4 + 2] = trip.distance;\r\n data[i * 4 + 3] = trip.speed;\r\n state.mesh.extras.featureFaces[i].properties = trip.properties;\r\n });\r\n if (state.gpu.vehicles?.size >= data.byteLength) device.queue.writeBuffer(state.gpu.vehicles, 0, data);\r\n else {\r\n state.gpu.vehicles?.destroy();\r\n state.gpu.vehicles = trafficStorage(device, data);\r\n }\r\n const { position, normal } = state.mesh.geometry.attributes;\r\n state.gpu.bindGroup = device.createBindGroup({\r\n layout: state.gpu.pipeline.getBindGroupLayout(0),\r\n entries: [state.gpu.params, state.gpu.template, state.gpu.points, state.gpu.vehicles, position.buffer, normal.buffer]\r\n .map((buffer, binding) => ({ binding, resource: { buffer } })),\r\n });\r\n}\r\n\r\nexport function moveTraffic(state, seconds) {\r\n const { device } = state.gpu;\r\n state.paramFloats[0] = state.elapsed = seconds;\r\n state.paramFloats[1] = state.side;\r\n state.paramInts[2] = state.vertices;\r\n state.paramInts[3] = state.trips.length * state.vertices;\r\n device.queue.writeBuffer(state.gpu.params, 0, state.params);\r\n const encoder = device.createCommandEncoder(), pass = encoder.beginComputePass();\r\n pass.setPipeline(state.gpu.pipeline);\r\n pass.setBindGroup(0, state.gpu.bindGroup);\r\n pass.dispatchWorkgroups(Math.ceil(state.paramInts[3] / 64));\r\n pass.end();\r\n device.queue.submit([encoder.finish()]);\r\n state.stale = true;\r\n}\r\n\r\nexport function locateTraffic(state, trip) {\r\n const { points, lengths, length } = trip.lane;\r\n let distance = trip.distance + state.elapsed * trip.speed;\r\n distance -= length * Math.floor(distance / length);\r\n const { x, y, z, dx, dz } = along(points, lengths, distance);\r\n return { x: x - dz * state.side, y, z: z + dx * state.side, dx, dz };\r\n}\r\n\r\nexport function placeTraffic(state) {\r\n if (!state.mesh || !state.stale) return;\r\n state.stale = false;\r\n const { position, normal } = state.mesh.geometry.attributes;\r\n state.trips.forEach((trip, i) => {\r\n const { x: cx, y, z: cz, dx, dz } = locateTraffic(state, trip);\r\n for (let k = 0, o = i * state.stride; k < state.stride; k += 3, o += 3) {\r\n const lx = state.template.position[k], lz = state.template.position[k + 2], nx = state.template.normal[k], nz = state.template.normal[k + 2];\r\n position.data[o] = cx - lx * dz - lz * dx;\r\n position.data[o + 1] = y + state.template.position[k + 1];\r\n position.data[o + 2] = cz + lx * dx - lz * dz;\r\n normal.data[o] = -nx * dz - nz * dx;\r\n normal.data[o + 1] = state.template.normal[k + 1];\r\n normal.data[o + 2] = nx * dx - nz * dz;\r\n }\r\n });\r\n}\r\n\r\nexport function tickTraffic(state) {\r\n state.frame = undefined;\r\n if (!state.ready || !state.layer._map) return;\r\n if (!state.layer.renderer) { state.frame = requestAnimationFrame(state.tick); return; }\r\n if (state.mesh && !(state.mesh.geometry.attributes.position.buffer.usage & GPUBufferUsage.STORAGE)) {\r\n state.tripsKey = null;\r\n state.nextCheck = -Infinity;\r\n }\r\n const { live, time } = trafficNow(state), ms = time?.getTime(), valid = Number.isFinite(ms);\r\n let changed = false;\r\n if (!live || !valid || !(ms >= state.rebasedAt && ms < state.nextCheck)) {\r\n let text;\r\n try {\r\n state.trips = valid ? tripsAt(time, state.lanes, state.velocity) : [];\r\n text = !valid ? 'Select a valid simulation date' : !state.loaded ? 'Loading\u2026' :\r\n `${state.trips.length} vehicle${state.trips.length === 1 ? '' : 's'}${state.loaded.note ? ` \u00B7 ${state.loaded.note}` : ''}`;\r\n } catch (error) { return failTraffic(state, error); }\r\n state.rebasedAt = ms;\r\n state.nextCheck = ms + 1000;\r\n const key = state.trips.map(trip => trip.id).join();\r\n changed = key !== state.tripsKey || (state.outline && !state.route && state.lanes.length);\r\n if (state.outline && !state.route && state.lanes.length) drawTrafficRoute(state);\r\n if (key !== state.tripsKey) { rebuildTrafficMesh(state); state.tripsKey = key; }\r\n if (state.mesh) rebaseTraffic(state);\r\n if (state.status.textContent !== text) state.status.textContent = text;\r\n state.status.removeAttribute('role');\r\n }\r\n if (state.mesh) moveTraffic(state, (ms - state.rebasedAt) / 1000);\r\n if (state.mesh && state.lights && (!live || !(performance.now() - state.litAt < 100))) {\r\n state.litAt = performance.now();\r\n state.mesh.extras.lights = state.trips.flatMap(trip => {\r\n const { x, y, z, dx, dz } = locateTraffic(state, trip);\r\n return state.lights.map(({ position: [lx, ly, lz], ...light }) => ({ ...light, position: [x - lx * dz - lz * dx, y + ly, z + lx * dx - lz * dz] }));\r\n });\r\n }\r\n if (state.mesh || changed) updateScene(state.layer);\r\n if (live && valid) state.frame = requestAnimationFrame(state.tick);\r\n}\r\n\r\nexport async function fetchTrafficLanes(state, time, signal) {\r\n const href = new URL(state.url, document.baseURI).href;\r\n if (/\\.m?js(?:[?#]|$)/i.test(state.url)) return (await import(href)).default(time, state.layer, signal);\r\n if (!state.file) {\r\n const response = await fetch(href, { signal });\r\n if (!response.ok) throw new Error(`HTTP ${response.status}`);\r\n state.file = await response.json();\r\n }\r\n return state.file;\r\n}\r\n\r\nexport function loadedTrafficLanes(state, signal, data) {\r\n if (signal.aborted || !state.layer._map || data === state.loaded) return;\r\n state.loaded = data;\r\n state.lanes = toLanes(data);\r\n prepareTraffic(state);\r\n if (!state.frame) state.tick();\r\n}\r\n\r\nexport function failedTrafficLoad(state, error) {\r\n if (error.name !== 'AbortError') failTraffic(state, error);\r\n}\r\n\r\nexport function loadTraffic(state) {\r\n const { time } = trafficNow(state);\r\n if (!Number.isFinite(time?.getTime())) return;\r\n state.request?.abort();\r\n const { signal } = state.request = new AbortController();\r\n fetchTrafficLanes(state, time, signal).then(\r\n loadedTrafficLanes.bind(null, state, signal),\r\n failedTrafficLoad.bind(null, state),\r\n );\r\n}\r\n\r\nexport function updateTraffic(state, event) {\r\n if (event?.layer === state.layer) return;\r\n cancelAnimationFrame(state.frame);\r\n loadTraffic(state);\r\n state.tick();\r\n}\r\n\r\nexport function updateTrafficTerrain(state) {\r\n if (!state.lanes.length) return;\r\n groundTraffic(state);\r\n disposeTrafficObject(state, state.route);\r\n state.route = null;\r\n if (state.mesh) trafficBounds(state);\r\n if (!state.frame) state.tick();\r\n}\r\n\r\nexport function startTraffic(state) {\r\n state.layer._map.off('simulationtimechange layerremove', state.update).on('simulationtimechange layerremove', state.update);\r\n state.layer._map.off('terrainchange', state.terrain).on('terrainchange', state.terrain);\r\n underEntry(state.layer, state.status);\r\n state.update();\r\n}\r\n\r\nexport function readyTraffic(state) {\r\n state.ready = true;\r\n if (state.layer._map) startTraffic(state);\r\n}\r\n\r\nexport function addTraffic(state) {\r\n if (state.ready) startTraffic(state);\r\n}\r\n\r\nexport function removeTraffic(state) {\r\n state.request?.abort();\r\n cancelAnimationFrame(state.frame);\r\n state.frame = undefined;\r\n state.layer._map.off('simulationtimechange layerremove', state.update).off('terrainchange', state.terrain);\r\n disposeTrafficObject(state, state.mesh);\r\n disposeTrafficObject(state, state.route);\r\n state.mesh = state.route = null;\r\n delete state.layer._beforeRaycast;\r\n destroyTrafficGpu(state);\r\n state.lanes = [];\r\n state.trips = [];\r\n state.tripsKey = state.loaded = null;\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["createMeshApi", "disposeMesh", "setHighlight", "showFeature", "updateScene", "along", "build", "computeBounds", "routeGeometry", "toLanes", "tripsAt", "underEntry", "getElevation", "trafficNow", "state", "control", "other", "createTrafficMesh", "data", "featureFaces", "material", "usage", "result", "disposeTrafficObject", "object", "failTraffic", "error", "groundTraffic", "layer", "lanes", "terrain", "base", "lane", "point", "i", "elevation", "prepareTraffic", "crs", "origin", "metres", "lat", "lng", "drawTrafficRoute", "rebuildTrafficMesh", "trips", "model", "vertices", "color", "trip", "count", "trafficBounds", "extent", "x", "z", "y", "destroyTrafficGpu", "buffer", "trafficStorage", "device", "rebaseTraffic", "offset", "index", "position", "normal", "binding", "moveTraffic", "seconds", "encoder", "pass", "locateTraffic", "points", "lengths", "length", "distance", "dx", "dz", "placeTraffic", "cx", "cz", "k", "o", "lx", "lz", "nx", "nz", "tickTraffic", "live", "time", "ms", "valid", "changed", "text", "key", "ly", "light", "fetchTrafficLanes", "signal", "href", "response", "loadedTrafficLanes", "failedTrafficLoad", "loadTraffic", "updateTraffic", "event", "updateTrafficTerrain", "startTraffic", "readyTraffic", "addTraffic", "removeTraffic"]
|
|
7
|
-
}
|
package/dist/utils/traverse.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/traverse.js"],
|
|
4
|
-
"sourcesContent": ["/** Depth-first walk; a truthy callback result skips that node's descendants. */\n\nexport function traverse(node, callback) {\n if (callback(node)) return;\n for (const child of node.children) traverse(child, callback);\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAASC,EAAMC,EAAU,CACvC,GAAI,CAAAA,EAASD,CAAI,EACjB,UAAWE,KAASF,EAAK,SAAUD,EAASG,EAAOD,CAAQ,CAC7D",
|
|
6
|
-
"names": ["traverse", "node", "callback", "child"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{parseColor as A}from"./parseColor.js";function F(h,m,p){const{top:f,bottom:I=0,trunkRadius:a,crownRadius:c,crownBottom:n,crownShape:k="round"}=m;if(![a,c,n].every(Number.isFinite)||a<=0||c<a||n<=I||n>=f||!["round","cone"].includes(k))throw new Error("Invalid tree dimensions or crown shape");const B=A(m.trunkColor??7491898),M=A(m.color??5210683),i=t=>Array.from({length:8},(o,r)=>({x:h.x+Math.cos(r*Math.PI/4)*t,y:h.y+Math.sin(r*Math.PI/4)*t,ground:h.ground})),x=(t,o,r,s,l)=>{const u=i(t),y=i(r);for(let e=0;e<8;e++){const b=(e+1)%8,P=(e+.5)*Math.PI/4,v=(t-r)/(s-o),w=Math.hypot(1,v),C=Math.cos(P)/w,g=v/w,z=-Math.sin(P)/w;t&&p(u[e],o,u[b],o,y[b],s,C,g,z,l),r&&p(u[e],o,y[b],s,y[e],s,C,g,z,l)}};if(x(a,I,a,n+(f-n)*.25,B),k==="cone"){const t=i(c);for(let o=0;o<8;o++)p(h,n,t[o],n,t[(o+1)%8],n,0,-1,0,M);x(c,n,0,f,M)}else{const t=[[0,0],[.35,.8],[.6,1],[.85,.7],[1,0]];for(let o=1;o<t.length;o++){const[r,s]=t[o-1],[l,u]=t[o];x(s*c,n+r*(f-n),u*c,n+l*(f-n),M)}}}export{F as treeGeometry};
|
|
2
|
-
//# sourceMappingURL=treeGeometry.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/treeGeometry.js"],
|
|
4
|
-
"sourcesContent": ["import { parseColor } from \"./parseColor.js\";\n\n/** Low-poly tree, sharing the source block's buffers, picking and terrain offset. */\n\nexport function treeGeometry(point, style, addTriangle) {\n const { top, bottom = 0, trunkRadius, crownRadius, crownBottom, crownShape = 'round' } = style;\n if (![trunkRadius, crownRadius, crownBottom].every(Number.isFinite) ||\n trunkRadius <= 0 || crownRadius < trunkRadius || crownBottom <= bottom || crownBottom >= top ||\n !['round', 'cone'].includes(crownShape)) {\n throw new Error('Invalid tree dimensions or crown shape');\n }\n const trunk = parseColor(style.trunkColor ?? 0x72513a);\n const crown = parseColor(style.color ?? 0x4f823b);\n const ring = radius => Array.from({ length: 8 }, (_, i) => ({\n x: point.x + Math.cos(i * Math.PI / 4) * radius,\n y: point.y + Math.sin(i * Math.PI / 4) * radius,\n ground: point.ground,\n }));\n const surface = (lowRadius, low, highRadius, high, color) => {\n const lower = ring(lowRadius), upper = ring(highRadius);\n for (let i = 0; i < 8; i++) {\n const next = (i + 1) % 8;\n const angle = (i + 0.5) * Math.PI / 4;\n const slope = (lowRadius - highRadius) / (high - low);\n const length = Math.hypot(1, slope);\n const nx = Math.cos(angle) / length, ny = slope / length, nz = -Math.sin(angle) / length;\n if (lowRadius) addTriangle(lower[i], low, lower[next], low, upper[next], high, nx, ny, nz, color);\n if (highRadius) addTriangle(lower[i], low, upper[next], high, upper[i], high, nx, ny, nz, color);\n }\n };\n surface(trunkRadius, bottom, trunkRadius, crownBottom + (top - crownBottom) * 0.25, trunk);\n if (crownShape === 'cone') {\n const base = ring(crownRadius);\n for (let i = 0; i < 8; i++) addTriangle(point, crownBottom, base[i], crownBottom,\n base[(i + 1) % 8], crownBottom, 0, -1, 0, crown);\n surface(crownRadius, crownBottom, 0, top, crown);\n } else {\n const profile = [[0, 0], [0.35, 0.8], [0.6, 1], [0.85, 0.7], [1, 0]];\n for (let i = 1; i < profile.length; i++) {\n const [low, lr] = profile[i - 1], [high, hr] = profile[i];\n surface(lr * crownRadius, crownBottom + low * (top - crownBottom),\n hr * crownRadius, crownBottom + high * (top - crownBottom), crown);\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,cAAAA,MAAkB,kBAIpB,SAASC,EAAaC,EAAOC,EAAOC,EAAa,CACtD,KAAM,CAAE,IAAAC,EAAK,OAAAC,EAAS,EAAG,YAAAC,EAAa,YAAAC,EAAa,YAAAC,EAAa,WAAAC,EAAa,OAAQ,EAAIP,EACzF,GAAI,CAAC,CAACI,EAAaC,EAAaC,CAAW,EAAE,MAAM,OAAO,QAAQ,GAChEF,GAAe,GAAKC,EAAcD,GAAeE,GAAeH,GAAUG,GAAeJ,GACzF,CAAC,CAAC,QAAS,MAAM,EAAE,SAASK,CAAU,EACtC,MAAM,IAAI,MAAM,wCAAwC,EAE1D,MAAMC,EAAQX,EAAWG,EAAM,YAAc,OAAQ,EAC/CS,EAAQZ,EAAWG,EAAM,OAAS,OAAQ,EAC1CU,EAAOC,GAAU,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACC,EAAGC,KAAO,CAC1D,EAAGd,EAAM,EAAI,KAAK,IAAIc,EAAI,KAAK,GAAK,CAAC,EAAIF,EACzC,EAAGZ,EAAM,EAAI,KAAK,IAAIc,EAAI,KAAK,GAAK,CAAC,EAAIF,EACzC,OAAQZ,EAAM,MAChB,EAAE,EACIe,EAAU,CAACC,EAAWC,EAAKC,EAAYC,EAAMC,IAAU,CAC3D,MAAMC,EAAQV,EAAKK,CAAS,EAAGM,EAAQX,EAAKO,CAAU,EACtD,QAASJ,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMS,GAAQT,EAAI,GAAK,EACjBU,GAASV,EAAI,IAAO,KAAK,GAAK,EAC9BW,GAAST,EAAYE,IAAeC,EAAOF,GAC3CS,EAAS,KAAK,MAAM,EAAGD,CAAK,EAC5BE,EAAK,KAAK,IAAIH,CAAK,EAAIE,EAAQE,EAAKH,EAAQC,EAAQG,EAAK,CAAC,KAAK,IAAIL,CAAK,EAAIE,EAC9EV,GAAWd,EAAYmB,EAAMP,CAAC,EAAGG,EAAKI,EAAME,CAAI,EAAGN,EAAKK,EAAMC,CAAI,EAAGJ,EAAMQ,EAAIC,EAAIC,EAAIT,CAAK,EAC5FF,GAAYhB,EAAYmB,EAAMP,CAAC,EAAGG,EAAKK,EAAMC,CAAI,EAAGJ,EAAMG,EAAMR,CAAC,EAAGK,EAAMQ,EAAIC,EAAIC,EAAIT,CAAK,CACjG,CACF,EAEA,GADAL,EAAQV,EAAaD,EAAQC,EAAaE,GAAeJ,EAAMI,GAAe,IAAME,CAAK,EACrFD,IAAe,OAAQ,CACzB,MAAMsB,EAAOnB,EAAKL,CAAW,EAC7B,QAASQ,EAAI,EAAGA,EAAI,EAAGA,IAAKZ,EAAYF,EAAOO,EAAauB,EAAKhB,CAAC,EAAGP,EACnEuB,GAAMhB,EAAI,GAAK,CAAC,EAAGP,EAAa,EAAG,GAAI,EAAGG,CAAK,EACjDK,EAAQT,EAAaC,EAAa,EAAGJ,EAAKO,CAAK,CACjD,KAAO,CACL,MAAMqB,EAAU,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,IAAM,EAAG,EAAG,CAAC,GAAK,CAAC,EAAG,CAAC,IAAM,EAAG,EAAG,CAAC,EAAG,CAAC,CAAC,EACnE,QAASjB,EAAI,EAAGA,EAAIiB,EAAQ,OAAQjB,IAAK,CACvC,KAAM,CAACG,EAAKe,CAAE,EAAID,EAAQjB,EAAI,CAAC,EAAG,CAACK,EAAMc,CAAE,EAAIF,EAAQjB,CAAC,EACxDC,EAAQiB,EAAK1B,EAAaC,EAAcU,GAAOd,EAAMI,GACnD0B,EAAK3B,EAAaC,EAAcY,GAAQhB,EAAMI,GAAcG,CAAK,CACrE,CACF,CACF",
|
|
6
|
-
"names": ["parseColor", "treeGeometry", "point", "style", "addTriangle", "top", "bottom", "trunkRadius", "crownRadius", "crownBottom", "crownShape", "trunk", "crown", "ring", "radius", "_", "i", "surface", "lowRadius", "low", "highRadius", "high", "color", "lower", "upper", "next", "angle", "slope", "length", "nx", "ny", "nz", "base", "profile", "lr", "hr"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{isClockWise as N}from"./isClockWise.js";function j(g,M=[]){const p=[g,...M].flat();if(p.some(e=>!Number.isFinite(e.x)||!Number.isFinite(e.y)))throw new Error("Invalid polygon coordinates");const b=p.map((e,t)=>({x:e.x-g[0].x,y:e.y-g[0].y,index:t})),c=(e,t,n)=>(t.x-e.x)*(n.y-e.y)-(t.y-e.y)*(n.x-e.x),x=(e,t)=>e.x===t.x&&e.y===t.y,B=e=>{let t=!0;for(;t&&e.length>3;){t=!1;for(let n=0;n<e.length;n++){const o=e[(n+e.length-1)%e.length],s=e[n],l=e[(n+1)%e.length];if(x(o,s)||Math.abs(c(o,s,l))<1e-10){e.splice(n,1),t=!0;break}}}if(e.length<3)throw new Error("Degenerate polygon ring");return e};let E=0;const f=[g,...M].map((e,t)=>{const n=B(b.slice(E,E+=e.length));return N(n)!==!!t&&n.reverse(),n}),v=(e,t)=>{let n=!1;for(let o=0,s=t.length-1;o<t.length;s=o++){const l=t[o],r=t[s];l.y>e.y!=r.y>e.y&&e.x<(r.x-l.x)*(e.y-l.y)/(r.y-l.y)+l.x&&(n=!n)}return n},C=(e,t,n,o)=>{if(x(e,n)||x(e,o)||x(t,n)||x(t,o))return!1;const s=c(e,t,n),l=c(e,t,o),r=c(n,o,e),y=c(n,o,t),a=(u,m,h)=>Math.min(u.x,m.x)<=h.x&&h.x<=Math.max(u.x,m.x)&&Math.min(u.y,m.y)<=h.y&&h.y<=Math.max(u.y,m.y);return s*l<0&&r*y<0||s===0&&a(e,t,n)||l===0&&a(e,t,o)||r===0&&a(n,o,e)||y===0&&a(n,o,t)};let i=f[0].slice();for(const e of f.slice(1).sort((t,n)=>Math.min(...t.map(o=>o.x))-Math.min(...n.map(o=>o.x)))){let t,n=1/0;for(let l=0;l<e.length;l++)for(let r=0;r<i.length;r++){const y=e[l],a=i[r],u=(y.x-a.x)**2+(y.y-a.y)**2;if(u>=n)continue;const m={x:(y.x+a.x)/2,y:(y.y+a.y)/2};!v(m,f[0])||f.slice(1).some(h=>v(m,h))||[i,...f.slice(1)].some(h=>h.some((F,I)=>C(y,a,F,h[(I+1)%h.length])))||(t=[l,r],n=u)}if(!t)throw new Error("Unable to connect polygon hole");const[o,s]=t;i=[...i.slice(0,s+1),...e.slice(o),...e.slice(0,o+1),i[s],...i.slice(s+1)]}const d=[];for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){const n=i[(t+i.length-1)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(c(n,o,s)<=1e-10)&&!i.some(l=>!x(l,n)&&!x(l,o)&&!x(l,s)&&c(n,o,l)>=0&&c(o,s,l)>=0&&c(s,n,l)>=0)){d.push([n.index,o.index,s.index]),i.splice(t,1),e=!0;break}}if(!e)throw new Error("Unable to triangulate polygon: invalid or self-intersecting rings")}c(...i)>1e-10&&d.push(i.map(e=>e.index));const k=e=>Math.abs(e.reduce((t,n,o)=>{const s=e[(o+1)%e.length];return t+n.x*s.y-s.x*n.y},0))/2,w=k(f[0])-f.slice(1).reduce((e,t)=>e+k(t),0),D=d.reduce((e,t)=>e+c(...t.map(n=>b[n]))/2,0);if(w<=0||Math.abs(D-w)>Math.max(1e-7,w*1e-8))throw new Error("Polygon triangulation area mismatch");return d}export{j as triangulate};
|
|
2
|
-
//# sourceMappingURL=triangulate.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/triangulate.js"],
|
|
4
|
-
"sourcesContent": ["import { isClockWise } from \"./isClockWise.js\";\n\n/**\n * Triangulates a polygon given as `{x, y}` points.\n * Rings omit the repeated closing point; winding is normalized internally.\n * Vertex indices remain relative to the original inputs after duplicate/collinear\n * cleanup. Hole bridges duplicate endpoints, not source vertices.\n * @param {Object[]} contour Outer boundary.\n * @param {Object[][]} [holes] Interior boundaries.\n *\n * @returns {number[][]} Triangles as indices in `[...contour, ...holes.flat()]`.\n */\n\nexport function triangulate(contour, holes = []) {\n const points = [contour, ...holes].flat();\n if (points.some(p => !Number.isFinite(p.x) || !Number.isFinite(p.y))) throw new Error('Invalid polygon coordinates');\n // Translate near the origin to avoid cancellation with geographic coordinates.\n const vertices = points.map((p, index) => ({ x: p.x - contour[0].x, y: p.y - contour[0].y, index }));\n const cross = (a, b, c) => (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);\n const equal = (a, b) => a.x === b.x && a.y === b.y;\n // Remove zero-area corners before connecting holes; keep original vertex indices.\n const clean = ring => {\n let changed = true;\n while (changed && ring.length > 3) {\n changed = false;\n for (let i = 0; i < ring.length; i++) {\n const a = ring[(i + ring.length - 1) % ring.length], b = ring[i], c = ring[(i + 1) % ring.length];\n if (equal(a, b) || Math.abs(cross(a, b, c)) < 1e-10) {\n ring.splice(i, 1); changed = true; break;\n }\n }\n }\n if (ring.length < 3) throw new Error('Degenerate polygon ring');\n return ring;\n };\n let offset = 0;\n const rings = [contour, ...holes].map((path, index) => {\n const ring = clean(vertices.slice(offset, offset += path.length));\n if (isClockWise(ring) !== Boolean(index)) ring.reverse();\n return ring;\n });\n const inside = (point, ring) => {\n let result = false;\n for (let i = 0, j = ring.length - 1; i < ring.length; j = i++) {\n const a = ring[i], b = ring[j];\n if ((a.y > point.y) !== (b.y > point.y) &&\n point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x) result = !result;\n }\n return result;\n };\n const intersects = (a, b, c, d) => {\n if (equal(a, c) || equal(a, d) || equal(b, c) || equal(b, d)) return false;\n const abC = cross(a, b, c), abD = cross(a, b, d), cdA = cross(c, d, a), cdB = cross(c, d, b);\n const on = (p, q, r) => Math.min(p.x, q.x) <= r.x && r.x <= Math.max(p.x, q.x) &&\n Math.min(p.y, q.y) <= r.y && r.y <= Math.max(p.y, q.y);\n return abC * abD < 0 && cdA * cdB < 0 ||\n abC === 0 && on(a, b, c) || abD === 0 && on(a, b, d) ||\n cdA === 0 && on(c, d, a) || cdB === 0 && on(c, d, b);\n };\n let polygon = rings[0].slice();\n // A bridge must stay inside the outer boundary, outside every hole, and cross no edge.\n // ponytail: quadratic ear clipping for building footprints; use spatial indexing for large rings.\n for (const hole of rings.slice(1).sort((a, b) => Math.min(...a.map(p => p.x)) - Math.min(...b.map(p => p.x)))) {\n let bridge, distance = Infinity;\n for (let h = 0; h < hole.length; h++) for (let p = 0; p < polygon.length; p++) {\n const a = hole[h], b = polygon[p], d = (a.x - b.x) ** 2 + (a.y - b.y) ** 2;\n if (d >= distance) continue;\n const mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };\n if (!inside(mid, rings[0]) || rings.slice(1).some(r => inside(mid, r))) continue;\n if ([polygon, ...rings.slice(1)].some(r => r.some((c, i) => intersects(a, b, c, r[(i + 1) % r.length])))) continue;\n bridge = [h, p]; distance = d;\n }\n if (!bridge) throw new Error('Unable to connect polygon hole');\n const [h, p] = bridge;\n polygon = [...polygon.slice(0, p + 1), ...hole.slice(h), ...hole.slice(0, h + 1),\n polygon[p], ...polygon.slice(p + 1)];\n }\n // Clip a convex corner only when no other vertex is inside/on its triangle.\n const result = [];\n while (polygon.length > 3) {\n let clipped = false;\n for (let i = 0; i < polygon.length; i++) {\n const a = polygon[(i + polygon.length - 1) % polygon.length], b = polygon[i], c = polygon[(i + 1) % polygon.length];\n if (cross(a, b, c) <= 1e-10) continue;\n if (polygon.some(p => !equal(p, a) && !equal(p, b) && !equal(p, c) &&\n cross(a, b, p) >= 0 && cross(b, c, p) >= 0 && cross(c, a, p) >= 0)) continue;\n result.push([a.index, b.index, c.index]); polygon.splice(i, 1); clipped = true; break;\n }\n if (!clipped) throw new Error('Unable to triangulate polygon: invalid or self-intersecting rings');\n }\n if (cross(...polygon) > 1e-10) result.push(polygon.map(p => p.index));\n const area = ring => Math.abs(ring.reduce((sum, p, i) => {\n const q = ring[(i + 1) % ring.length]; return sum + p.x * q.y - q.x * p.y;\n }, 0)) / 2;\n // Reject incomplete coverage instead of silently emitting a partial roof.\n const expected = area(rings[0]) - rings.slice(1).reduce((sum, ring) => sum + area(ring), 0);\n const actual = result.reduce((sum, triangle) => sum + cross(...triangle.map(i => vertices[i])) / 2, 0);\n if (expected <= 0 || Math.abs(actual - expected) > Math.max(1e-7, expected * 1e-8)) throw new Error('Polygon triangulation area mismatch');\n return result;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["isClockWise", "triangulate", "contour", "holes", "points", "p", "vertices", "index", "cross", "a", "b", "c", "equal", "clean", "ring", "changed", "i", "offset", "rings", "path", "inside", "point", "result", "j", "intersects", "d", "abC", "abD", "cdA", "cdB", "on", "q", "r", "polygon", "hole", "bridge", "distance", "h", "mid", "clipped", "area", "sum", "expected", "actual", "triangle"]
|
|
7
|
-
}
|
package/dist/utils/tripsAt.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{vehicleOffsets as u}from"./vehicleOffsets.js";import{scheduledTrips as g}from"./scheduledTrips.js";const n=(s,i,t)=>i.flatMap((r,o)=>{const{timetable:p,flow:d=0}=r.properties;if(!r.length)return[];if(p)return g(s,p).map(e=>({id:`${o}-${e.id}`,lane:r,distance:e.progress*r.length,speed:r.length/(p.duration*60),properties:{...r.properties,departure:e.departure}}));const f=s/1e3*t;return(r.offsets||=u(r.length,d,t)).map((e,h)=>({id:`${o}-${h}`,lane:r,distance:(e+f)%r.length,speed:t,properties:r.properties}))});export{n as tripsAt};
|
|
2
|
-
//# sourceMappingURL=tripsAt.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/tripsAt.js"],
|
|
4
|
-
"sourcesContent": ["import { vehicleOffsets } from \"./vehicleOffsets.js\";\nimport { scheduledTrips } from \"./scheduledTrips.js\";\n\n// A lane with a `timetable` runs scheduled trips end to end; one with a `flow` (vehicles/h) loops evenly spaced vehicles.\n\nexport const tripsAt = (time, lanes, velocity) => lanes.flatMap((lane, l) => {\n const { timetable, flow = 0 } = lane.properties;\n if (!lane.length) return [];\n if (timetable) return scheduledTrips(time, timetable).map(trip => ({\n id: `${l}-${trip.id}`, lane, distance: trip.progress * lane.length, speed: lane.length / (timetable.duration * 60),\n properties: { ...lane.properties, departure: trip.departure },\n }));\n const travelled = time / 1000 * velocity;\n return (lane.offsets ||= vehicleOffsets(lane.length, flow, velocity))\n .map((offset, k) => ({ id: `${l}-${k}`, lane, distance: (offset + travelled) % lane.length, speed: velocity, properties: lane.properties }));\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,kBAAAA,MAAsB,sBAC/B,OAAS,kBAAAC,MAAsB,sBAIxB,MAAMC,EAAU,CAACC,EAAMC,EAAOC,IAAaD,EAAM,QAAQ,CAACE,EAAMC,IAAM,CAC3E,KAAM,CAAE,UAAAC,EAAW,KAAAC,EAAO,CAAE,EAAIH,EAAK,WACrC,GAAI,CAACA,EAAK,OAAQ,MAAO,CAAC,EAC1B,GAAIE,EAAW,OAAOP,EAAeE,EAAMK,CAAS,EAAE,IAAIE,IAAS,CACjE,GAAI,GAAGH,CAAC,IAAIG,EAAK,EAAE,GAAI,KAAAJ,EAAM,SAAUI,EAAK,SAAWJ,EAAK,OAAQ,MAAOA,EAAK,QAAUE,EAAU,SAAW,IAC/G,WAAY,CAAE,GAAGF,EAAK,WAAY,UAAWI,EAAK,SAAU,CAC9D,EAAE,EACF,MAAMC,EAAYR,EAAO,IAAOE,EAChC,OAAQC,EAAK,UAAYN,EAAeM,EAAK,OAAQG,EAAMJ,CAAQ,GAChE,IAAI,CAACO,EAAQC,KAAO,CAAE,GAAI,GAAGN,CAAC,IAAIM,CAAC,GAAI,KAAAP,EAAM,UAAWM,EAASD,GAAaL,EAAK,OAAQ,MAAOD,EAAU,WAAYC,EAAK,UAAW,EAAE,CAC/I,CAAC",
|
|
6
|
-
"names": ["vehicleOffsets", "scheduledTrips", "tripsAt", "time", "lanes", "velocity", "lane", "l", "timetable", "flow", "trip", "travelled", "offset", "k"]
|
|
7
|
-
}
|
package/dist/utils/types.js
DELETED
package/dist/utils/types.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/types.js"],
|
|
4
|
-
"sourcesContent": ["export const types = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array,\n};\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAAQ,CACnB,KAAM,UACN,KAAM,WACN,KAAM,WACN,KAAM,YACN,KAAM,YACN,KAAM,YACR",
|
|
6
|
-
"names": ["types"]
|
|
7
|
-
}
|
package/dist/utils/underEntry.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function c(e,o){const r=e._map,t=()=>{const n=[...r.getContainer().querySelectorAll(".leaflet-control-layers-selector")].find(l=>l.layerId===L.Util.stamp(e));return n?.closest("label").after(o),!!n},a=()=>queueMicrotask(()=>r.hasLayer(e)&&t());return r.on("layeradd layerremove",a),e.once("remove",()=>{r.off("layeradd layerremove",a),o.remove()}),t()}export{c as underEntry};
|
|
2
|
-
//# sourceMappingURL=underEntry.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/underEntry.js"],
|
|
4
|
-
"sourcesContent": ["/**\n * Keeps `element` right under `layer`'s entry in the map's layers control while the layer is on the map.\n * Returns false when no layers control lists the layer.\n */\nexport function underEntry(layer, element) {\n const map = layer._map;\n const place = () => {\n const input = [...map.getContainer().querySelectorAll('.leaflet-control-layers-selector')].find(input => input.layerId === L.Util.stamp(layer));\n input?.closest('label').after(element);\n return Boolean(input);\n };\n // Leaflet rebuilds the list after 'layeradd'/'layerremove' (on the layer's own 'add'/'remove'): re-place afterwards.\n const replace = () => queueMicrotask(() => map.hasLayer(layer) && place());\n map.on('layeradd layerremove', replace);\n layer.once('remove', () => { map.off('layeradd layerremove', replace); element.remove(); });\n return place();\n}\n"],
|
|
5
|
-
"mappings": "AAIO,SAASA,EAAWC,EAAOC,EAAS,CACzC,MAAMC,EAAMF,EAAM,KACZG,EAAQ,IAAM,CAClB,MAAMC,EAAQ,CAAC,GAAGF,EAAI,aAAa,EAAE,iBAAiB,kCAAkC,CAAC,EAAE,KAAKE,GAASA,EAAM,UAAY,EAAE,KAAK,MAAMJ,CAAK,CAAC,EAC9I,OAAAI,GAAO,QAAQ,OAAO,EAAE,MAAMH,CAAO,EAC9B,EAAQG,CACjB,EAEMC,EAAU,IAAM,eAAe,IAAMH,EAAI,SAASF,CAAK,GAAKG,EAAM,CAAC,EACzE,OAAAD,EAAI,GAAG,uBAAwBG,CAAO,EACtCL,EAAM,KAAK,SAAU,IAAM,CAAEE,EAAI,IAAI,uBAAwBG,CAAO,EAAGJ,EAAQ,OAAO,CAAG,CAAC,EACnFE,EAAM,CACf",
|
|
6
|
-
"names": ["underEntry", "layer", "element", "map", "place", "input", "replace"]
|
|
7
|
-
}
|
package/dist/utils/update.js
DELETED
package/dist/utils/update.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/update.js"],
|
|
4
|
-
"sourcesContent": ["import { render } from \"./render.js\";\n\n/** Scene graph, shared camera and frame rendering. */\n/** Content changes: render once on the next animation frame. */\n\nexport function update(backend) {\n const shared = backend._shared;\n if (!shared) return backend;\n if (shared !== backend) {\n update(shared);\n return backend;\n }\n backend._frame ||= requestAnimationFrame(() => {\n backend._frame = null;\n if (backend._shared === backend && backend.renderer) render(backend);\n });\n return backend;\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,UAAAA,MAAc,cAKhB,SAASC,EAAOC,EAAS,CAC9B,MAAMC,EAASD,EAAQ,QACvB,OAAKC,EACDA,IAAWD,GACbD,EAAOE,CAAM,EACND,IAETA,EAAQ,SAAW,sBAAsB,IAAM,CAC7CA,EAAQ,OAAS,KACbA,EAAQ,UAAYA,GAAWA,EAAQ,UAAUF,EAAOE,CAAO,CACrE,CAAC,EACMA,GATaA,CAUtB",
|
|
6
|
-
"names": ["render", "update", "backend", "shared"]
|
|
7
|
-
}
|
package/dist/utils/updateArea.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{pump as x}from"./pump.js";import{releaseArea as l}from"./releaseArea.js";function j(o){if(!o._map||!o._shared)return;if(o._geojson){o._areas.has("geojson")||o._areas.set("geojson",{request:new AbortController}),x(o);return}if(!o.header)return;const t=o.header.minZoom,s=o._map.project(o._map.getCenter(),t).divideBy(256).floor(),i=o._map.getBounds(),m=o._map.project(i.getNorthWest(),t).divideBy(256).floor(),h=o._map.project(i.getSouthEast(),t).divideBy(256).floor(),p=o._map.project([o.header.maxLat,o.header.minLon],t).divideBy(256).floor(),f=o._map.project([o.header.minLat,o.header.maxLon],t).divideBy(256).floor(),a=new Map;for(let r=Math.max(0,m.x-1,p.x);r<=Math.min(2**t-1,h.x+1,f.x);r++)for(let e=Math.max(0,m.y-1,p.y);e<=Math.min(2**t-1,h.y+1,f.y);e++)a.set(`${r}/${e}`,{z:t,x:r,y:e});for(const[r,e]of o._areas)a.has(r)||(l(o,e),o._areas.delete(r));for(const[r,e]of[...a].sort(([,y],[,_])=>Math.hypot(y.x-s.x,y.y-s.y)-Math.hypot(_.x-s.x,_.y-s.y)))o._areas.has(r)||o._areas.set(r,{coords:e,request:new AbortController});x(o)}export{j as updateArea};
|
|
2
|
-
//# sourceMappingURL=updateArea.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/updateArea.js"],
|
|
4
|
-
"sourcesContent": ["import { pump } from \"./pump.js\";\nimport { releaseArea } from \"./releaseArea.js\";\n\n/** Cover the visible ground bounds and one bordering block, clipped to the archive. */\n\nexport function updateArea(backend) {\n if (!backend._map || !backend._shared) return;\n if (backend._geojson) {\n if (!backend._areas.has('geojson')) {\n backend._areas.set('geojson', { request: new AbortController() });\n }\n pump(backend);\n return;\n }\n if (!backend.header) return;\n const z = backend.header.minZoom;\n const center = backend._map.project(backend._map.getCenter(), z).divideBy(256).floor();\n const bounds = backend._map.getBounds();\n const nw = backend._map.project(bounds.getNorthWest(), z).divideBy(256).floor();\n const se = backend._map.project(bounds.getSouthEast(), z).divideBy(256).floor();\n const archiveNW = backend._map.project([backend.header.maxLat, backend.header.minLon], z).divideBy(256).floor();\n const archiveSE = backend._map.project([backend.header.minLat, backend.header.maxLon], z).divideBy(256).floor();\n const wanted = new Map();\n for (let x = Math.max(0, nw.x - 1, archiveNW.x); x <= Math.min(2 ** z - 1, se.x + 1, archiveSE.x); x++) {\n for (let y = Math.max(0, nw.y - 1, archiveNW.y); y <= Math.min(2 ** z - 1, se.y + 1, archiveSE.y); y++) {\n wanted.set(`${x}/${y}`, { z, x, y });\n }\n }\n for (const [key, area] of backend._areas) {\n if (!wanted.has(key)) {\n releaseArea(backend, area);\n backend._areas.delete(key);\n }\n }\n // Load the nearest new blocks first without rebuilding retained geometry.\n for (const [key, coords] of [...wanted].sort(([, a], [, b]) => Math.hypot(a.x - center.x, a.y - center.y) - Math.hypot(b.x - center.x, b.y - center.y))) {\n if (!backend._areas.has(key)) backend._areas.set(key, { coords, request: new AbortController() });\n }\n pump(backend);\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,QAAAA,MAAY,YACrB,OAAS,eAAAC,MAAmB,mBAIrB,SAASC,EAAWC,EAAS,CAClC,GAAI,CAACA,EAAQ,MAAQ,CAACA,EAAQ,QAAS,OACvC,GAAIA,EAAQ,SAAU,CACfA,EAAQ,OAAO,IAAI,SAAS,GAC/BA,EAAQ,OAAO,IAAI,UAAW,CAAE,QAAS,IAAI,eAAkB,CAAC,EAElEH,EAAKG,CAAO,EACZ,MACF,CACA,GAAI,CAACA,EAAQ,OAAQ,OACrB,MAAMC,EAAID,EAAQ,OAAO,QACnBE,EAASF,EAAQ,KAAK,QAAQA,EAAQ,KAAK,UAAU,EAAGC,CAAC,EAAE,SAAS,GAAG,EAAE,MAAM,EAC/EE,EAASH,EAAQ,KAAK,UAAU,EAChCI,EAAKJ,EAAQ,KAAK,QAAQG,EAAO,aAAa,EAAGF,CAAC,EAAE,SAAS,GAAG,EAAE,MAAM,EACxEI,EAAKL,EAAQ,KAAK,QAAQG,EAAO,aAAa,EAAGF,CAAC,EAAE,SAAS,GAAG,EAAE,MAAM,EACxEK,EAAYN,EAAQ,KAAK,QAAQ,CAACA,EAAQ,OAAO,OAAQA,EAAQ,OAAO,MAAM,EAAGC,CAAC,EAAE,SAAS,GAAG,EAAE,MAAM,EACxGM,EAAYP,EAAQ,KAAK,QAAQ,CAACA,EAAQ,OAAO,OAAQA,EAAQ,OAAO,MAAM,EAAGC,CAAC,EAAE,SAAS,GAAG,EAAE,MAAM,EACxGO,EAAS,IAAI,IACnB,QAASC,EAAI,KAAK,IAAI,EAAGL,EAAG,EAAI,EAAGE,EAAU,CAAC,EAAGG,GAAK,KAAK,IAAI,GAAKR,EAAI,EAAGI,EAAG,EAAI,EAAGE,EAAU,CAAC,EAAGE,IACjG,QAASC,EAAI,KAAK,IAAI,EAAGN,EAAG,EAAI,EAAGE,EAAU,CAAC,EAAGI,GAAK,KAAK,IAAI,GAAKT,EAAI,EAAGI,EAAG,EAAI,EAAGE,EAAU,CAAC,EAAGG,IACjGF,EAAO,IAAI,GAAGC,CAAC,IAAIC,CAAC,GAAI,CAAE,EAAAT,EAAG,EAAAQ,EAAG,EAAAC,CAAE,CAAC,EAGvC,SAAW,CAACC,EAAKC,CAAI,IAAKZ,EAAQ,OAC3BQ,EAAO,IAAIG,CAAG,IACjBb,EAAYE,EAASY,CAAI,EACzBZ,EAAQ,OAAO,OAAOW,CAAG,GAI7B,SAAW,CAACA,EAAKE,CAAM,GAAK,CAAC,GAAGL,CAAM,EAAE,KAAK,CAAC,CAAC,CAAEM,CAAC,EAAG,CAAC,CAAEC,CAAC,IAAM,KAAK,MAAMD,EAAE,EAAIZ,EAAO,EAAGY,EAAE,EAAIZ,EAAO,CAAC,EAAI,KAAK,MAAMa,EAAE,EAAIb,EAAO,EAAGa,EAAE,EAAIb,EAAO,CAAC,CAAC,EAC/IF,EAAQ,OAAO,IAAIW,CAAG,GAAGX,EAAQ,OAAO,IAAIW,EAAK,CAAE,OAAAE,EAAQ,QAAS,IAAI,eAAkB,CAAC,EAElGhB,EAAKG,CAAO,CACd",
|
|
6
|
-
"names": ["pump", "releaseArea", "updateArea", "backend", "z", "center", "bounds", "nw", "se", "archiveNW", "archiveSE", "wanted", "x", "y", "key", "area", "coords", "a", "b"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const f=(o,i)=>[o[1]*i[2]-o[2]*i[1],o[2]*i[0]-o[0]*i[2],o[0]*i[1]-o[1]*i[0]];function u(o){const i=o.position.map((t,y)=>t-o.target[y]),x=Math.hypot(...i)||1;for(let t=0;t<3;t++)i[t]/=x;const n=f(o.up,i),l=Math.hypot(...n)||1;for(let t=0;t<3;t++)n[t]/=l;const e=f(i,n),p=new DOMMatrix([n[0],n[1],n[2],0,e[0],e[1],e[2],0,i[0],i[1],i[2],0,...o.position,1]).inverse().toFloat64Array();if(![...p].every(Number.isFinite))throw new Error("Singular 3D transform");for(let t=0;t<16;t++)o.viewMatrix[t]=p[t];const M=1/Math.tan(o.fov*Math.PI/360),s=o.near,r=o.far,w=[M/o.aspect,0,0,0,0,M,0,0,0,0,r/(s-r),-1,0,0,r*s/(s-r),0];for(let t=0;t<16;t++)o.projectionMatrix[t]=w[t];const h=new DOMMatrix(o.projectionMatrix).multiply(new DOMMatrix(o.viewMatrix)).toFloat64Array();for(let t=0;t<16;t++)o.projectionViewMatrix[t]=h[t]}export{u as updateCamera};
|
|
2
|
-
//# sourceMappingURL=updateCamera.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/updateCamera.js"],
|
|
4
|
-
"sourcesContent": ["/** Orthonormal view basis plus perspective matrices, refreshed before projecting/drawing. */\n\nconst cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n\nexport function updateCamera(camera) {\n const z = camera.position.map((v, i) => v - camera.target[i]);\n const zLength = Math.hypot(...z) || 1;\n for (let i = 0; i < 3; i++) {\n z[i] /= zLength;\n }\n const x = cross(camera.up, z), xLength = Math.hypot(...x) || 1;\n for (let i = 0; i < 3; i++) {\n x[i] /= xLength;\n }\n const y = cross(z, x);\n const view = new DOMMatrix([x[0], x[1], x[2], 0, y[0], y[1], y[2], 0, z[0], z[1], z[2], 0, ...camera.position, 1]).inverse().toFloat64Array();\n if (![...view].every(Number.isFinite)) {\n throw new Error('Singular 3D transform');\n }\n for (let i = 0; i < 16; i++) {\n camera.viewMatrix[i] = view[i];\n }\n const f = 1 / Math.tan(camera.fov * Math.PI / 360), n = camera.near, r = camera.far;\n const projection = [f / camera.aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, r / (n - r), -1, 0, 0, r * n / (n - r), 0];\n for (let i = 0; i < 16; i++) {\n camera.projectionMatrix[i] = projection[i];\n }\n const projectionView = new DOMMatrix(camera.projectionMatrix).multiply(new DOMMatrix(camera.viewMatrix)).toFloat64Array();\n for (let i = 0; i < 16; i++) {\n camera.projectionViewMatrix[i] = projectionView[i];\n }\n}\n"],
|
|
5
|
-
"mappings": "AAEA,MAAMA,EAAQ,CAACC,EAAGC,IAAM,CAACD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAGD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAGD,EAAE,CAAC,EAAIC,EAAE,CAAC,EAAID,EAAE,CAAC,EAAIC,EAAE,CAAC,CAAC,EAEjG,SAASC,EAAaC,EAAQ,CACnC,MAAMC,EAAID,EAAO,SAAS,IAAI,CAACE,EAAGC,IAAMD,EAAIF,EAAO,OAAOG,CAAC,CAAC,EACtDC,EAAU,KAAK,MAAM,GAAGH,CAAC,GAAK,EACpC,QAASE,EAAI,EAAGA,EAAI,EAAGA,IACrBF,EAAEE,CAAC,GAAKC,EAEV,MAAMC,EAAIT,EAAMI,EAAO,GAAIC,CAAC,EAAGK,EAAU,KAAK,MAAM,GAAGD,CAAC,GAAK,EAC7D,QAASF,EAAI,EAAGA,EAAI,EAAGA,IACrBE,EAAEF,CAAC,GAAKG,EAEV,MAAMC,EAAIX,EAAMK,EAAGI,CAAC,EACdG,EAAO,IAAI,UAAU,CAACH,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAGE,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAGN,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAGA,EAAE,CAAC,EAAG,EAAG,GAAGD,EAAO,SAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,eAAe,EAC5I,GAAI,CAAC,CAAC,GAAGQ,CAAI,EAAE,MAAM,OAAO,QAAQ,EAClC,MAAM,IAAI,MAAM,uBAAuB,EAEzC,QAASL,EAAI,EAAGA,EAAI,GAAIA,IACtBH,EAAO,WAAWG,CAAC,EAAIK,EAAKL,CAAC,EAE/B,MAAMM,EAAI,EAAI,KAAK,IAAIT,EAAO,IAAM,KAAK,GAAK,GAAG,EAAGU,EAAIV,EAAO,KAAM,EAAIA,EAAO,IAC1EW,EAAa,CAACF,EAAIT,EAAO,OAAQ,EAAG,EAAG,EAAG,EAAGS,EAAG,EAAG,EAAG,EAAG,EAAG,GAAKC,EAAI,GAAI,GAAI,EAAG,EAAG,EAAIA,GAAKA,EAAI,GAAI,CAAC,EAC3G,QAASP,EAAI,EAAGA,EAAI,GAAIA,IACtBH,EAAO,iBAAiBG,CAAC,EAAIQ,EAAWR,CAAC,EAE3C,MAAMS,EAAiB,IAAI,UAAUZ,EAAO,gBAAgB,EAAE,SAAS,IAAI,UAAUA,EAAO,UAAU,CAAC,EAAE,eAAe,EACxH,QAASG,EAAI,EAAGA,EAAI,GAAIA,IACtBH,EAAO,qBAAqBG,CAAC,EAAIS,EAAeT,CAAC,CAErD",
|
|
6
|
-
"names": ["cross", "a", "b", "updateCamera", "camera", "z", "v", "i", "zLength", "x", "xLength", "y", "view", "f", "n", "projection", "projectionView"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{lightGrid as x}from"./lightGrid.js";import{traverse as c}from"./traverse.js";import{worldLights as m}from"./worldLights.js";import{destroyTexture as p}from"./destroyTexture.js";import{bindSunlight as v}from"./bindSunlight.js";function S(g){const{device:l,sunlight:r}=g.renderer,e=[];for(const t of g._layers)!t.options.nightLight||!t.root.visible||c(t.root,i=>{if(!i.visible)return!0;i.extras?.lights&&e.push(i)});if(r.lightMeshes?.length===e.length&&e.every((t,i)=>r.lightMeshes[i].mesh===t&&r.lightMeshes[i].lights===t.extras.lights&&t.worldMatrix.every((s,o)=>s===r.lightMeshes[i].matrix[o])))return;const n=e.map(t=>{const i=t._worldLights,s=t.worldMatrix,o=t.extras.lights;if(i?.lights===o&&s.every((u,d)=>u===i.matrix[d]))return i.data;const a=m(o,s);return t._worldLights={lights:o,matrix:[...s],data:a},a}),{data:h,count:f}=x(n,l.limits.maxStorageBufferBindingSize);r.lights.size<h.byteLength&&(p(g,r.lights),r.lights=l.createBuffer({size:h.byteLength,usage:GPUBufferUsage.STORAGE|GPUBufferUsage.COPY_DST}),v(g)),l.queue.writeBuffer(r.lights,0,h),r.lightCount=f,r.lightMeshes=e.map(t=>({mesh:t,lights:t.extras.lights,matrix:[...t.worldMatrix]}))}export{S as updatePointLights};
|
|
2
|
-
//# sourceMappingURL=updatePointLights.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/updatePointLights.js"],
|
|
4
|
-
"sourcesContent": ["import { lightGrid } from './lightGrid.js';\nimport { traverse } from './traverse.js';\nimport { worldLights } from './worldLights.js';\nimport { destroyTexture } from './destroyTexture.js';\nimport { bindSunlight } from './bindSunlight.js';\n\n/** A cached spatial grid limits fragment lighting to nearby lamps, without dropping dense cells. */\n\nexport function updatePointLights(backend) {\n const { device, sunlight: sun } = backend.renderer;\n const meshes = [];\n for (const layer of backend._layers) {\n if (!layer.options.nightLight || !layer.root.visible) continue;\n traverse(layer.root, mesh => {\n if (!mesh.visible) return true;\n if (mesh.extras?.lights) meshes.push(mesh);\n });\n }\n if (sun.lightMeshes?.length === meshes.length && meshes.every((mesh, i) => sun.lightMeshes[i].mesh === mesh &&\n sun.lightMeshes[i].lights === mesh.extras.lights && mesh.worldMatrix.every((v, j) => v === sun.lightMeshes[i].matrix[j]))) return;\n // Per mesh, world-space [x, y, z, radius, r, g, b, intensity] per light: re-packed only when its lights or matrix change.\n const packed = meshes.map(mesh => {\n const cache = mesh._worldLights, m = mesh.worldMatrix, lights = mesh.extras.lights;\n if (cache?.lights === lights && m.every((v, j) => v === cache.matrix[j])) return cache.data;\n const values = worldLights(lights, m);\n mesh._worldLights = { lights, matrix: [...m], data: values };\n return values;\n });\n const { data, count } = lightGrid(packed, device.limits.maxStorageBufferBindingSize);\n if (sun.lights.size < data.byteLength) {\n destroyTexture(backend, sun.lights);\n sun.lights = device.createBuffer({ size: data.byteLength, usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST });\n bindSunlight(backend);\n }\n device.queue.writeBuffer(sun.lights, 0, data);\n sun.lightCount = count;\n sun.lightMeshes = meshes.map(mesh => ({ mesh, lights: mesh.extras.lights, matrix: [...mesh.worldMatrix] }));\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,aAAAA,MAAiB,iBAC1B,OAAS,YAAAC,MAAgB,gBACzB,OAAS,eAAAC,MAAmB,mBAC5B,OAAS,kBAAAC,MAAsB,sBAC/B,OAAS,gBAAAC,MAAoB,oBAItB,SAASC,EAAkBC,EAAS,CACzC,KAAM,CAAE,OAAAC,EAAQ,SAAUC,CAAI,EAAIF,EAAQ,SACpCG,EAAS,CAAC,EAChB,UAAWC,KAASJ,EAAQ,QACtB,CAACI,EAAM,QAAQ,YAAc,CAACA,EAAM,KAAK,SAC7CT,EAASS,EAAM,KAAMC,GAAQ,CAC3B,GAAI,CAACA,EAAK,QAAS,MAAO,GACtBA,EAAK,QAAQ,QAAQF,EAAO,KAAKE,CAAI,CAC3C,CAAC,EAEH,GAAIH,EAAI,aAAa,SAAWC,EAAO,QAAUA,EAAO,MAAM,CAACE,EAAM,IAAMH,EAAI,YAAY,CAAC,EAAE,OAASG,GACrGH,EAAI,YAAY,CAAC,EAAE,SAAWG,EAAK,OAAO,QAAUA,EAAK,YAAY,MAAM,CAACC,EAAGC,IAAMD,IAAMJ,EAAI,YAAY,CAAC,EAAE,OAAOK,CAAC,CAAC,CAAC,EAAG,OAE7H,MAAMC,EAASL,EAAO,IAAIE,GAAQ,CAChC,MAAMI,EAAQJ,EAAK,aAAcK,EAAIL,EAAK,YAAaM,EAASN,EAAK,OAAO,OAC5E,GAAII,GAAO,SAAWE,GAAUD,EAAE,MAAM,CAACJ,EAAGC,IAAMD,IAAMG,EAAM,OAAOF,CAAC,CAAC,EAAG,OAAOE,EAAM,KACvF,MAAMG,EAAShB,EAAYe,EAAQD,CAAC,EACpC,OAAAL,EAAK,aAAe,CAAE,OAAAM,EAAQ,OAAQ,CAAC,GAAGD,CAAC,EAAG,KAAME,CAAO,EACpDA,CACT,CAAC,EACK,CAAE,KAAAC,EAAM,MAAAC,CAAM,EAAIpB,EAAUc,EAAQP,EAAO,OAAO,2BAA2B,EAC/EC,EAAI,OAAO,KAAOW,EAAK,aACzBhB,EAAeG,EAASE,EAAI,MAAM,EAClCA,EAAI,OAASD,EAAO,aAAa,CAAE,KAAMY,EAAK,WAAY,MAAO,eAAe,QAAU,eAAe,QAAS,CAAC,EACnHf,EAAaE,CAAO,GAEtBC,EAAO,MAAM,YAAYC,EAAI,OAAQ,EAAGW,CAAI,EAC5CX,EAAI,WAAaY,EACjBZ,EAAI,YAAcC,EAAO,IAAIE,IAAS,CAAE,KAAAA,EAAM,OAAQA,EAAK,OAAO,OAAQ,OAAQ,CAAC,GAAGA,EAAK,WAAW,CAAE,EAAE,CAC5G",
|
|
6
|
-
"names": ["lightGrid", "traverse", "worldLights", "destroyTexture", "bindSunlight", "updatePointLights", "backend", "device", "sun", "meshes", "layer", "mesh", "v", "j", "packed", "cache", "m", "lights", "values", "data", "count"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function c(t){const i=t.parent,e=i?._worldMatrixVersion||0,s=!!t.matrix;let o=t._worldParent!==i||t._parentWorldVersion!==e||t._worldMatrixMode!==s;if(t.matrix){const a=t._matrixState||=new Float64Array(16);for(let r=0;r<16;r++)a[r]!==t.matrix[r]&&(o=!0),a[r]=t.matrix[r]}else{const a=t._transformState||=new Float64Array(9);for(let r=0;r<9;r++){const x=r<3?t.position[r]:r<6?t.rotation[r-3]:t.scale[r-6];a[r]!==x&&(o=!0),a[r]=x}}if(!o){for(const a of t.children)c(a);return}let l;if(t.matrix)l=t.matrix;else{const a=180/Math.PI,r=new DOMMatrix().translate(...t.position);r.rotateAxisAngleSelf(0,1,0,t.rotation[1]*a),r.rotateAxisAngleSelf(1,0,0,t.rotation[0]*a),r.rotateAxisAngleSelf(0,0,1,t.rotation[2]*a),l=r.scale(...t.scale).toFloat64Array()}const n=i?new DOMMatrix(i.worldMatrix).multiply(new DOMMatrix(l)).toFloat64Array():l;for(let a=0;a<16;a++)t.worldMatrix[a]=n[a];t._worldParent=i,t._parentWorldVersion=e,t._worldMatrixMode=s,t._worldMatrixVersion=(t._worldMatrixVersion||0)+1;for(const a of t.children)c(a)}export{c as updateWorldMatrix};
|
|
2
|
-
//# sourceMappingURL=updateWorldMatrix.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/updateWorldMatrix.js"],
|
|
4
|
-
"sourcesContent": ["/** Compose parent*local matrices; a node.matrix overrides its position/rotation/scale. */\n\nexport function updateWorldMatrix(node) {\n const parent = node.parent;\n const parentVersion = parent?._worldMatrixVersion || 0;\n const matrixMode = Boolean(node.matrix);\n let changed = node._worldParent !== parent || node._parentWorldVersion !== parentVersion ||\n node._worldMatrixMode !== matrixMode;\n if (node.matrix) {\n const state = node._matrixState ||= new Float64Array(16);\n for (let i = 0; i < 16; i++) {\n if (state[i] !== node.matrix[i]) changed = true;\n state[i] = node.matrix[i];\n }\n } else {\n const state = node._transformState ||= new Float64Array(9);\n for (let i = 0; i < 9; i++) {\n const value = i < 3 ? node.position[i] : i < 6 ? node.rotation[i - 3] : node.scale[i - 6];\n if (state[i] !== value) changed = true;\n state[i] = value;\n }\n }\n if (!changed) {\n for (const child of node.children) updateWorldMatrix(child);\n return;\n }\n let local;\n if (node.matrix) local = node.matrix;\n else {\n const degrees = 180 / Math.PI;\n const matrix = new DOMMatrix().translate(...node.position);\n // Node rotations use YXZ, as did the previous renderer.\n matrix.rotateAxisAngleSelf(0, 1, 0, node.rotation[1] * degrees);\n matrix.rotateAxisAngleSelf(1, 0, 0, node.rotation[0] * degrees);\n matrix.rotateAxisAngleSelf(0, 0, 1, node.rotation[2] * degrees);\n local = matrix.scale(...node.scale).toFloat64Array();\n }\n const world = parent\n ? new DOMMatrix(parent.worldMatrix).multiply(new DOMMatrix(local)).toFloat64Array()\n : local;\n for (let i = 0; i < 16; i++) node.worldMatrix[i] = world[i];\n node._worldParent = parent;\n node._parentWorldVersion = parentVersion;\n node._worldMatrixMode = matrixMode;\n node._worldMatrixVersion = (node._worldMatrixVersion || 0) + 1;\n for (const child of node.children) updateWorldMatrix(child);\n}\n"],
|
|
5
|
-
"mappings": "AAEO,SAASA,EAAkBC,EAAM,CACtC,MAAMC,EAASD,EAAK,OACdE,EAAgBD,GAAQ,qBAAuB,EAC/CE,EAAa,EAAQH,EAAK,OAChC,IAAII,EAAUJ,EAAK,eAAiBC,GAAUD,EAAK,sBAAwBE,GACzEF,EAAK,mBAAqBG,EAC5B,GAAIH,EAAK,OAAQ,CACf,MAAMK,EAAQL,EAAK,eAAiB,IAAI,aAAa,EAAE,EACvD,QAASM,EAAI,EAAGA,EAAI,GAAIA,IAClBD,EAAMC,CAAC,IAAMN,EAAK,OAAOM,CAAC,IAAGF,EAAU,IAC3CC,EAAMC,CAAC,EAAIN,EAAK,OAAOM,CAAC,CAE5B,KAAO,CACL,MAAMD,EAAQL,EAAK,kBAAoB,IAAI,aAAa,CAAC,EACzD,QAASM,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,MAAMC,EAAQD,EAAI,EAAIN,EAAK,SAASM,CAAC,EAAIA,EAAI,EAAIN,EAAK,SAASM,EAAI,CAAC,EAAIN,EAAK,MAAMM,EAAI,CAAC,EACpFD,EAAMC,CAAC,IAAMC,IAAOH,EAAU,IAClCC,EAAMC,CAAC,EAAIC,CACb,CACF,CACA,GAAI,CAACH,EAAS,CACZ,UAAWI,KAASR,EAAK,SAAUD,EAAkBS,CAAK,EAC1D,MACF,CACA,IAAIC,EACJ,GAAIT,EAAK,OAAQS,EAAQT,EAAK,WACzB,CACH,MAAMU,EAAU,IAAM,KAAK,GACrBC,EAAS,IAAI,UAAU,EAAE,UAAU,GAAGX,EAAK,QAAQ,EAEzDW,EAAO,oBAAoB,EAAG,EAAG,EAAGX,EAAK,SAAS,CAAC,EAAIU,CAAO,EAC9DC,EAAO,oBAAoB,EAAG,EAAG,EAAGX,EAAK,SAAS,CAAC,EAAIU,CAAO,EAC9DC,EAAO,oBAAoB,EAAG,EAAG,EAAGX,EAAK,SAAS,CAAC,EAAIU,CAAO,EAC9DD,EAAQE,EAAO,MAAM,GAAGX,EAAK,KAAK,EAAE,eAAe,CACrD,CACA,MAAMY,EAAQX,EACV,IAAI,UAAUA,EAAO,WAAW,EAAE,SAAS,IAAI,UAAUQ,CAAK,CAAC,EAAE,eAAe,EAChFA,EACJ,QAASH,EAAI,EAAGA,EAAI,GAAIA,IAAKN,EAAK,YAAYM,CAAC,EAAIM,EAAMN,CAAC,EAC1DN,EAAK,aAAeC,EACpBD,EAAK,oBAAsBE,EAC3BF,EAAK,iBAAmBG,EACxBH,EAAK,qBAAuBA,EAAK,qBAAuB,GAAK,EAC7D,UAAWQ,KAASR,EAAK,SAAUD,EAAkBS,CAAK,CAC5D",
|
|
6
|
-
"names": ["updateWorldMatrix", "node", "parent", "parentVersion", "matrixMode", "changed", "state", "i", "value", "child", "local", "degrees", "matrix", "world"]
|
|
7
|
-
}
|