leaflet-city-mapper 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -14
- package/cucumber.mjs +2 -2
- package/dist/leaflet-city-mapper-src.js +15326 -0
- package/dist/leaflet-city-mapper-src.js.map +7 -0
- package/dist/leaflet-city-mapper.js +4 -1
- package/dist/leaflet-city-mapper.js.map +4 -4
- package/libs/leaflet-lens.js +122 -0
- package/libs/leaflet.js +76 -0
- package/libs/openlayers-bindings.js +1128 -0
- package/libs/openlayers-bindings.min.js +99 -0
- package/libs/openlayers-bindings.min.js.map +7 -0
- package/package.json +5 -3
- package/src/archives/decodeDirectory.js +50 -0
- package/src/archives/decodeHeader.js +23 -0
- package/src/archives/decompress.js +10 -0
- package/src/archives/findDirectoryEntry.js +9 -0
- package/src/archives/findTile.js +31 -0
- package/src/archives/getDirectoryEntries.js +18 -0
- package/src/archives/getHeader.js +13 -0
- package/src/archives/getTileData.js +13 -0
- package/src/archives/getZxy.js +19 -0
- package/src/archives/loadDirectory.js +7 -0
- package/src/archives/loadSource.js +31 -0
- package/src/archives/read.js +32 -0
- package/src/archives/tileId.js +23 -0
- package/src/archives/varint.js +19 -0
- package/src/camera/angles.js +14 -0
- package/src/camera/animationPoint.js +11 -0
- package/src/camera/cameraMapReady.js +11 -0
- package/src/camera/cancelCameraAnimation.js +15 -0
- package/src/camera/cleanupCameraMap.js +14 -0
- package/src/camera/constrainCameraToBounds.js +3 -0
- package/src/camera/displayPoint.js +3 -0
- package/src/camera/fitCameraBounds.js +58 -0
- package/src/camera/getBearing.js +5 -0
- package/src/camera/getPitch.js +5 -0
- package/src/camera/groundBounds.js +18 -0
- package/src/camera/initializeCameraMap.js +30 -0
- package/src/camera/mapAnimateCamera.js +24 -0
- package/src/camera/mapCamera.js +103 -0
- package/src/camera/mapContainerPointToLayerPoint.js +9 -0
- package/src/camera/mapGetBearing.js +4 -0
- package/src/camera/mapGetBounds.js +20 -0
- package/src/camera/mapGetBoundsCenterZoom.js +10 -0
- package/src/camera/mapGetBoundsZoom.js +24 -0
- package/src/camera/mapGetCenterLayerPoint.js +6 -0
- package/src/camera/mapGetPitch.js +4 -0
- package/src/camera/mapLayerPointToContainerPoint.js +8 -0
- package/src/camera/mapLimitCenter.js +17 -0
- package/src/camera/mapLimitOffset.js +14 -0
- package/src/camera/mapPanBy.js +10 -0
- package/src/camera/mapPanInside.js +20 -0
- package/src/camera/mapResetNorth.js +4 -0
- package/src/camera/mapResetNorthPitch.js +4 -0
- package/src/camera/mapSetBearing.js +3 -0
- package/src/camera/mapSetPitch.js +3 -0
- package/src/camera/mapSetPitchAndBearing.js +22 -0
- package/src/camera/mapSetZoomAround.js +15 -0
- package/src/camera/mapStopPitchBearingAnimation.js +6 -0
- package/src/camera/mapTryAnimatedPan.js +10 -0
- package/src/camera/mapUpdateCameraOverlays.js +8 -0
- package/src/camera/pointOf.js +5 -0
- package/src/camera/project.js +27 -0
- package/src/camera/runCameraAnimations.js +31 -0
- package/src/camera/scheduleCameraAnimation.js +13 -0
- package/src/camera/updateSky.js +22 -0
- package/src/camera/verticalGroundY.js +4 -0
- package/src/cog/decodeCogTile.js +24 -0
- package/src/cog/finiteCogValues.js +5 -0
- package/src/cog/getCogAssetEntry.js +15 -0
- package/src/cog/getCogBase.js +10 -0
- package/src/cog/getCogHeader.js +3 -0
- package/src/cog/getCogProfile.js +16 -0
- package/src/cog/getCogTile.js +12 -0
- package/src/cog/getColorTile.js +25 -0
- package/src/cog/getElevationTile.js +16 -0
- package/src/cog/hasCogProjection.js +9 -0
- package/src/cog/initCog.js +7 -0
- package/src/cog/invalidCogFullResponse.js +3 -0
- package/src/cog/openCog.js +30 -0
- package/src/cog/openCogAsset.js +14 -0
- package/src/cog/readCog.js +25 -0
- package/src/cog/readCogBlock.js +8 -0
- package/src/cog/readCogBody.js +20 -0
- package/src/cog/readCogDirectories.js +20 -0
- package/src/cog/readCogDirectory.js +21 -0
- package/src/cog/readCogLevel.js +27 -0
- package/src/cog/readCogTag.js +15 -0
- package/src/cog/validCogDimensions.js +6 -0
- package/src/cog/validCogEncoding.js +5 -0
- package/src/cog/validCogGeoArrays.js +8 -0
- package/src/cog/validCogGrid.js +9 -0
- package/src/cog/validCogTileCoordinates.js +4 -0
- package/src/cog/validateCogContainer.js +9 -0
- package/src/cog/validateCogContentRange.js +8 -0
- package/src/cog/validateCogOffsets.js +10 -0
- package/src/cog/validateCogRange.js +7 -0
- package/src/cog/validateCogResponse.js +15 -0
- package/src/collision/collectMeshes.js +5 -0
- package/src/collision/collider.js +56 -0
- package/src/collision/hiddenLightHit.js +8 -0
- package/src/collision/indexTriangle.js +11 -0
- package/src/collision/intersectMeshes.js +32 -0
- package/src/collision/localRay.js +21 -0
- package/src/collision/mergeHits.js +11 -0
- package/src/collision/rayBounds.js +19 -0
- package/src/collision/readTriangle.js +20 -0
- package/src/collision/sortHits.js +17 -0
- package/src/collision/transformTriangle.js +9 -0
- package/src/collision/triangleDistance.js +21 -0
- package/src/collision/worldHit.js +18 -0
- package/src/controls/acceptPitchDrag.js +4 -0
- package/src/controls/acceptRotateDrag.js +3 -0
- package/src/controls/addCameraHandler.js +9 -0
- package/src/controls/adjustCameraDrag.js +15 -0
- package/src/controls/cameraControls.js +91 -0
- package/src/controls/cameraDragClick.js +10 -0
- package/src/controls/cameraDragContextMenu.js +9 -0
- package/src/controls/cameraDragDown.js +23 -0
- package/src/controls/cameraDragEnd.js +7 -0
- package/src/controls/cameraDragMove.js +28 -0
- package/src/controls/changeCameraTouch.js +17 -0
- package/src/controls/cleanupCameraTouch.js +29 -0
- package/src/controls/compassAddHooks.js +18 -0
- package/src/controls/compassOrientation.js +7 -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 +26 -0
- package/src/controls/editable.js +3 -0
- package/src/controls/endAllCameraDrags.js +9 -0
- package/src/controls/endAllCameraTouches.js +9 -0
- package/src/controls/endCameraTouch.js +12 -0
- package/src/controls/endCameraTouchEvent.js +8 -0
- package/src/controls/failCompassPermission.js +4 -0
- package/src/controls/finishCameraDrag.js +9 -0
- package/src/controls/finishCompassPermission.js +17 -0
- package/src/controls/loadCameraControls.js +9 -0
- package/src/controls/moveCameraTouch.js +29 -0
- package/src/controls/notifyCameraTouchChange.js +1 -0
- package/src/controls/pitchDragAddHooks.js +8 -0
- package/src/controls/pitchDragRemoveHooks.js +5 -0
- package/src/controls/refreshRotateControl.js +10 -0
- package/src/controls/refreshRotateFocus.js +5 -0
- package/src/controls/removeCameraDrag.js +26 -0
- package/src/controls/resizeMap.js +3 -0
- package/src/controls/rotateButtonClick.js +11 -0
- package/src/controls/rotateButtonKeydown.js +15 -0
- package/src/controls/rotateControl.js +4 -0
- package/src/controls/rotateOnAdd.js +42 -0
- package/src/controls/rotateOnRemove.js +6 -0
- package/src/controls/shiftRotateAddHooks.js +10 -0
- package/src/controls/shiftRotateRemoveHooks.js +5 -0
- package/src/controls/shiftRotateWheel.js +11 -0
- package/src/controls/startCameraTouch.js +33 -0
- package/src/core/addImageState.js +8 -0
- package/src/core/addRasterImage.js +12 -0
- package/src/core/adjustCameraMarkerPan.js +28 -0
- package/src/core/beforeNativeRender.js +10 -0
- package/src/core/boundsQuad.js +12 -0
- package/src/core/bringNativeLayerToBack.js +8 -0
- package/src/core/bringNativeLayerToFront.js +8 -0
- package/src/core/bypassNativeEvent.js +11 -0
- package/src/core/cameraCircleBounds.js +7 -0
- package/src/core/cameraMarkerDrag.js +21 -0
- package/src/core/cameraMarkerOnDrag.js +13 -0
- package/src/core/cancelGridFade.js +14 -0
- package/src/core/closestCameraLayerPoint.js +8 -0
- package/src/core/compareNativeHits.js +3 -0
- package/src/core/current.js +6 -0
- package/src/core/disposeNativeLayer.js +39 -0
- package/src/core/fireRasterLoad.js +6 -0
- package/src/core/forwardNativeError.js +3 -0
- package/src/core/gridlayerGetEvents.js +10 -0
- package/src/core/gridlayerGetTiledPixelBounds.js +12 -0
- package/src/core/handleNativeMapEvent.js +27 -0
- package/src/core/hideTargets.js +18 -0
- package/src/core/initNativeGPU.js +25 -0
- package/src/core/initializeGridContainer.js +7 -0
- package/src/core/initializeNativeLayer.js +40 -0
- package/src/core/layerCallInitHooks.js +14 -0
- package/src/core/localPixel.js +5 -0
- package/src/core/localPixelForGeometry.js +7 -0
- package/src/core/localPosition.js +10 -0
- package/src/core/markerCameraIconPoint.js +12 -0
- package/src/core/markerGetEvents.js +9 -0
- package/src/core/markerImageBounds.js +11 -0
- package/src/core/markerInitInteraction.js +10 -0
- package/src/core/markerQuadCorners.js +48 -0
- package/src/core/markerSetIcon.js +12 -0
- package/src/core/markerSetPos.js +19 -0
- package/src/core/markerSetRotation.js +9 -0
- package/src/core/markerUpdateZIndex.js +12 -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/nativeEventSource.js +18 -0
- package/src/core/nativeEvents.js +31 -0
- package/src/core/nativeImageError.js +13 -0
- package/src/core/nativeImageRefresh.js +11 -0
- package/src/core/nativeLayer.js +100 -0
- package/src/core/nativeLayerMethod.js +26 -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 +29 -0
- package/src/core/popupGetEvents.js +8 -0
- package/src/core/popupUpdatePosition.js +17 -0
- package/src/core/pruneNativeResources.js +20 -0
- package/src/core/putNativeMesh.js +36 -0
- package/src/core/quadNativeMesh.js +20 -0
- package/src/core/readyNativeGPU.js +9 -0
- package/src/core/redrawPath.js +6 -0
- package/src/core/refreshNativeEvent.js +5 -0
- package/src/core/refreshNativeLayer.js +34 -0
- package/src/core/refreshNativeLayerContract.js +8 -0
- package/src/core/rejectNativeReady.js +4 -0
- package/src/core/removeImageState.js +9 -0
- package/src/core/removeLayer.js +22 -0
- package/src/core/removeNativeEvents.js +17 -0
- package/src/core/removeTargets.js +12 -0
- package/src/core/reorderNativeLayer.js +9 -0
- package/src/core/resolveNativeReady.js +4 -0
- package/src/core/restoreNativeEvents.js +6 -0
- package/src/core/runGridFades.js +19 -0
- package/src/core/runMarkerPanFrame.js +14 -0
- package/src/core/scheduleGridFade.js +14 -0
- package/src/core/scheduleMarkerPan.js +11 -0
- package/src/core/setRotation.js +5 -0
- package/src/core/styleNativeMesh.js +14 -0
- package/src/core/syncGridLayer.js +29 -0
- package/src/core/syncImageOverlay.js +9 -0
- package/src/core/syncMarker.js +14 -0
- package/src/core/syncVectorLayer.js +29 -0
- package/src/core/synchronizeNativeLayer.js +26 -0
- package/src/core/textureFor.js +46 -0
- package/src/core/tooltipGetEvents.js +8 -0
- package/src/core/tooltipSetPosition.js +11 -0
- package/src/core/transformNativePoint.js +7 -0
- package/src/core/updateGridOpacity.js +27 -0
- package/src/core/updateNativeHover.js +7 -0
- package/src/core/updateNativeLayerView.js +9 -0
- package/src/core/uploadCanvasTexture.js +22 -0
- package/src/core/uploadNativeImage.js +13 -0
- package/src/geometry/addBridges.js +29 -0
- package/src/geometry/below.js +3 -0
- package/src/geometry/box.js +8 -0
- package/src/geometry/bridgeEdge.js +11 -0
- package/src/geometry/bridgeElevation.js +21 -0
- package/src/geometry/bridgeFaces.js +15 -0
- package/src/geometry/bridgeLocal.js +5 -0
- package/src/geometry/bridgePaths.js +11 -0
- package/src/geometry/bridgePolygon.js +31 -0
- package/src/geometry/bridgeSides.js +11 -0
- package/src/geometry/build.js +23 -0
- package/src/geometry/circleAt.js +7 -0
- package/src/geometry/circleGeometry.js +34 -0
- package/src/geometry/clipLine.js +23 -0
- package/src/geometry/clipSegment.js +23 -0
- package/src/geometry/computeBounds.js +38 -0
- package/src/geometry/conformModelToTerrain.js +72 -0
- package/src/geometry/cross.js +7 -0
- package/src/geometry/dashValues.js +14 -0
- package/src/geometry/dashedSegment.js +16 -0
- package/src/geometry/disk.js +11 -0
- package/src/geometry/diskAt.js +6 -0
- package/src/geometry/dot.js +6 -0
- package/src/geometry/emitter.js +8 -0
- package/src/geometry/indexBridge.js +29 -0
- package/src/geometry/lampPostGeometry.js +30 -0
- package/src/geometry/lampRing.js +14 -0
- package/src/geometry/lightGeometry.js +15 -0
- package/src/geometry/line.js +21 -0
- package/src/geometry/lineJoin.js +26 -0
- package/src/geometry/nativeGeometry.js +21 -0
- package/src/geometry/nativeTriangle.js +3 -0
- package/src/geometry/polygon.js +23 -0
- package/src/geometry/push.js +3 -0
- package/src/geometry/quad.js +9 -0
- package/src/geometry/roofCoverage.js +23 -0
- package/src/geometry/roofFootprint.js +29 -0
- package/src/geometry/samePoint.js +3 -0
- package/src/geometry/segment.js +22 -0
- package/src/geometry/setVertexColor.js +17 -0
- package/src/geometry/sub.js +6 -0
- package/src/geometry/subtractRoofTile.js +19 -0
- package/src/geometry/surface.js +18 -0
- package/src/geometry/treeGeometry.js +30 -0
- package/src/geometry/treeRing.js +15 -0
- package/src/geometry/triangle.js +13 -0
- package/src/geometry/validateTree.js +7 -0
- package/src/geometry/vertexNormals.js +26 -0
- package/src/geometry/visit.js +10 -0
- package/src/globals/CELL.js +3 -0
- package/src/globals/Compass.js +1 -0
- package/src/globals/ContainerResize.js +1 -0
- package/src/globals/HEIGHT.js +1 -0
- package/src/globals/L.js +1 -0
- package/src/globals/PitchDrag.js +1 -0
- package/src/globals/ShiftRotate.js +1 -0
- package/src/globals/TILE_RADIUS.js +1 -0
- package/src/globals/TILE_SIZE.js +1 -0
- package/src/globals/TouchMode.js +1 -0
- package/src/globals/alphaBlend.js +12 -0
- package/src/globals/archiveDecoder.js +1 -0
- package/src/globals/archiveNorthWest.js +1 -0
- package/src/globals/archiveSouthEast.js +1 -0
- package/src/globals/atmosphereColor.js +1 -0
- package/src/globals/atmosphereStops.js +22 -0
- package/src/globals/blobParts.js +1 -0
- package/src/globals/boundsMethods.js +1 -0
- package/src/globals/cameraAngles.js +1 -0
- package/src/globals/cameraAnimatedOptions.js +3 -0
- package/src/globals/cameraAnimationFrame.js +1 -0
- package/src/globals/cameraAnimations.js +1 -0
- package/src/globals/cameraBearingSensitivity.js +1 -0
- package/src/globals/cameraByMap.js +1 -0
- package/src/globals/cameraDragSensitivity.js +1 -0
- package/src/globals/cameraDrags.js +1 -0
- package/src/globals/cameraEmptyOptions.js +1 -0
- package/src/globals/cameraFocusOptions.js +3 -0
- package/src/globals/cameraFov.js +3 -0
- package/src/globals/cameraListenerOptions.js +4 -0
- package/src/globals/cameraTouchStates.js +1 -0
- package/src/globals/cameraZeroPadding.js +1 -0
- package/src/globals/closestMethods.js +1 -0
- package/src/globals/cogTags.js +1 -0
- package/src/globals/colliders.js +1 -0
- package/src/globals/colorLayout.js +8 -0
- package/src/globals/coreEventTypes.js +4 -0
- package/src/globals/coreMatrixKeys.js +4 -0
- package/src/globals/coreQuadIndices.js +1 -0
- package/src/globals/coreQuadUV.js +1 -0
- package/src/globals/coreSampler.js +4 -0
- package/src/globals/coreWhite.js +1 -0
- package/src/globals/cosObliquity.js +3 -0
- package/src/globals/coverageTiles.js +1 -0
- package/src/globals/dark.js +1 -0
- package/src/globals/defaultMaterial.js +1 -0
- package/src/globals/degrees.js +1 -0
- package/src/globals/demBuffer.js +4 -0
- package/src/globals/demLayout.js +3 -0
- package/src/globals/demSize.js +1 -0
- package/src/globals/demTarget.js +3 -0
- package/src/globals/demTexture.js +5 -0
- package/src/globals/depthBindGroup.js +9 -0
- package/src/globals/depthTexture.js +5 -0
- package/src/globals/directoryReader.js +4 -0
- package/src/globals/disabledShadow.js +1 -0
- package/src/globals/dragByHandler.js +1 -0
- package/src/globals/dragStates.js +1 -0
- package/src/globals/drawEntries.js +1 -0
- package/src/globals/drawFrameEntry.js +7 -0
- package/src/globals/drawMeshEntry.js +7 -0
- package/src/globals/drawSamplerEntries.js +18 -0
- package/src/globals/drawTerrainEntry.js +4 -0
- package/src/globals/drawTextureEntries.js +18 -0
- package/src/globals/earthCirc.js +1 -0
- package/src/globals/elevationWGSL.js +27 -0
- package/src/globals/fragmentShader.js +3 -0
- package/src/globals/frameBuffer.js +4 -0
- package/src/globals/frameCommands.js +1 -0
- package/src/globals/frameLayoutEntry.js +7 -0
- package/src/globals/geometryDecoder.js +1 -0
- package/src/globals/geometryEmpty.js +1 -0
- package/src/globals/geometryImageOptions.js +4 -0
- package/src/globals/geometryPixelStates.js +1 -0
- package/src/globals/geometryQuaternion.js +1 -0
- package/src/globals/geometryScale.js +1 -0
- package/src/globals/geometrySemantics.js +5 -0
- package/src/globals/geometryTranslation.js +1 -0
- package/src/globals/glass.js +1 -0
- package/src/globals/gridEvents.js +1 -0
- package/src/globals/gridFadeFrame.js +1 -0
- package/src/globals/gridInitializers.js +1 -0
- package/src/globals/halfRadians.js +1 -0
- package/src/globals/headerBounds.js +1 -0
- package/src/globals/headerFlags.js +1 -0
- package/src/globals/headerOffsets.js +5 -0
- package/src/globals/hull.js +10 -0
- package/src/globals/imageStates.js +1 -0
- package/src/globals/instanceLayout.js +9 -0
- package/src/globals/lampDirections.js +8 -0
- package/src/globals/layerCallInitHooks.js +1 -0
- package/src/globals/layerProto.js +1 -0
- package/src/globals/lightScale.js +1 -0
- package/src/globals/limbs.js +8 -0
- package/src/globals/loading.js +1 -0
- package/src/globals/mapMethods.js +1 -0
- package/src/globals/markerMethods.js +1 -0
- package/src/globals/markerPanFrame.js +1 -0
- package/src/globals/meshBindGroup.js +4 -0
- package/src/globals/meshBuffer.js +4 -0
- package/src/globals/meshCopySize.js +1 -0
- package/src/globals/meshImage.js +4 -0
- package/src/globals/meshLayoutEntry.js +8 -0
- package/src/globals/meshOffsets.js +1 -0
- package/src/globals/meshPipeline.js +27 -0
- package/src/globals/meshStack.js +3 -0
- package/src/globals/meshTarget.js +3 -0
- package/src/globals/nativeEventMaps.js +1 -0
- package/src/globals/nativeMethodHandlers.js +31 -0
- package/src/globals/nativeRenderByLayer.js +1 -0
- package/src/globals/nextId.js +1 -0
- package/src/globals/normalLayout.js +8 -0
- package/src/globals/parts.js +24 -0
- package/src/globals/pendingGridFades.js +1 -0
- package/src/globals/pendingInitializations.js +1 -0
- package/src/globals/pendingMapChanges.js +1 -0
- package/src/globals/pendingMarkerPan.js +1 -0
- package/src/globals/pendingPlacements.js +1 -0
- package/src/globals/pendingRasterLoads.js +1 -0
- package/src/globals/pendingUpdates.js +1 -0
- package/src/globals/pendingZoomAnimations.js +1 -0
- package/src/globals/pipelineLayout.js +3 -0
- package/src/globals/popupEvents.js +1 -0
- package/src/globals/popupPan.js +1 -0
- package/src/globals/popupPosition.js +1 -0
- package/src/globals/positionLayout.js +8 -0
- package/src/globals/programEntries.js +1 -0
- package/src/globals/programLayout.js +3 -0
- package/src/globals/radians.js +1 -0
- package/src/globals/rasterBuffer.js +4 -0
- package/src/globals/rasterIndices.js +1 -0
- package/src/globals/rasterNormals.js +1 -0
- package/src/globals/rasterPoint.js +4 -0
- package/src/globals/rasterPositions.js +1 -0
- package/src/globals/rasterSampler.js +6 -0
- package/src/globals/rasterTexture.js +5 -0
- package/src/globals/rasterUVs.js +1 -0
- package/src/globals/removeLayer.js +1 -0
- package/src/globals/renderEmpty.js +1 -0
- package/src/globals/rendererDevices.js +1 -0
- package/src/globals/ringDirections.js +49 -0
- package/src/globals/roofBindGroup.js +17 -0
- package/src/globals/roofBlitSampler.js +4 -0
- package/src/globals/roofBuffer.js +4 -0
- package/src/globals/roofCommands.js +1 -0
- package/src/globals/roofCopySize.js +1 -0
- package/src/globals/roofImage.js +3 -0
- package/src/globals/roofMin.js +4 -0
- package/src/globals/roofOpacities.js +1 -0
- package/src/globals/roofPass.js +13 -0
- package/src/globals/roofPipeline.js +29 -0
- package/src/globals/roofSampler.js +4 -0
- package/src/globals/roofShader.js +16 -0
- package/src/globals/roofSignatures.js +1 -0
- package/src/globals/roofSize.js +4 -0
- package/src/globals/roofTarget.js +3 -0
- package/src/globals/roofTexture.js +5 -0
- package/src/globals/roofTiles.js +1 -0
- package/src/globals/roundProfile.js +7 -0
- package/src/globals/samplerLayoutEntries.js +36 -0
- package/src/globals/sceneByLayer.js +1 -0
- package/src/globals/sceneCleanupFields.js +1 -0
- package/src/globals/sceneEmptyOptions.js +1 -0
- package/src/globals/scenePass.js +19 -0
- package/src/globals/sceneSunlightUniforms.js +3 -0
- package/src/globals/sceneTransferFields.js +1 -0
- package/src/globals/sceneWalkHandlers.js +1 -0
- package/src/globals/shadowBindGroup.js +10 -0
- package/src/globals/shadowBounds.js +4 -0
- package/src/globals/shadowCamera.js +15 -0
- package/src/globals/shadowDepthLayout.js +9 -0
- package/src/globals/shadowHigh.js +1 -0
- package/src/globals/shadowInstanceLayouts.js +4 -0
- package/src/globals/shadowLayouts.js +3 -0
- package/src/globals/shadowLow.js +1 -0
- package/src/globals/shadowMeshLayout.js +10 -0
- package/src/globals/shadowOffsets.js +1 -0
- package/src/globals/shadowPass.js +9 -0
- package/src/globals/shadowPipeline.js +24 -0
- package/src/globals/shadowPipelineLayout.js +3 -0
- package/src/globals/shadowShader.js +3 -0
- package/src/globals/shadowTexture.js +5 -0
- package/src/globals/shadowValues.js +1 -0
- package/src/globals/shirt.js +1 -0
- package/src/globals/sinObliquity.js +3 -0
- package/src/globals/sizes.js +6 -0
- package/src/globals/skin.js +2 -0
- package/src/globals/sunBindGroup.js +20 -0
- package/src/globals/sunByMap.js +1 -0
- package/src/globals/sunlightByControl.js +1 -0
- package/src/globals/tau.js +1 -0
- package/src/globals/terrainLayoutEntry.js +8 -0
- package/src/globals/textureLayoutEntries.js +41 -0
- package/src/globals/tiledBounds.js +1 -0
- package/src/globals/tooltipEvents.js +1 -0
- package/src/globals/tooltipPosition.js +1 -0
- package/src/globals/touchByContainer.js +1 -0
- package/src/globals/trafficByLayer.js +1 -0
- package/src/globals/trafficClocks.js +1 -0
- package/src/globals/trafficEmptyList.js +1 -0
- package/src/globals/trafficEmptyOptions.js +1 -0
- package/src/globals/trafficRouteMaterial.js +1 -0
- package/src/globals/trafficShader.js +49 -0
- package/src/globals/triangleContexts.js +1 -0
- package/src/globals/trousers.js +1 -0
- package/src/globals/tyre.js +1 -0
- package/src/globals/uVLayout.js +8 -0
- package/src/globals/vehicles.js +55 -0
- package/src/globals/vertexShader.js +3 -0
- package/src/globals/walkByMap.js +1 -0
- package/src/globals/wantedTiles.js +1 -0
- package/src/index.js +48 -328
- package/src/lighting/cacheLightGrid.js +32 -0
- package/src/lighting/collectLightMeshes.js +9 -0
- package/src/lighting/lightGrid.js +43 -0
- package/src/lighting/updatePointLights.js +38 -0
- package/src/lighting/visitCells.js +8 -0
- package/src/lighting/visitLightCells.js +13 -0
- package/src/lighting/worldLights.js +25 -0
- package/src/lighting/writeLightCell.js +5 -0
- package/src/models/applyModelTransform.js +13 -0
- package/src/models/buildModelNodes.js +14 -0
- package/src/models/createModelContext.js +15 -0
- package/src/models/createModelGeometry.js +40 -0
- package/src/models/decodeModel.js +48 -0
- package/src/models/hasUnsupportedPrimitives.js +10 -0
- package/src/models/loadBuffer.js +6 -0
- package/src/models/loadImage.js +19 -0
- package/src/models/loadModel.js +44 -0
- package/src/models/loadModelResources.js +19 -0
- package/src/models/materialFor.js +21 -0
- package/src/models/modelNode.js +49 -0
- package/src/models/nodeMatrix.js +27 -0
- package/src/models/normalizeAccessor.js +11 -0
- package/src/models/readAccessor.js +33 -0
- package/src/models/readAccessorValue.js +7 -0
- package/src/models/readAccessorValues.js +20 -0
- package/src/models/readModelAttributes.js +20 -0
- package/src/models/readModelIndices.js +16 -0
- package/src/models/readSparseAccessor.js +19 -0
- package/src/models/releaseModelResources.js +10 -0
- package/src/models/textureFor.js +38 -0
- package/src/models/textureSampler.js +10 -0
- package/src/picking/collectVisibleMesh.js +4 -0
- package/src/picking/findFeature.js +52 -0
- package/src/picking/hit.js +24 -0
- package/src/picking/hitColliderCell.js +19 -0
- package/src/picking/hitMesh.js +26 -0
- package/src/picking/onClick.js +16 -0
- package/src/picking/onPointerLeave.js +14 -0
- package/src/picking/onPointerMove.js +18 -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 +66 -0
- package/src/picking/setHighlight.js +20 -0
- package/src/picking/shouldSkipOther.js +6 -0
- package/src/picking/showFeature.js +37 -0
- package/src/picking/validateCameraInverse.js +8 -0
- package/src/raster/addRasterTile.js +69 -0
- package/src/raster/comparePendingTiles.js +5 -0
- package/src/raster/createGeometry.js +29 -0
- package/src/raster/createRasterMesh.js +76 -0
- package/src/raster/finishAttachment.js +15 -0
- package/src/raster/finishRasterTile.js +61 -0
- package/src/raster/getRasterEvents.js +6 -0
- package/src/raster/getRasterTileSize.js +7 -0
- package/src/raster/initRaster.js +33 -0
- package/src/raster/isLoading.js +7 -0
- package/src/raster/loadRasterTile.js +13 -0
- package/src/raster/onPMTileAdd.js +13 -0
- package/src/raster/onPMTileRemove.js +11 -0
- package/src/raster/pruneRasterTiles.js +40 -0
- package/src/raster/pumpRasterTiles.js +26 -0
- package/src/raster/rasterTileRange.js +23 -0
- package/src/raster/readyRaster.js +16 -0
- package/src/raster/registerTerrainTile.js +15 -0
- package/src/raster/releaseRasterTile.js +21 -0
- package/src/raster/releaseRasterTiles.js +18 -0
- package/src/raster/removeRasterTile.js +16 -0
- package/src/raster/reportError.js +6 -0
- package/src/raster/retainRasterTiles.js +15 -0
- package/src/raster/setPMTileOpacity.js +7 -0
- package/src/raster/setPMTileZIndex.js +7 -0
- package/src/raster/setRasterOpacity.js +14 -0
- package/src/raster/setRasterTerrain.js +25 -0
- package/src/raster/setRasterZIndex.js +14 -0
- package/src/raster/terrainTileGeometry.js +16 -0
- package/src/raster/updateAttachedTiles.js +13 -0
- package/src/raster/updateRasterTiles.js +51 -0
- package/src/rendering/bindMeshTextures.js +50 -0
- package/src/rendering/collectFrameMeshes.js +38 -0
- package/src/rendering/collectMeshes.js +14 -0
- package/src/rendering/collectRoofTiles.js +15 -0
- package/src/rendering/collectVisibleMesh.js +27 -0
- package/src/rendering/compareMeshDepth.js +6 -0
- package/src/rendering/compareMeshes.js +8 -0
- package/src/rendering/compareRoofTiles.js +4 -0
- package/src/rendering/composeRoofAtlas.js +69 -0
- package/src/rendering/createMesh.js +44 -0
- package/src/rendering/createProgram.js +75 -0
- package/src/rendering/createProgramLayout.js +36 -0
- package/src/rendering/createProgramUniforms.js +17 -0
- package/src/rendering/destroyAfterSubmission.js +8 -0
- package/src/rendering/destroyTexture.js +9 -0
- package/src/rendering/disposeMesh.js +14 -0
- package/src/rendering/drawGeometry.js +41 -0
- package/src/rendering/drawPipeline.js +34 -0
- package/src/rendering/drawSceneMeshes.js +48 -0
- package/src/rendering/ensureRoofBlit.js +20 -0
- package/src/rendering/prepareFrameBuffer.js +17 -0
- package/src/rendering/prepareFrameMeshes.js +37 -0
- package/src/rendering/prepareFrameUniforms.js +44 -0
- package/src/rendering/prepareMeshCutout.js +12 -0
- package/src/rendering/prepareMeshTextures.js +23 -0
- package/src/rendering/prepareMeshUniforms.js +25 -0
- package/src/rendering/rebuildRoofAtlas.js +52 -0
- package/src/rendering/render.js +69 -0
- package/src/rendering/reportCompilation.js +17 -0
- package/src/rendering/resizeRenderer.js +24 -0
- package/src/rendering/resizeRoofTexture.js +24 -0
- package/src/rendering/revealRoofMesh.js +15 -0
- package/src/rendering/sortMeshes.js +6 -0
- package/src/rendering/synchronizeZoomView.js +26 -0
- package/src/rendering/textureBinding.js +7 -0
- package/src/rendering/updateMapCamera.js +46 -0
- package/src/rendering/updateRoofAtlas.js +20 -0
- package/src/rendering/updateRoofRaster.js +25 -0
- package/src/rendering/updateZoomCamera.js +18 -0
- package/src/rendering/uploadMeshTexture.js +26 -0
- package/src/rendering/uploadRoofTile.js +23 -0
- package/src/scene/addSceneLayer.js +17 -0
- package/src/scene/attach.js +54 -0
- package/src/scene/attachLayer.js +13 -0
- package/src/scene/callLayer.js +26 -0
- package/src/scene/cancelUpdate.js +13 -0
- package/src/scene/composeLocalTransform.js +16 -0
- package/src/scene/createLayer.js +7 -0
- package/src/scene/createSceneCamera.js +21 -0
- package/src/scene/emptyEvents.js +3 -0
- package/src/scene/emptyNode.js +12 -0
- package/src/scene/endZoom.js +23 -0
- package/src/scene/failAttachment.js +12 -0
- package/src/scene/get3DEvents.js +16 -0
- package/src/scene/getLocation.js +7 -0
- package/src/scene/init3D.js +43 -0
- package/src/scene/initializeLayer.js +22 -0
- package/src/scene/initializeRendererResources.js +35 -0
- package/src/scene/initializeSharedRenderer.js +45 -0
- package/src/scene/initializerFor.js +16 -0
- package/src/scene/isNativeLayer.js +12 -0
- package/src/scene/layerCountTitle.js +4 -0
- package/src/scene/layerInitialize.js +48 -0
- package/src/scene/layerLayerAdd.js +43 -0
- package/src/scene/mountRenderer.js +25 -0
- package/src/scene/onAdd3DLayer.js +39 -0
- package/src/scene/onMapChange.js +18 -0
- package/src/scene/onRemove3DLayer.js +63 -0
- package/src/scene/onZoomAnim.js +18 -0
- package/src/scene/placeEntry.js +13 -0
- package/src/scene/placeEntryElement.js +22 -0
- package/src/scene/placeUnderEntry.js +8 -0
- package/src/scene/ready.js +9 -0
- package/src/scene/ready3D.js +35 -0
- package/src/scene/releaseRenderer.js +14 -0
- package/src/scene/releaseSharedScene.js +25 -0
- package/src/scene/removeEntry.js +8 -0
- package/src/scene/removeLayerEvents.js +9 -0
- package/src/scene/removeSceneLayer.js +15 -0
- package/src/scene/renderLayerCount.js +13 -0
- package/src/scene/renderPendingMapChange.js +15 -0
- package/src/scene/renderPendingUpdates.js +23 -0
- package/src/scene/renderPendingZoomAnimation.js +11 -0
- package/src/scene/rendererDeviceError.js +14 -0
- package/src/scene/rendererDeviceLost.js +14 -0
- package/src/scene/replaceEntry.js +9 -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 +13 -0
- package/src/scene/restoreGeometry.js +23 -0
- package/src/scene/restoreMaterialTextures.js +16 -0
- package/src/scene/restoreObject.js +35 -0
- package/src/scene/runPlacements.js +9 -0
- package/src/scene/showWebGPUWarning.js +16 -0
- package/src/scene/startZoom.js +8 -0
- package/src/scene/traverse.js +7 -0
- package/src/scene/underEntry.js +16 -0
- package/src/scene/update.js +23 -0
- package/src/scene/updateCamera.js +57 -0
- package/src/scene/updateLayerCount.js +22 -0
- package/src/scene/updateWorldMatrix.js +43 -0
- package/src/scene/worldMatrixChanged.js +18 -0
- package/src/shaders/materialBaseShader.js +17 -0
- package/src/shaders/materialShaders.js +130 -0
- package/src/shaders/materialSurfaceShader.js +47 -0
- package/src/shaders/materialVertexShader.js +72 -0
- package/src/shaders/roofVertexShader.js +9 -0
- package/src/shaders/validateRoofMaterial.js +10 -0
- package/src/shadows/bindSunlight.js +21 -0
- package/src/shadows/drawShadowMeshes.js +58 -0
- package/src/shadows/ensureShadowPipeline.js +64 -0
- package/src/shadows/meshShadowBounds.js +24 -0
- package/src/shadows/renderSunlight.js +48 -0
- package/src/shadows/resizeSunlight.js +21 -0
- package/src/shadows/shadowBounds.js +23 -0
- package/src/shadows/shadowCacheMatches.js +17 -0
- package/src/shadows/shadowMatrix.js +49 -0
- package/src/shadows/shadowMeshMatches.js +11 -0
- package/src/sources/addGeneratedTriangle.js +7 -0
- package/src/sources/addTriangle.js +17 -0
- package/src/sources/attachAreaMesh.js +64 -0
- package/src/sources/buildArea.js +46 -0
- package/src/sources/buildAreaFeature.js +36 -0
- package/src/sources/buildAreaPoint.js +25 -0
- package/src/sources/buildAreaPolygon.js +29 -0
- package/src/sources/compareAreaDistance.js +3 -0
- package/src/sources/extrusionStyle.js +10 -0
- package/src/sources/featureAnchor.js +9 -0
- package/src/sources/generateTreeGeometry.js +13 -0
- package/src/sources/groundOffset.js +3 -0
- package/src/sources/initializeGeoJSON.js +10 -0
- package/src/sources/instanceAreaGeometry.js +31 -0
- package/src/sources/pendingSourceAreas.js +20 -0
- package/src/sources/projectRing.js +27 -0
- package/src/sources/projectedTree.js +19 -0
- package/src/sources/pump.js +44 -0
- package/src/sources/releaseArea.js +25 -0
- package/src/sources/setGeoJSONData.js +15 -0
- package/src/sources/setGeoJSONLayerData.js +5 -0
- package/src/sources/sourceAreaContext.js +19 -0
- package/src/sources/updateArea.js +52 -0
- package/src/sources/updateStatus.js +15 -0
- package/src/sunlight/addTimeLayer.js +6 -0
- package/src/sunlight/addTo.js +11 -0
- package/src/sunlight/atmosphere.js +25 -0
- package/src/sunlight/createSun.js +54 -0
- package/src/sunlight/horizontalPosition.js +16 -0
- package/src/sunlight/initSunlight.js +17 -0
- package/src/sunlight/initialize.js +14 -0
- package/src/sunlight/mix.js +7 -0
- package/src/sunlight/moonPosition.js +18 -0
- package/src/sunlight/onAdd.js +5 -0
- package/src/sunlight/onAddSun.js +27 -0
- package/src/sunlight/onRemoveSun.js +10 -0
- package/src/sunlight/projectCelestialBody.js +13 -0
- package/src/sunlight/remove.js +8 -0
- package/src/sunlight/removeSun.js +21 -0
- package/src/sunlight/removeTimeLayer.js +7 -0
- package/src/sunlight/render.js +9 -0
- package/src/sunlight/rgb.js +8 -0
- package/src/sunlight/solarPosition.js +18 -0
- package/src/sunlight/solarTime.js +11 -0
- package/src/sunlight/styleTimeControl.js +7 -0
- package/src/sunlight/tickSun.js +5 -0
- package/src/sunlight/updateCelestialDisc.js +12 -0
- package/src/sunlight/updateSky.js +17 -0
- package/src/sunlight/updateSun.js +40 -0
- package/src/sunlight/useLiveTime.js +6 -0
- package/src/sunlight/useSelectedTime.js +23 -0
- package/src/terrain/applyTerrain.js +21 -0
- package/src/terrain/clearLayerTerrain.js +8 -0
- package/src/terrain/copyTerrainTile.js +12 -0
- package/src/terrain/getElevation.js +14 -0
- package/src/terrain/initTerrain.js +23 -0
- package/src/terrain/loadReadyTerrain.js +5 -0
- package/src/terrain/loadTerrain.js +43 -0
- package/src/terrain/loadTerrainTiles.js +17 -0
- package/src/terrain/onTerrainAdd.js +25 -0
- package/src/terrain/onTerrainChange.js +17 -0
- package/src/terrain/onTerrainRemove.js +45 -0
- package/src/terrain/rasterProgram.js +51 -0
- package/src/terrain/readBridges.js +4 -0
- package/src/terrain/sample.js +7 -0
- package/src/terrain/setLayerTerrain.js +8 -0
- package/src/terrain/setTerrainHeight.js +14 -0
- package/src/terrain/terrainAtlas.js +17 -0
- package/src/terrain/terrainBuffers.js +27 -0
- package/src/terrain/terrainElevation.js +15 -0
- package/src/terrain/terrainGrid.js +32 -0
- package/src/terrain/terrainTileQueue.js +25 -0
- package/src/traffic/addTraffic.js +10 -0
- package/src/traffic/along.js +20 -0
- package/src/traffic/appendRouteDash.js +15 -0
- package/src/traffic/appendRouteSegment.js +15 -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 +7 -0
- package/src/traffic/disposeTrafficObject.js +16 -0
- package/src/traffic/drawTrafficRoute.js +9 -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 +19 -0
- package/src/traffic/initTraffic.js +66 -0
- package/src/traffic/loadTraffic.js +15 -0
- package/src/traffic/loadedTrafficLanes.js +16 -0
- package/src/traffic/locateTraffic.js +11 -0
- package/src/traffic/moveTraffic.js +15 -0
- package/src/traffic/placeTraffic.js +21 -0
- package/src/traffic/prepareTraffic.js +30 -0
- package/src/traffic/readyTraffic.js +6 -0
- package/src/traffic/rebaseTraffic.js +60 -0
- package/src/traffic/rebuildTrafficMesh.js +32 -0
- package/src/traffic/refreshTrafficTrips.js +32 -0
- package/src/traffic/removeTraffic.js +20 -0
- package/src/traffic/routeColor.js +6 -0
- package/src/traffic/routeGeometry.js +21 -0
- package/src/traffic/scheduledTrips.js +51 -0
- package/src/traffic/startTraffic.js +8 -0
- package/src/traffic/tickTraffic.js +26 -0
- package/src/traffic/toLanes.js +24 -0
- package/src/traffic/tooltip.js +9 -0
- package/src/traffic/trafficBounds.js +21 -0
- package/src/traffic/trafficNow.js +10 -0
- package/src/traffic/trafficStatusText.js +5 -0
- package/src/traffic/trafficStorage.js +5 -0
- package/src/traffic/tripsAt.js +27 -0
- package/src/traffic/updateTraffic.js +11 -0
- package/src/traffic/updateTrafficLights.js +16 -0
- package/src/traffic/updateTrafficPose.js +8 -0
- package/src/traffic/updateTrafficTerrain.js +12 -0
- package/src/traffic/uploadTrafficLanes.js +21 -0
- package/src/traffic/vehicleOffsets.js +12 -0
- package/src/triangulation/area.js +9 -0
- package/src/triangulation/clean.js +18 -0
- package/src/triangulation/clipEars.js +23 -0
- package/src/triangulation/connectHole.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/mergeHoles.js +11 -0
- package/src/triangulation/minimumX.js +6 -0
- package/src/triangulation/on.js +4 -0
- package/src/triangulation/polygonRings.js +14 -0
- package/src/triangulation/sortHoles.js +21 -0
- package/src/triangulation/triangulate.js +48 -0
- package/src/triangulation/validateArea.js +10 -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/parseColor.js +4 -4
- package/src/utils/toSRGB.js +3 -1
- package/src/utils/wrap.js +3 -1
- package/src/vehicles/bicycleModel.js +24 -0
- package/src/vehicles/boatBenches.js +9 -0
- package/src/vehicles/boatModel.js +35 -0
- package/src/vehicles/busModel.js +6 -0
- package/src/vehicles/carModel.js +38 -0
- package/src/vehicles/carriage.js +20 -0
- package/src/vehicles/metroModel.js +9 -0
- package/src/vehicles/mirror.js +8 -0
- package/src/vehicles/pedestrianModel.js +18 -0
- package/src/vehicles/tramModel.js +9 -0
- package/src/walk/blocked.js +6 -0
- package/src/walk/createWalk.js +66 -0
- package/src/walk/initWalk.js +19 -0
- package/src/walk/initialize.js +7 -0
- package/src/walk/land.js +32 -0
- package/src/walk/local.js +18 -0
- package/src/walk/moveWalker.js +23 -0
- package/src/walk/onAdd.js +29 -0
- package/src/walk/onBlur.js +3 -0
- package/src/walk/onKey.js +15 -0
- package/src/walk/onPointer.js +18 -0
- package/src/walk/onRemove.js +12 -0
- package/src/walk/onTerrain.js +5 -0
- package/src/walk/place.js +20 -0
- package/src/walk/start.js +46 -0
- package/src/walk/step.js +45 -0
- package/src/walk/stepWalkerHeight.js +11 -0
- package/src/walk/stop.js +30 -0
- package/src/walk/toggle.js +6 -0
- package/src/walk/updateWalkerView.js +22 -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/CELL.js +0 -4
- 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/colliders.js +0 -2
- 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/decompress.js +0 -5
- 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/getHeader.js +0 -9
- package/src/utils/getZxy.js +0 -76
- package/src/utils/glass.js +0 -1
- package/src/utils/hit.js +0 -41
- package/src/utils/horizontalPosition.js +0 -16
- package/src/utils/hull.js +0 -1
- 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/limbs.js +0 -9
- package/src/utils/loadModel.js +0 -217
- package/src/utils/loadSource.js +0 -17
- 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/moonPosition.js +0 -17
- package/src/utils/nativeEvents.js +0 -77
- package/src/utils/nativeGeometry.js +0 -131
- package/src/utils/nativeLayer.js +0 -317
- package/src/utils/nodeMatrix.js +0 -22
- package/src/utils/onAdd3DLayer.js +0 -31
- package/src/utils/onAddSun.js +0 -147
- package/src/utils/onClick.js +0 -13
- package/src/utils/onMapChange.js +0 -16
- package/src/utils/onPMTileAdd.js +0 -15
- package/src/utils/onPMTileRemove.js +0 -8
- package/src/utils/onPointerLeave.js +0 -11
- package/src/utils/onPointerMove.js +0 -15
- 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/projectCelestialBody.js +0 -13
- package/src/utils/pump.js +0 -226
- package/src/utils/rasterTiles.js +0 -285
- package/src/utils/raycast.js +0 -60
- package/src/utils/read.js +0 -29
- 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/setTerrainHeight.js +0 -10
- package/src/utils/setVertexColor.js +0 -14
- package/src/utils/showFeature.js +0 -27
- package/src/utils/sizes.js +0 -1
- package/src/utils/skin.js +0 -2
- package/src/utils/solarPosition.js +0 -17
- package/src/utils/sortMeshes.js +0 -12
- package/src/utils/startZoom.js +0 -5
- package/src/utils/terrainAtlas.js +0 -21
- package/src/utils/terrainElevation.js +0 -20
- package/src/utils/terrainGrid.js +0 -23
- package/src/utils/textureSampler.js +0 -10
- 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 → collision}/horizontalRay.js +0 -0
- /package/src/{utils → globals}/headlight.js +0 -0
- /package/src/{utils → globals}/moves.js +0 -0
- /package/src/{utils → globals}/paints.js +0 -0
- /package/src/{utils → globals}/renderers.js +0 -0
- /package/src/{utils → globals}/speed.js +0 -0
- /package/src/{utils → globals}/taillight.js +0 -0
- /package/src/{utils → globals}/types.js +0 -0
- /package/src/{utils → globals}/white.js +0 -0
- /package/src/{utils → scene}/setParent.js +0 -0
package/dist/utils/mapCamera.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const l=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Map.prototype)),T=Math.PI/180,m=t=>Array.isArray(t)?new L.Point(t[0],t[1]):new L.Point(t.x,t.y);L.Map.mergeOptions({rotate:!0,bearing:0,pitch:0,pitchMaxDistance:3,rotateControl:!0,shiftKeyRotate:!0,pitchDrag:!0,touchRotate:!1,touchPitch:!1,compassBearing:!1});function G(t){const e=t.getBearing()*T,i=t.getPitch()*T;return[Math.cos(e),Math.sin(e),Math.cos(i),Math.sin(i)]}function M(t,e,i=!1,n=!1){const o=t.getSize().divideBy(2),a=t.getSize().y*1.5;if(!a)return m(e);const[s,r,h,c]=G(t),g=m(e).subtract(o);if(i){const y=t.getSize().y*t.options.pitchMaxDistance,B=h*a+c*g.y;let _=B>0?g.y*a/B:-y;n&&(_=Math.max(-y,Math.min(y,_)));const x=g.x*(a-c*_)/a;return new L.Point(s*x+r*_,-r*x+s*_).add(o)}const d=s*g.x-r*g.y,p=r*g.x+s*g.y,f=a/(a-c*p);return new L.Point(d*f,h*p*f).add(o)}function I(t,e){return t.layerPointToContainerPoint(e).subtract(t._getMapPanePos())}function E(t,e,i=!1){const n=t._cameraView;if(!n)return e;const o=t.getSize().divideBy(2),a=t.getZoomScale(n.zoom),s=t.project(t.getCenter(),n.zoom).subtract(t.project(n.center,n.zoom));return i?e.subtract(o).subtract(s).divideBy(a).add(o):e.subtract(o).multiplyBy(a).add(s).add(o)}function F(t,e=[0,0]){const i=m(e).divideBy(2),n=t.getSize().subtract(i);return new L.Bounds([[i.x,i.y],[n.x,i.y],[i.x,n.y],[n.x,n.y]].map(o=>M(t,o,!0,!0)))}function $(t,e,i={}){e=e.getBounds?e.getBounds():e instanceof L.LatLngBounds?e:new L.LatLngBounds(e);const n=t.getZoom()??0,o=t.getSize().divideBy(2),a=t.getSize().y*1.5,s=m(i.paddingTopLeft||i.padding||[0,0]).subtract(o),r=o.subtract(m(i.paddingBottomRight||i.padding||[0,0])),[h,c,g,d]=G(t),p=t.getSize().y*t.options.pitchMaxDistance,f=u=>g*a+d*u>0?Math.max(-p,Math.min(p,u*a/(g*a+d*u))):-p,y=f(s.y),B=f(r.y),_=t.project(e.getNorthWest(),n).add(t.project(e.getSouthEast(),n)).divideBy(2),x=[e.getNorthWest(),e.getNorthEast(),e.getSouthWest(),e.getSouthEast()].map(u=>{const S=t.project(u,n).subtract(_);return new L.Point(h*S.x-c*S.y,c*S.x+h*S.y)}),C=Math.min(...x.map(u=>u.y)),O=Math.max(...x.map(u=>u.y)),k=s.x*d/a,j=r.x*d/a,w=j-k,z=Math.min(...x.map(u=>u.x+k*u.y)),D=Math.max(...x.map(u=>u.x+j*u.y)),q=Math.min((B-y)/(O-C),(r.x-s.x-w*y)/(D-z-w*C));let P=t.getScaleZoom(q,n);const Z=t.options.zoomSnap;if(Z&&(P=Math.floor(Math.round(P/(Z/100))/100)*Z),P=Math.max(t.getMinZoom(),Math.min(t.getMaxZoom(),i.maxZoom??1/0,P)),!Number.isFinite(P))return{center:e.getCenter(),zoom:P};const b=t.getZoomScale(P,n),U=O*b-B,N=C*b-y,V=Math.max(U,w?(b*(D-z)-r.x+s.x)/w:U),A=(Math.min(N,V)+N)/2,R=(b*(z+D)-s.x-r.x-(k+j)*A)/2,H=_.add(new L.Point(h*R+c*A,-c*R+h*A).divideBy(b));return{center:t.unproject(H,n),zoom:P}}function W(){const t=this.getSize().y,e=this.getPitch()*T,i=t*this.options.pitchMaxDistance,n=t*1.5,o=t/2-i*Math.cos(e)*n/(n+Math.sin(e)*i);o>0&&!this._pitchSky&&(this._pitchSky=L.DomUtil.create("div","leaflet-pitch-sky",this.getContainer()),this._pitchSky.setAttribute("aria-hidden","true"),this._pitchSky.style.cssText="position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))"),this._pitchSky&&(this._pitchSky.style.height=`${Math.max(0,Math.ceil(o))}px`,this._pitchSky.style.display=o>0?"":"none")}L.Map.include({getBearing(){return this._cameraBearing??0},getPitch(){return this._cameraPitch??0},_stopPitchBearingAnimation(){return cancelAnimationFrame(this._cameraFrame),this._cameraFrame=null,this},_setPitchAndBearing(t,e){if(!Number.isFinite(t)||!Number.isFinite(e))throw new TypeError("Camera angles must be finite numbers");const i=this.getPitch(),n=this.getBearing();return this._cameraPitch=Math.max(0,Math.min(85,t)),this._cameraBearing=(e%360+360)%360,this._loaded&&(W.call(this),n!==this.getBearing()&&this.fire("rotate",{bearing:this.getBearing()}),i!==this.getPitch()&&this.fire("pitch",{pitch:this.getPitch()})),this},_animateCamera(t,e,i={}){if(cancelAnimationFrame(this._cameraFrame),!Number.isFinite(t)||!Number.isFinite(e))throw new TypeError("Camera angles must be finite numbers");if(!i.animate||matchMedia("(prefers-reduced-motion: reduce)").matches)return this._setPitchAndBearing(t,e);const n=i.duration??.3;if(!Number.isFinite(n)||n<0)throw new TypeError("Camera duration must be nonnegative");const o=performance.now(),a=this.getPitch(),s=this.getBearing(),r=((e-s)%360+540)%360-180,h=c=>{const g=n?Math.min(1,(c-o)/(n*1e3)):1,d=1-(1-g)**3;this._setPitchAndBearing(a+(Math.max(0,Math.min(85,t))-a)*d,s+r*d),g<1&&(this._cameraFrame=requestAnimationFrame(h))};return this._cameraFrame=requestAnimationFrame(h),this},setBearing(t,e){return this._animateCamera(this.getPitch(),t,e)},setPitch(t,e){return this._animateCamera(t,this.getBearing(),e)},resetNorth(t={animate:!0}){return this.setBearing(0,t)},resetNorthPitch(t={animate:!0}){return this._animateCamera(0,0,t)},layerPointToContainerPoint(t){return M(this,E(this,l.layerPointToContainerPoint.call(this,t)))},containerPointToLayerPoint(t){return l.containerPointToLayerPoint.call(this,E(this,M(this,t,!0),!0))},_getCenterLayerPoint(){return l.containerPointToLayerPoint.call(this,this.getSize().divideBy(2))},_updateCameraOverlays(){for(const t of Object.values(this._layers))t instanceof L.Marker?t.update():(t instanceof L.Popup||t instanceof L.Tooltip)&&t._updatePosition()},panBy(t,e){const i=this.getSize().divideBy(2),n=i.subtract(M(this,i.subtract(m(t)),!0));return l.panBy.call(this,n,e)},setZoomAround(t,e,i){if(!this.getPitch()&&!this.getBearing())return l.setZoomAround.call(this,t,e,i);e=this._limitZoom(e);const n=this.getZoomScale(e),o=this.getSize().divideBy(2),a=t instanceof L.Point?t:this.latLngToContainerPoint(t),s=this.containerPointToLayerPoint(o),r=this.containerPointToLayerPoint(a),h=s.add(r.subtract(s).multiplyBy(1-1/n));return this.setView(this.layerPointToLatLng(h),e,{zoom:i})},panInside(t,e={}){if(!this.getPitch()&&!this.getBearing())return l.panInside.call(this,t,e);const i=m(e.paddingTopLeft||e.padding||[0,0]),n=this.getSize().subtract(m(e.paddingBottomRight||e.padding||[0,0])),o=this.latLngToContainerPoint(t),a=new L.Point(Math.max(i.x,Math.min(n.x,o.x)),Math.max(i.y,Math.min(n.y,o.y)));if(a.equals(o))return this;const s=this.latLngToLayerPoint(t).subtract(this.containerPointToLayerPoint(a));return this.panTo(this.unproject(this.project(this.getCenter()).add(s)),e)},_limitCenter(t,e,i){if(!i||!this._loaded||!this.getPitch()&&!this.getBearing())return l._limitCenter.call(this,t,e,i);const n=this.getSize().divideBy(2),o=F(this),a=this.project(t,e),s=new L.Bounds(a.add(o.min.subtract(n)),a.add(o.max.subtract(n))),r=this._getBoundsOffset(s,i,e);return Math.abs(r.x)<=1&&Math.abs(r.y)<=1?t:this.unproject(a.add(r),e)},_limitOffset(t,e){if(!e||!this.getPitch()&&!this.getBearing())return l._limitOffset.call(this,t,e);const i=this.getSize().divideBy(2),n=i.subtract(M(this,i.subtract(t),!0)),o=this.project(this.getCenter()),a=this.project(this._limitCenter(this.unproject(o.add(n)),this.getZoom(),e));return i.subtract(M(this,i.subtract(a.subtract(o))))},_getBoundsCenterZoom(t,e){return this.getPitch()||this.getBearing()?$(this,t,e):l._getBoundsCenterZoom.call(this,t,e)},getBoundsZoom(t,e,i){if(!this.getPitch()&&!this.getBearing())return l.getBoundsZoom.call(this,t,e,i);if(!e)return $(this,t,{padding:m(i||[0,0]).divideBy(2)}).zoom;t=t instanceof L.LatLngBounds?t:new L.LatLngBounds(t);const n=F(this,i).getSize(),o=this.project(t.getSouthEast()).subtract(this.project(t.getNorthWest())),a=this.getScaleZoom(Math.max(n.x/o.x,n.y/o.y)),s=this.options.zoomSnap;return Math.max(this.getMinZoom(),Math.min(this.getMaxZoom(),s?Math.ceil(a/s)*s:a))},_tryAnimatedPan(t,e){const i=this._getCenterOffset(t)._trunc();return e?.animate!==!0&&!this.getSize().contains(i)?!1:(l.panBy.call(this,i,e),!0)},getBounds(){if(!this.getPitch()&&!this.getBearing())return l.getBounds.call(this);const t=F(this),e=new L.LatLngBounds;for(const i of[t.min,t.max]){const n=l.containerPointToLayerPoint.call(this,E(this,i,!0));e.extend(this.layerPointToLatLng(n))}return e}}),L.Map.addInitHook(function(){if(!document.getElementById("leaflet-camera-zoom-style")){const t=document.createElement("style");t.id="leaflet-camera-zoom-style",t.textContent=[".leaflet-marker-icon",".leaflet-marker-shadow",".leaflet-popup",".leaflet-tooltip"].map(e=>`.leaflet-camera-zoom ${e}`).join(",")+"{transition:none!important}",document.head.append(t)}this._setPitchAndBearing(this.options.pitch,this.options.bearing),this.on("load resize pitch",W),this.on("rotate pitch",()=>{this.options.maxBounds&&this._panInsideMaxBounds()}),this.once("unload",()=>{cancelAnimationFrame(this._cameraFrame),this._pitchSky?.remove()}),this.whenReady(()=>{const t=this.dragging?._draggable;if(!t)return;const e=()=>{if(!this.getPitch()&&!this.getBearing())return;const i=this.getSize().divideBy(2),n=t._newPos.subtract(t._startPos),o=i.subtract(M(this,i.subtract(n),!0));t._newPos=t._startPos.add(o)};t.on("predrag",e),this.once("unload",()=>t.off("predrag",e))}),(this.options.rotate||this.options.trackContainerMutation)&&(this.cameraReady=import("./cameraControls.js").then(({cameraControls:t})=>{this._container?._leaflet_id&&t(this)}),this.cameraReady.catch(t=>this.fire("error",{error:t})))});const v=Object.defineProperties({},Object.getOwnPropertyDescriptors(L.Marker.prototype));L.Marker.mergeOptions({rotation:0,rotateWithView:!1,keepUpright:!1,scale:1}),L.Marker.include({setIcon(t){t instanceof L.DivIcon||(t.options.crossOrigin||=!0);const e=v.setIcon.call(this,t);return this._map&&!(t instanceof L.DivIcon)&&this._initNativeGPU(this._map),e},setRotation(t){if(!Number.isFinite(t))throw new TypeError("Marker rotation must be finite");return this.options.rotation=t,this.update(),this._nativeGPU?.refresh?.(),this},_cameraIconPoint(t,e){let i=this.options.rotation+(this.options.rotateWithView?this._map.getBearing()*T:0);this.options.keepUpright&&Math.cos(i)<0&&(i+=Math.PI);const n=this.options.scale;return new L.Point((t*Math.cos(i)-e*Math.sin(i))*n,(t*Math.sin(i)+e*Math.cos(i))*n)},getEvents(){return{...v.getEvents.call(this),rotate:this.update,pitch:this.update,move:this.update}},_setPos(t){v._setPos.call(this,I(this._map,t));for(const[e,i]of[[this._icon,"iconAnchor"],[this._shadow,"shadowAnchor"]]){if(!e)continue;const n=this._cameraIconPoint(1,0),o=this.options.icon.options,a=o[i]||o.iconAnchor;e.style.transformOrigin=a?`${a.x??a[0]}px ${a.y??a[1]}px`:"center",e.style.transform+=` rotate(${Math.atan2(n.y,n.x)}rad) scale(${this.options.scale})`}},_updateZIndex(t){v._updateZIndex.call(this,t);const e=this._cameraZIndexOffset!==t;this._cameraZIndexOffset=t,e&&this._nativeGPU?.refresh?.()},_initInteraction(){const t=v._initInteraction.call(this);return K.call(this),t}});function K(){if(!this.dragging||this.dragging._cameraDrag)return;const t=this.dragging,e=t._onDrag,i=t._adjustPan;t._onDrag=function(o){const a=this._marker._map,s=L.DomUtil.getPosition(this._marker._icon).add(a._getMapPanePos()),r=a.containerPointToLayerPoint(s),h=this._marker._icon;L.DomUtil.setPosition(h,r),e.call(this,o),this._marker._setPos(r)},t._adjustPan=function(o){const a=this._marker,s=a._map;if(!s.getPitch()&&!s.getBearing())return i.call(this,o);const r=L.DomUtil.getPosition(a._icon).add(s._getMapPanePos()),h=s.getSize(),c=m(a.options.autoPanPadding),g=a.options.autoPanSpeed,d=new L.Point((Math.max(0,r.x-h.x+c.x)-Math.max(0,c.x-r.x))/Math.max(1,c.x)*g,(Math.max(0,r.y-h.y+c.y)-Math.max(0,c.y-r.y))/Math.max(1,c.y)*g);if(!d.x&&!d.y)return;const p=s._getMapPanePos();s.panBy(d,{animate:!1});const f=p.subtract(s._getMapPanePos());this._draggable._newPos._add(f),this._draggable._startPos._add(f),L.DomUtil.setPosition(a._icon,this._draggable._newPos),this._onDrag(o),this._panRequest=requestAnimationFrame(()=>this._adjustPan(o))},t.enabled()&&(t._draggable.off("drag",e,t),t._draggable.on("drag",t._onDrag,t)),t._cameraDrag=!0}for(const t of[L.Popup,L.Tooltip]){const e=t.prototype.getEvents;t.include({getEvents(){return{...e.call(this),rotate:this._updatePosition,pitch:this._updatePosition,move:this._updatePosition}}})}const X=L.Popup.prototype._updatePosition,Y=L.Popup.prototype._adjustPan;L.Popup.include({_adjustPan(){const t=this._map;if(!t.getPitch()&&!t.getBearing())return Y.call(this);if(!this.options.autoPan)return;if(t._panAnim&&t._panAnim.stop(),this._autopanning){this._autopanning=!1;return}const e=this._container.getBoundingClientRect(),i=t.getContainer().getBoundingClientRect(),n=m(this.options.autoPanPaddingTopLeft||this.options.autoPanPadding),o=t.getSize().subtract(m(this.options.autoPanPaddingBottomRight||this.options.autoPanPadding)),a=e.left-i.left,s=e.top-i.top,r=e.right-i.left,h=e.bottom-i.top,c=Math.min(0,a-n.x)||Math.max(0,r-o.x),g=Math.min(0,s-n.y)||Math.max(0,h-o.y);if(!c&&!g)return;this.options.keepInView&&(this._autopanning=!0);const d=t.latLngToContainerPoint(this._latlng).subtract(new L.Point(c,g)),p=t.latLngToLayerPoint(this._latlng).subtract(t.containerPointToLayerPoint(d));t.fire("autopanstart"),t.panTo(t.unproject(t.project(t.getCenter()).add(p)))},_updatePosition(){if(X.call(this),!this._map)return;const t=this._map.latLngToLayerPoint(this._latlng),e=I(this._map,t).subtract(t);this._zoomAnimated?L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(e)):(this._container.style.left=`${this._containerLeft+e.x}px`,this._container.style.bottom=`${this._containerBottom-e.y}px`)}});const J=L.Tooltip.prototype._setPosition;L.Tooltip.include({_setPosition(t){J.call(this,t);const e=I(this._map,t).subtract(t);L.DomUtil.setPosition(this._container,L.DomUtil.getPosition(this._container).add(e))}});const Q=L.GridLayer.prototype._getTiledPixelBounds,tt=L.GridLayer.prototype.getEvents;L.GridLayer.include({getEvents(){const t=tt.call(this);return this._cameraGridUpdate||=L.Util.throttle(this._onMoveEnd,this.options.updateInterval,this),{...t,rotate:this._cameraGridUpdate,pitch:this._cameraGridUpdate}},_getTiledPixelBounds(t){if(!this._map.getBearing()&&!this._map.getPitch())return Q.call(this,t);const e=this._map.getBounds();return new L.Bounds(this._map.project(e.getNorthWest(),this._tileZoom),this._map.project(e.getSouthEast(),this._tileZoom))}});
|
|
2
|
-
//# sourceMappingURL=mapCamera.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/mapCamera.js"],
|
|
4
|
-
"sourcesContent": ["const mapMethods = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Map.prototype));\r\nconst radians = Math.PI / 180;\r\nconst pointOf = point => Array.isArray(point) ? new L.Point(point[0], point[1]) : new L.Point(point.x, point.y);\r\n\r\nL.Map.mergeOptions({\r\n rotate: true, bearing: 0, pitch: 0, pitchMaxDistance: 3,\r\n rotateControl: true, shiftKeyRotate: true, pitchDrag: true,\r\n touchRotate: false, touchPitch: false, compassBearing: false,\r\n});\r\n\r\nfunction angles(map) {\r\n const bearing = map.getBearing() * radians, pitch = map.getPitch() * radians;\r\n return [Math.cos(bearing), Math.sin(bearing), Math.cos(pitch), Math.sin(pitch)];\r\n}\r\n\r\n// Ground coordinates only: the GPU camera handles elevated geometry, never CSS transforms.\r\nfunction project(map, point, inverse = false, limit = false) {\r\n const half = map.getSize().divideBy(2), distance = map.getSize().y * 1.5;\r\n if (!distance) return pointOf(point);\r\n const [cos, sin, tilt, rise] = angles(map);\r\n const p = pointOf(point).subtract(half);\r\n if (inverse) {\r\n const far = map.getSize().y * map.options.pitchMaxDistance;\r\n const denominator = tilt * distance + rise * p.y;\r\n let v = denominator > 0 ? p.y * distance / denominator : -far;\r\n if (limit) v = Math.max(-far, Math.min(far, v));\r\n const u = p.x * (distance - rise * v) / distance;\r\n return new L.Point(cos * u + sin * v, -sin * u + cos * v).add(half);\r\n }\r\n const u = cos * p.x - sin * p.y, v = sin * p.x + cos * p.y;\r\n const scale = distance / (distance - rise * v);\r\n return new L.Point(u * scale, tilt * v * scale).add(half);\r\n}\r\n\r\nfunction displayPoint(map, point) {\r\n return map.layerPointToContainerPoint(point).subtract(map._getMapPanePos());\r\n}\r\n\r\nfunction animationPoint(map, point, inverse = false) {\r\n const view = map._cameraView;\r\n if (!view) return point;\r\n const half = map.getSize().divideBy(2), scale = map.getZoomScale(view.zoom);\r\n const shift = map.project(map.getCenter(), view.zoom).subtract(map.project(view.center, view.zoom));\r\n return inverse ? point.subtract(half).subtract(shift).divideBy(scale).add(half) :\r\n point.subtract(half).multiplyBy(scale).add(shift).add(half);\r\n}\r\n\r\nfunction groundBounds(map, padding = [0, 0]) {\r\n const min = pointOf(padding).divideBy(2), max = map.getSize().subtract(min);\r\n return new L.Bounds([[min.x, min.y], [max.x, min.y], [min.x, max.y], [max.x, max.y]]\r\n .map(point => project(map, point, true, true)));\r\n}\r\n\r\nfunction fitCameraBounds(map, bounds, options = {}) {\r\n bounds = bounds.getBounds ? bounds.getBounds() : bounds instanceof L.LatLngBounds ? bounds : new L.LatLngBounds(bounds);\r\n const zoom = map.getZoom() ?? 0, half = map.getSize().divideBy(2), distance = map.getSize().y * 1.5;\r\n const min = pointOf(options.paddingTopLeft || options.padding || [0, 0]).subtract(half);\r\n const max = half.subtract(pointOf(options.paddingBottomRight || options.padding || [0, 0]));\r\n const [cos, sin, tilt, rise] = angles(map);\r\n const far = map.getSize().y * map.options.pitchMaxDistance;\r\n const vertical = y => tilt * distance + rise * y > 0\r\n ? Math.max(-far, Math.min(far, y * distance / (tilt * distance + rise * y))) : -far;\r\n const top = vertical(min.y), bottom = vertical(max.y);\r\n const origin = map.project(bounds.getNorthWest(), zoom).add(map.project(bounds.getSouthEast(), zoom)).divideBy(2);\r\n const points = [bounds.getNorthWest(), bounds.getNorthEast(), bounds.getSouthWest(), bounds.getSouthEast()]\r\n .map(latlng => {\r\n const p = map.project(latlng, zoom).subtract(origin);\r\n return new L.Point(cos * p.x - sin * p.y, sin * p.x + cos * p.y);\r\n });\r\n const low = Math.min(...points.map(p => p.y)), high = Math.max(...points.map(p => p.y));\r\n const leftSlope = min.x * rise / distance, rightSlope = max.x * rise / distance;\r\n const slope = rightSlope - leftSlope;\r\n const left = Math.min(...points.map(p => p.x + leftSlope * p.y));\r\n const right = Math.max(...points.map(p => p.x + rightSlope * p.y));\r\n // Perspective viewport edges are straight lines on the ground: fit all four corners, not their screen midpoint.\r\n const scale = Math.min((bottom - top) / (high - low),\r\n (max.x - min.x - slope * top) / (right - left - slope * low));\r\n let target = map.getScaleZoom(scale, zoom);\r\n const snap = map.options.zoomSnap;\r\n if (snap) target = Math.floor(Math.round(target / (snap / 100)) / 100) * snap;\r\n target = Math.max(map.getMinZoom(), Math.min(map.getMaxZoom(), options.maxZoom ?? Infinity, target));\r\n if (!Number.isFinite(target)) return { center: bounds.getCenter(), zoom: target };\r\n const actual = map.getZoomScale(target, zoom);\r\n const vMin = high * actual - bottom, vMax = low * actual - top;\r\n const v = Math.max(vMin, slope ? (actual * (right - left) - max.x + min.x) / slope : vMin);\r\n const centerY = (Math.min(vMax, v) + vMax) / 2;\r\n const centerX = (actual * (left + right) - min.x - max.x - (leftSlope + rightSlope) * centerY) / 2;\r\n const center = origin.add(new L.Point(cos * centerX + sin * centerY, -sin * centerX + cos * centerY).divideBy(actual));\r\n return { center: map.unproject(center, zoom), zoom: target };\r\n}\r\n\r\nfunction updateSky() {\r\n const height = this.getSize().y, pitch = this.getPitch() * radians;\r\n const far = height * this.options.pitchMaxDistance, distance = height * 1.5;\r\n const top = height / 2 - far * Math.cos(pitch) * distance / (distance + Math.sin(pitch) * far);\r\n if (top > 0 && !this._pitchSky) {\r\n this._pitchSky = L.DomUtil.create('div', 'leaflet-pitch-sky', this.getContainer());\r\n this._pitchSky.setAttribute('aria-hidden', 'true');\r\n this._pitchSky.style.cssText = 'position:absolute;inset:0 0 auto;height:0;z-index:0;pointer-events:none;background:var(--leaflet-sky-background,linear-gradient(#9ec5e8,#dfe9f0))';\r\n }\r\n if (this._pitchSky) {\r\n this._pitchSky.style.height = `${Math.max(0, Math.ceil(top))}px`;\r\n this._pitchSky.style.display = top > 0 ? '' : 'none';\r\n }\r\n}\r\n\r\nL.Map.include({\r\n getBearing() { return this._cameraBearing ?? 0; },\r\n getPitch() { return this._cameraPitch ?? 0; },\r\n _stopPitchBearingAnimation() {\r\n cancelAnimationFrame(this._cameraFrame);\r\n this._cameraFrame = null;\r\n return this;\r\n },\r\n _setPitchAndBearing(pitch, bearing) {\r\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw new TypeError('Camera angles must be finite numbers');\r\n const previousPitch = this.getPitch(), previousBearing = this.getBearing();\r\n this._cameraPitch = Math.max(0, Math.min(85, pitch));\r\n this._cameraBearing = ((bearing % 360) + 360) % 360;\r\n if (this._loaded) {\r\n updateSky.call(this);\r\n if (previousBearing !== this.getBearing()) this.fire('rotate', { bearing: this.getBearing() });\r\n if (previousPitch !== this.getPitch()) this.fire('pitch', { pitch: this.getPitch() });\r\n }\r\n return this;\r\n },\r\n _animateCamera(pitch, bearing, options = {}) {\r\n cancelAnimationFrame(this._cameraFrame);\r\n if (!Number.isFinite(pitch) || !Number.isFinite(bearing)) throw new TypeError('Camera angles must be finite numbers');\r\n if (!options.animate || matchMedia('(prefers-reduced-motion: reduce)').matches) {\r\n return this._setPitchAndBearing(pitch, bearing);\r\n }\r\n const duration = options.duration ?? 0.3;\r\n if (!Number.isFinite(duration) || duration < 0) throw new TypeError('Camera duration must be nonnegative');\r\n const start = performance.now(), fromPitch = this.getPitch(), fromBearing = this.getBearing();\r\n const delta = ((bearing - fromBearing) % 360 + 540) % 360 - 180;\r\n const frame = now => {\r\n const progress = duration ? Math.min(1, (now - start) / (duration * 1000)) : 1;\r\n const eased = 1 - (1 - progress) ** 3;\r\n this._setPitchAndBearing(fromPitch + (Math.max(0, Math.min(85, pitch)) - fromPitch) * eased,\r\n fromBearing + delta * eased);\r\n if (progress < 1) this._cameraFrame = requestAnimationFrame(frame);\r\n };\r\n this._cameraFrame = requestAnimationFrame(frame);\r\n return this;\r\n },\r\n setBearing(bearing, options) { return this._animateCamera(this.getPitch(), bearing, options); },\r\n setPitch(pitch, options) { return this._animateCamera(pitch, this.getBearing(), options); },\r\n resetNorth(options = { animate: true }) { return this.setBearing(0, options); },\r\n resetNorthPitch(options = { animate: true }) { return this._animateCamera(0, 0, options); },\r\n layerPointToContainerPoint(point) {\r\n return project(this, animationPoint(this, mapMethods.layerPointToContainerPoint.call(this, point)));\r\n },\r\n containerPointToLayerPoint(point) {\r\n return mapMethods.containerPointToLayerPoint.call(this, animationPoint(this, project(this, point, true), true));\r\n },\r\n _getCenterLayerPoint() {\r\n return mapMethods.containerPointToLayerPoint.call(this, this.getSize().divideBy(2));\r\n },\r\n _updateCameraOverlays() {\r\n for (const layer of Object.values(this._layers)) {\r\n if (layer instanceof L.Marker) layer.update();\r\n else if (layer instanceof L.Popup || layer instanceof L.Tooltip) layer._updatePosition();\r\n }\r\n },\r\n panBy(offset, options) {\r\n const half = this.getSize().divideBy(2);\r\n const ground = half.subtract(project(this, half.subtract(pointOf(offset)), true));\r\n return mapMethods.panBy.call(this, ground, options);\r\n },\r\n setZoomAround(latlng, zoom, options) {\r\n if (!this.getPitch() && !this.getBearing()) return mapMethods.setZoomAround.call(this, latlng, zoom, options);\r\n zoom = this._limitZoom(zoom);\r\n const scale = this.getZoomScale(zoom), half = this.getSize().divideBy(2);\r\n const screen = latlng instanceof L.Point ? latlng : this.latLngToContainerPoint(latlng);\r\n const center = this.containerPointToLayerPoint(half), anchor = this.containerPointToLayerPoint(screen);\r\n const next = center.add(anchor.subtract(center).multiplyBy(1 - 1 / scale));\r\n return this.setView(this.layerPointToLatLng(next), zoom, { zoom: options });\r\n },\r\n panInside(latlng, options = {}) {\r\n if (!this.getPitch() && !this.getBearing()) return mapMethods.panInside.call(this, latlng, options);\r\n const min = pointOf(options.paddingTopLeft || options.padding || [0, 0]);\r\n const max = this.getSize().subtract(pointOf(options.paddingBottomRight || options.padding || [0, 0]));\r\n const screen = this.latLngToContainerPoint(latlng);\r\n const safe = new L.Point(Math.max(min.x, Math.min(max.x, screen.x)),\r\n Math.max(min.y, Math.min(max.y, screen.y)));\r\n if (safe.equals(screen)) return this;\r\n const delta = this.latLngToLayerPoint(latlng).subtract(this.containerPointToLayerPoint(safe));\r\n return this.panTo(this.unproject(this.project(this.getCenter()).add(delta)), options);\r\n },\r\n _limitCenter(center, zoom, bounds) {\r\n if (!bounds || !this._loaded || !this.getPitch() && !this.getBearing()) {\r\n return mapMethods._limitCenter.call(this, center, zoom, bounds);\r\n }\r\n const half = this.getSize().divideBy(2), footprint = groundBounds(this), point = this.project(center, zoom);\r\n const view = new L.Bounds(point.add(footprint.min.subtract(half)), point.add(footprint.max.subtract(half)));\r\n const offset = this._getBoundsOffset(view, bounds, zoom);\r\n return Math.abs(offset.x) <= 1 && Math.abs(offset.y) <= 1 ? center : this.unproject(point.add(offset), zoom);\r\n },\r\n _limitOffset(offset, bounds) {\r\n if (!bounds || !this.getPitch() && !this.getBearing()) return mapMethods._limitOffset.call(this, offset, bounds);\r\n const half = this.getSize().divideBy(2), ground = half.subtract(project(this, half.subtract(offset), true));\r\n const center = this.project(this.getCenter());\r\n const limited = this.project(this._limitCenter(this.unproject(center.add(ground)), this.getZoom(), bounds));\r\n return half.subtract(project(this, half.subtract(limited.subtract(center))));\r\n },\r\n _getBoundsCenterZoom(bounds, options) {\r\n return this.getPitch() || this.getBearing() ? fitCameraBounds(this, bounds, options) :\r\n mapMethods._getBoundsCenterZoom.call(this, bounds, options);\r\n },\r\n getBoundsZoom(bounds, inside, padding) {\r\n if (!this.getPitch() && !this.getBearing()) return mapMethods.getBoundsZoom.call(this, bounds, inside, padding);\r\n if (!inside) return fitCameraBounds(this, bounds, { padding: pointOf(padding || [0, 0]).divideBy(2) }).zoom;\r\n bounds = bounds instanceof L.LatLngBounds ? bounds : new L.LatLngBounds(bounds);\r\n const footprint = groundBounds(this, padding).getSize(), size = this.project(bounds.getSouthEast()).subtract(this.project(bounds.getNorthWest()));\r\n const zoom = this.getScaleZoom(Math.max(footprint.x / size.x, footprint.y / size.y));\r\n const snap = this.options.zoomSnap;\r\n return Math.max(this.getMinZoom(), Math.min(this.getMaxZoom(), snap ? Math.ceil(zoom / snap) * snap : zoom));\r\n },\r\n _tryAnimatedPan(center, options) {\r\n // Leaflet's geographic recentering already supplies ground pixels, not screen pixels.\r\n const offset = this._getCenterOffset(center)._trunc();\r\n if (options?.animate !== true && !this.getSize().contains(offset)) return false;\r\n mapMethods.panBy.call(this, offset, options);\r\n return true;\r\n },\r\n getBounds() {\r\n if (!this.getPitch() && !this.getBearing()) return mapMethods.getBounds.call(this);\r\n const footprint = groundBounds(this), bounds = new L.LatLngBounds();\r\n for (const point of [footprint.min, footprint.max]) {\r\n const raw = mapMethods.containerPointToLayerPoint.call(this, animationPoint(this, point, true));\r\n bounds.extend(this.layerPointToLatLng(raw));\r\n }\r\n return bounds;\r\n },\r\n});\r\n\r\nL.Map.addInitHook(function () {\r\n if (!document.getElementById('leaflet-camera-zoom-style')) {\r\n const style = document.createElement('style');\r\n style.id = 'leaflet-camera-zoom-style';\r\n style.textContent = ['.leaflet-marker-icon', '.leaflet-marker-shadow', '.leaflet-popup', '.leaflet-tooltip']\r\n .map(selector => `.leaflet-camera-zoom ${selector}`).join(',') + '{transition:none!important}';\r\n document.head.append(style);\r\n }\r\n this._setPitchAndBearing(this.options.pitch, this.options.bearing);\r\n this.on('load resize pitch', updateSky);\r\n this.on('rotate pitch', () => {\r\n if (this.options.maxBounds) this._panInsideMaxBounds();\r\n });\r\n this.once('unload', () => {\r\n cancelAnimationFrame(this._cameraFrame);\r\n this._pitchSky?.remove();\r\n });\r\n this.whenReady(() => {\r\n const draggable = this.dragging?._draggable;\r\n if (!draggable) return;\r\n const pan = () => {\r\n if (!this.getPitch() && !this.getBearing()) return;\r\n const half = this.getSize().divideBy(2), delta = draggable._newPos.subtract(draggable._startPos);\r\n const ground = half.subtract(project(this, half.subtract(delta), true));\r\n draggable._newPos = draggable._startPos.add(ground);\r\n };\r\n draggable.on('predrag', pan);\r\n this.once('unload', () => draggable.off('predrag', pan));\r\n });\r\n if (this.options.rotate || this.options.trackContainerMutation) {\r\n this.cameraReady = import('./cameraControls.js').then(({ cameraControls }) => {\r\n if (!this._container?._leaflet_id) return;\r\n cameraControls(this);\r\n });\r\n this.cameraReady.catch(error => this.fire('error', { error }));\r\n }\r\n});\r\n\r\nconst markerMethods = Object.defineProperties({}, Object.getOwnPropertyDescriptors(L.Marker.prototype));\r\nL.Marker.mergeOptions({ rotation: 0, rotateWithView: false, keepUpright: false, scale: 1 });\r\nL.Marker.include({\r\n setIcon(icon) {\r\n if (!(icon instanceof L.DivIcon)) icon.options.crossOrigin ||= true;\r\n const result = markerMethods.setIcon.call(this, icon);\r\n if (this._map && !(icon instanceof L.DivIcon)) this._initNativeGPU(this._map);\r\n return result;\r\n },\r\n setRotation(rotation) {\r\n if (!Number.isFinite(rotation)) throw new TypeError('Marker rotation must be finite');\r\n this.options.rotation = rotation;\r\n this.update();\r\n this._nativeGPU?.refresh?.();\r\n return this;\r\n },\r\n _cameraIconPoint(x, y) {\r\n let rotation = this.options.rotation + (this.options.rotateWithView ? this._map.getBearing() * radians : 0);\r\n if (this.options.keepUpright && Math.cos(rotation) < 0) rotation += Math.PI;\r\n const scale = this.options.scale;\r\n return new L.Point((x * Math.cos(rotation) - y * Math.sin(rotation)) * scale,\r\n (x * Math.sin(rotation) + y * Math.cos(rotation)) * scale);\r\n },\r\n getEvents() {\r\n return { ...markerMethods.getEvents.call(this), rotate: this.update, pitch: this.update, move: this.update };\r\n },\r\n _setPos(point) {\r\n markerMethods._setPos.call(this, displayPoint(this._map, point));\r\n for (const [element, key] of [[this._icon, 'iconAnchor'], [this._shadow, 'shadowAnchor']]) {\r\n if (!element) continue;\r\n const direction = this._cameraIconPoint(1, 0), options = this.options.icon.options;\r\n const anchor = options[key] || options.iconAnchor;\r\n element.style.transformOrigin = anchor ? `${anchor.x ?? anchor[0]}px ${anchor.y ?? anchor[1]}px` : 'center';\r\n element.style.transform += ` rotate(${Math.atan2(direction.y, direction.x)}rad) scale(${this.options.scale})`;\r\n }\r\n },\r\n _updateZIndex(offset) {\r\n markerMethods._updateZIndex.call(this, offset);\r\n const changed = this._cameraZIndexOffset !== offset;\r\n this._cameraZIndexOffset = offset;\r\n if (changed) this._nativeGPU?.refresh?.();\r\n },\r\n _initInteraction() {\r\n const result = markerMethods._initInteraction.call(this);\r\n cameraMarkerDrag.call(this);\r\n return result;\r\n },\r\n});\r\n\r\n// Keep Leaflet's focusable marker and its drag events; only translate its screen position back to ground.\r\nfunction cameraMarkerDrag() {\r\n if (!this.dragging || this.dragging._cameraDrag) return;\r\n const drag = this.dragging, original = drag._onDrag, adjustPan = drag._adjustPan;\r\n drag._onDrag = function (event) {\r\n const map = this._marker._map;\r\n const screen = L.DomUtil.getPosition(this._marker._icon).add(map._getMapPanePos());\r\n const point = map.containerPointToLayerPoint(screen);\r\n const icon = this._marker._icon;\r\n L.DomUtil.setPosition(icon, point);\r\n original.call(this, event);\r\n this._marker._setPos(point);\r\n };\r\n drag._adjustPan = function (event) {\r\n const marker = this._marker, map = marker._map;\r\n if (!map.getPitch() && !map.getBearing()) return adjustPan.call(this, event);\r\n const screen = L.DomUtil.getPosition(marker._icon).add(map._getMapPanePos());\r\n const size = map.getSize(), padding = pointOf(marker.options.autoPanPadding);\r\n const speed = marker.options.autoPanSpeed;\r\n const movement = new L.Point(\r\n (Math.max(0, screen.x - size.x + padding.x) - Math.max(0, padding.x - screen.x)) / Math.max(1, padding.x) * speed,\r\n (Math.max(0, screen.y - size.y + padding.y) - Math.max(0, padding.y - screen.y)) / Math.max(1, padding.y) * speed);\r\n if (!movement.x && !movement.y) return;\r\n const pane = map._getMapPanePos();\r\n map.panBy(movement, { animate: false });\r\n const shift = pane.subtract(map._getMapPanePos());\r\n this._draggable._newPos._add(shift);\r\n this._draggable._startPos._add(shift);\r\n L.DomUtil.setPosition(marker._icon, this._draggable._newPos);\r\n this._onDrag(event);\r\n this._panRequest = requestAnimationFrame(() => this._adjustPan(event));\r\n };\r\n // The handler may already be enabled and listening with its original method.\r\n const enabled = drag.enabled();\r\n if (enabled) {\r\n drag._draggable.off('drag', original, drag);\r\n drag._draggable.on('drag', drag._onDrag, drag);\r\n }\r\n drag._cameraDrag = true;\r\n}\r\n\r\nfor (const Class of [L.Popup, L.Tooltip]) {\r\n const events = Class.prototype.getEvents;\r\n Class.include({\r\n getEvents() {\r\n return { ...events.call(this), rotate: this._updatePosition, pitch: this._updatePosition, move: this._updatePosition };\r\n },\r\n });\r\n}\r\nconst popupPosition = L.Popup.prototype._updatePosition;\r\nconst popupPan = L.Popup.prototype._adjustPan;\r\nL.Popup.include({\r\n _adjustPan() {\r\n const map = this._map;\r\n if (!map.getPitch() && !map.getBearing()) return popupPan.call(this);\r\n if (!this.options.autoPan) return;\r\n if (map._panAnim) map._panAnim.stop();\r\n if (this._autopanning) { this._autopanning = false; return; }\r\n const rect = this._container.getBoundingClientRect(), container = map.getContainer().getBoundingClientRect();\r\n const min = pointOf(this.options.autoPanPaddingTopLeft || this.options.autoPanPadding);\r\n const max = map.getSize().subtract(pointOf(this.options.autoPanPaddingBottomRight || this.options.autoPanPadding));\r\n const left = rect.left - container.left, top = rect.top - container.top;\r\n const right = rect.right - container.left, bottom = rect.bottom - container.top;\r\n const dx = Math.min(0, left - min.x) || Math.max(0, right - max.x);\r\n const dy = Math.min(0, top - min.y) || Math.max(0, bottom - max.y);\r\n if (!dx && !dy) return;\r\n if (this.options.keepInView) this._autopanning = true;\r\n const screen = map.latLngToContainerPoint(this._latlng).subtract(new L.Point(dx, dy));\r\n const delta = map.latLngToLayerPoint(this._latlng).subtract(map.containerPointToLayerPoint(screen));\r\n map.fire('autopanstart');\r\n map.panTo(map.unproject(map.project(map.getCenter()).add(delta)));\r\n },\r\n _updatePosition() {\r\n popupPosition.call(this);\r\n if (!this._map) return;\r\n const point = this._map.latLngToLayerPoint(this._latlng), delta = displayPoint(this._map, point).subtract(point);\r\n if (this._zoomAnimated) {\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\r\n } else {\r\n this._container.style.left = `${this._containerLeft + delta.x}px`;\r\n this._container.style.bottom = `${this._containerBottom - delta.y}px`;\r\n }\r\n },\r\n});\r\nconst tooltipPosition = L.Tooltip.prototype._setPosition;\r\nL.Tooltip.include({\r\n _setPosition(point) {\r\n tooltipPosition.call(this, point);\r\n const delta = displayPoint(this._map, point).subtract(point);\r\n L.DomUtil.setPosition(this._container, L.DomUtil.getPosition(this._container).add(delta));\r\n },\r\n});\r\n\r\nconst tiledBounds = L.GridLayer.prototype._getTiledPixelBounds;\r\nconst gridEvents = L.GridLayer.prototype.getEvents;\r\nL.GridLayer.include({\r\n getEvents() {\r\n const events = gridEvents.call(this);\r\n this._cameraGridUpdate ||= L.Util.throttle(this._onMoveEnd, this.options.updateInterval, this);\r\n return { ...events, rotate: this._cameraGridUpdate, pitch: this._cameraGridUpdate };\r\n },\r\n _getTiledPixelBounds(center) {\r\n if (!this._map.getBearing() && !this._map.getPitch()) return tiledBounds.call(this, center);\r\n const bounds = this._map.getBounds();\r\n return new L.Bounds(this._map.project(bounds.getNorthWest(), this._tileZoom),\r\n this._map.project(bounds.getSouthEast(), this._tileZoom));\r\n },\r\n});\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["mapMethods", "radians", "pointOf", "point", "angles", "map", "bearing", "pitch", "project", "inverse", "limit", "half", "distance", "cos", "sin", "tilt", "rise", "p", "far", "denominator", "v", "u", "scale", "displayPoint", "animationPoint", "view", "shift", "groundBounds", "padding", "min", "max", "fitCameraBounds", "bounds", "options", "zoom", "vertical", "y", "top", "bottom", "origin", "points", "latlng", "low", "high", "leftSlope", "rightSlope", "slope", "left", "right", "target", "snap", "actual", "vMin", "vMax", "centerY", "centerX", "center", "updateSky", "height", "previousPitch", "previousBearing", "duration", "start", "fromPitch", "fromBearing", "delta", "frame", "now", "progress", "eased", "layer", "offset", "ground", "screen", "anchor", "next", "safe", "footprint", "limited", "inside", "size", "raw", "style", "selector", "draggable", "pan", "cameraControls", "error", "markerMethods", "icon", "result", "rotation", "x", "element", "key", "direction", "changed", "cameraMarkerDrag", "drag", "original", "adjustPan", "event", "marker", "speed", "movement", "pane", "Class", "events", "popupPosition", "popupPan", "rect", "container", "dx", "dy", "tooltipPosition", "tiledBounds", "gridEvents"]
|
|
7
|
-
}
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
function T(e={},t=!1,m=""){const a=!!e.baseTexture,l=!!e.metalTexture,c=!!e.emissiveTexture,u=!!e.occlusionTexture,o=!!e.roofTexture,s=!!e.terrain,i=a||l||c||u||e.nightLight,x=`
|
|
2
|
-
struct Mesh {
|
|
3
|
-
worldMatrix: mat4x4<f32>,
|
|
4
|
-
baseColor: vec4<f32>,
|
|
5
|
-
material: vec4<f32>,
|
|
6
|
-
emissive: vec4<f32>,
|
|
7
|
-
terrain: vec4<f32>,
|
|
8
|
-
highlight: vec4<f32>,
|
|
9
|
-
};
|
|
10
|
-
struct Frame {
|
|
11
|
-
viewMatrix: mat4x4<f32>,
|
|
12
|
-
projectionMatrix: mat4x4<f32>,
|
|
13
|
-
roofMatrix: mat4x4<f32>,
|
|
14
|
-
lightDirection: vec4<f32>,
|
|
15
|
-
skyDirection: vec4<f32>,
|
|
16
|
-
atmosphereTint: vec4<f32>,
|
|
17
|
-
};
|
|
18
|
-
@group(0) @binding(0) var<uniform> u: Mesh;
|
|
19
|
-
@group(0) @binding(1) var<uniform> frame: Frame;
|
|
20
|
-
struct Solar { matrix: mat4x4<f32>, params: vec4<f32> };
|
|
21
|
-
@group(1) @binding(0) var<uniform> solar: Solar;
|
|
22
|
-
${s?`@group(0) @binding(2) var dem: texture_2d<f32>;${m}`:""}
|
|
23
|
-
struct VertexInput {
|
|
24
|
-
@location(0) position: vec3<f32>,
|
|
25
|
-
@location(1) normal: vec3<f32>,
|
|
26
|
-
${e.vertexColors?"@location(2) color: vec3<f32>,":""}
|
|
27
|
-
${i?"@location(3) uv: vec2<f32>,":""}
|
|
28
|
-
};
|
|
29
|
-
struct VertexOutput {
|
|
30
|
-
@builtin(position) position: vec4<f32>,
|
|
31
|
-
@location(0) color: vec3<f32>,
|
|
32
|
-
@location(1) normal: vec3<f32>,
|
|
33
|
-
@location(2) viewPosition: vec3<f32>,
|
|
34
|
-
@location(6) shadowPosition: vec4<f32>,
|
|
35
|
-
@location(7) worldPosition: vec3<f32>,
|
|
36
|
-
${t?"@location(8) localPosition: vec3<f32>,":""}
|
|
37
|
-
${i?"@location(3) uv: vec2<f32>,":""}
|
|
38
|
-
${o?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}
|
|
39
|
-
};
|
|
40
|
-
@vertex fn vertexMain(input: VertexInput, @builtin(vertex_index) vertexIndex: u32) -> VertexOutput {
|
|
41
|
-
var output: VertexOutput;
|
|
42
|
-
var position = input.position;
|
|
43
|
-
${s?"position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;":""}
|
|
44
|
-
let highlighted = f32(vertexIndex) >= u.highlight.x && f32(vertexIndex) < u.highlight.y;
|
|
45
|
-
output.color = ${e.vertexColors?"select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)":"u.baseColor.rgb"};
|
|
46
|
-
// Inverse-transpose from cofactors; the camera view matrix is orthonormal.
|
|
47
|
-
let m = mat3x3<f32>(u.worldMatrix[0].xyz, u.worldMatrix[1].xyz, u.worldMatrix[2].xyz);
|
|
48
|
-
let normal = (cross(m[1], m[2]) * input.normal.x + cross(m[2], m[0]) * input.normal.y +
|
|
49
|
-
cross(m[0], m[1]) * input.normal.z) / determinant(m);
|
|
50
|
-
output.normal = (frame.viewMatrix * vec4<f32>(normal, 0.0)).xyz;
|
|
51
|
-
let world = u.worldMatrix * vec4<f32>(position, 1.0);
|
|
52
|
-
output.shadowPosition = solar.matrix * world;
|
|
53
|
-
output.worldPosition = world.xyz / world.w;
|
|
54
|
-
${t?"output.localPosition = input.position;":""}
|
|
55
|
-
let viewPosition = frame.viewMatrix * world;
|
|
56
|
-
output.viewPosition = viewPosition.xyz;
|
|
57
|
-
${i?"output.uv = input.uv;":""}
|
|
58
|
-
${o?`
|
|
59
|
-
output.roofUv = (frame.roofMatrix * world).xz;
|
|
60
|
-
output.roof = select(0.0, 1.0, input.normal.y >= 0.5 && !highlighted);
|
|
61
|
-
`:""}
|
|
62
|
-
output.position = frame.projectionMatrix * viewPosition;
|
|
63
|
-
return output;
|
|
64
|
-
}
|
|
65
|
-
`,v=[];let n=3;const r=(f,$)=>{if(!$)return"";v.push({name:f,texture:n,sampler:n+1});const p=n;return n+=2,`@group(0) @binding(${p}) var ${f}: texture_2d<f32>;
|
|
66
|
-
@group(0) @binding(${p+1}) var ${f}Sampler: sampler;`},g=r("baseTexture",a),d=r("metalTexture",l),h=r("emissiveTexture",c),w=r("occlusionTexture",u),b=r("roofTexture",o),y=`
|
|
67
|
-
struct Mesh {
|
|
68
|
-
worldMatrix: mat4x4<f32>,
|
|
69
|
-
baseColor: vec4<f32>,
|
|
70
|
-
material: vec4<f32>,
|
|
71
|
-
emissive: vec4<f32>,
|
|
72
|
-
terrain: vec4<f32>,
|
|
73
|
-
highlight: vec4<f32>,
|
|
74
|
-
};
|
|
75
|
-
struct Frame {
|
|
76
|
-
viewMatrix: mat4x4<f32>,
|
|
77
|
-
projectionMatrix: mat4x4<f32>,
|
|
78
|
-
roofMatrix: mat4x4<f32>,
|
|
79
|
-
lightDirection: vec4<f32>,
|
|
80
|
-
skyDirection: vec4<f32>,
|
|
81
|
-
atmosphereTint: vec4<f32>,
|
|
82
|
-
};
|
|
83
|
-
struct Solar {
|
|
84
|
-
matrix: mat4x4<f32>,
|
|
85
|
-
params: vec4<f32>,
|
|
86
|
-
};
|
|
87
|
-
@group(0) @binding(0) var<uniform> u: Mesh;
|
|
88
|
-
@group(0) @binding(1) var<uniform> frame: Frame;
|
|
89
|
-
@group(1) @binding(0) var<uniform> solar: Solar;
|
|
90
|
-
@group(1) @binding(1) var shadowTexture: texture_depth_2d;
|
|
91
|
-
@group(1) @binding(2) var shadowSampler: sampler_comparison;
|
|
92
|
-
@group(1) @binding(3) var<storage, read> lightGrid: array<vec4<f32>>;
|
|
93
|
-
${g}${d}${h}${w}${b}
|
|
94
|
-
struct FragmentInput {
|
|
95
|
-
@builtin(position) position: vec4<f32>,
|
|
96
|
-
@location(0) color: vec3<f32>,
|
|
97
|
-
@location(1) normal: vec3<f32>,
|
|
98
|
-
@location(2) viewPosition: vec3<f32>,
|
|
99
|
-
@location(6) shadowPosition: vec4<f32>,
|
|
100
|
-
@location(7) worldPosition: vec3<f32>,
|
|
101
|
-
${t?"@location(8) localPosition: vec3<f32>,":""}
|
|
102
|
-
${i?"@location(3) uv: vec2<f32>,":""}
|
|
103
|
-
${o?"@location(4) roofUv: vec2<f32>, @location(5) roof: f32,":""}
|
|
104
|
-
};
|
|
105
|
-
const PI: f32 = 3.14159265;
|
|
106
|
-
fn toLinear(c: vec3<f32>) -> vec3<f32> {
|
|
107
|
-
return select(c / 12.92, pow((c + vec3<f32>(0.055)) / 1.055, vec3<f32>(2.4)), c >= vec3<f32>(0.04045));
|
|
108
|
-
}
|
|
109
|
-
fn toSRGB(c: vec3<f32>) -> vec3<f32> {
|
|
110
|
-
return select(c * 12.92, 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - vec3<f32>(0.055), c >= vec3<f32>(0.0031308));
|
|
111
|
-
}
|
|
112
|
-
fn sunVisibility(position: vec4<f32>) -> f32 {
|
|
113
|
-
let p = position.xyz / position.w;
|
|
114
|
-
let uv = vec2<f32>(p.x * 0.5 + 0.5, 0.5 - p.y * 0.5);
|
|
115
|
-
if (solar.params.x < 0.5 || any(uv < vec2<f32>(0.0)) || any(uv > vec2<f32>(1.0)) || p.z < 0.0 || p.z > 1.0) {
|
|
116
|
-
return 1.0;
|
|
117
|
-
}
|
|
118
|
-
return textureSampleCompareLevel(shadowTexture, shadowSampler, uv, p.z - 0.0003);
|
|
119
|
-
}
|
|
120
|
-
fn localLighting(position: vec3<f32>, normal: vec3<f32>) -> vec3<f32> {
|
|
121
|
-
if (frame.skyDirection.w <= 0.0 || lightGrid[0].w < 1.0) { return vec3<f32>(0.0); }
|
|
122
|
-
let cell = vec2<i32>(floor((position.xz - lightGrid[0].xy) / lightGrid[0].z));
|
|
123
|
-
if (any(cell < vec2<i32>(0)) || cell.x >= i32(lightGrid[0].w) || cell.y >= i32(lightGrid[1].x)) {
|
|
124
|
-
return vec3<f32>(0.0);
|
|
125
|
-
}
|
|
126
|
-
let header = lightGrid[2u + u32(cell.y) * u32(lightGrid[0].w) + u32(cell.x)];
|
|
127
|
-
var light = vec3<f32>(0.0);
|
|
128
|
-
for (var i = 0u; i < u32(header.y); i++) {
|
|
129
|
-
let source = lightGrid[u32(header.x) + i * 2u];
|
|
130
|
-
let colour = lightGrid[u32(header.x) + i * 2u + 1u];
|
|
131
|
-
let delta = source.xyz - position;
|
|
132
|
-
let distance2 = max(dot(delta, delta), 1.0);
|
|
133
|
-
let falloff = max(0.0, 1.0 - distance2 / (source.w * source.w));
|
|
134
|
-
let lambert = max(0.0, dot(normal, delta / sqrt(distance2)));
|
|
135
|
-
light += toLinear(colour.rgb) * colour.w * lambert * falloff * falloff / distance2;
|
|
136
|
-
}
|
|
137
|
-
return light * frame.skyDirection.w;
|
|
138
|
-
}
|
|
139
|
-
fn appearance(position: vec2<f32>) {
|
|
140
|
-
// Screen-door dissolve keeps opaque depth writes and avoids sorting whole buildings as glass.
|
|
141
|
-
let noise = fract(52.9829189 * fract(dot(floor(position), vec2<f32>(0.06711056, 0.00583715))));
|
|
142
|
-
if (u.highlight.w < 1.0 && noise >= u.highlight.w) { discard; }
|
|
143
|
-
}
|
|
144
|
-
@fragment fn fragmentMain(input: FragmentInput, @builtin(front_facing) frontFacing: bool) -> @location(0) vec4<f32> {
|
|
145
|
-
${e.nightLight?`
|
|
146
|
-
if (input.uv.x <= 2.0) {
|
|
147
|
-
let radial = max(0.0, 1.0 - dot(input.uv, input.uv));
|
|
148
|
-
let alpha = radial * radial * frame.skyDirection.w * 0.65;
|
|
149
|
-
if (alpha < 0.005) { discard; }
|
|
150
|
-
appearance(input.position.xy);
|
|
151
|
-
return vec4<f32>(input.color, alpha);
|
|
152
|
-
}
|
|
153
|
-
`:""}
|
|
154
|
-
let sunlight = sunVisibility(input.shadowPosition);
|
|
155
|
-
let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz, frame.viewMatrix[1].xyz, frame.viewMatrix[2].xyz)) * normalize(input.normal)) * select(-1.0, 1.0, frontFacing);
|
|
156
|
-
let artificial = localLighting(input.worldPosition, worldNormal);
|
|
157
|
-
${e.unlit?`
|
|
158
|
-
let rasterTexel = ${a?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(input.color, 1.0)"};
|
|
159
|
-
return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb) * (frame.atmosphereTint.rgb * (0.55 + 0.45 * sunlight) + artificial)), ${e.alphaMode==="BLEND"?"u.material.z * rasterTexel.a":"1.0"});
|
|
160
|
-
`:`
|
|
161
|
-
var normal = normalize(input.normal) * select(-1.0, 1.0, frontFacing);
|
|
162
|
-
let texel = ${a?"textureSample(baseTexture, baseTextureSampler, input.uv)":"vec4<f32>(1.0)"};
|
|
163
|
-
let alpha = u.material.z * texel.a;
|
|
164
|
-
${e.alphaMode==="MASK"?"if (alpha < u.material.w) { discard; }":""}
|
|
165
|
-
${e.alphaMode==="BLEND"?"if (alpha < 0.01) { discard; }":""}
|
|
166
|
-
var base = ${e.vertexColors?"toLinear(min(input.color, vec3<f32>(1.0)))":"input.color"} *
|
|
167
|
-
${e.baseTexture?.srgb?"texel.rgb":"toLinear(texel.rgb)"};
|
|
168
|
-
${o?`
|
|
169
|
-
if (input.roof > 0.5 && all(input.roofUv >= vec2<f32>(0.0)) &&
|
|
170
|
-
all(input.roofUv <= vec2<f32>(1.0))) {
|
|
171
|
-
let roof = textureSampleLevel(roofTexture, roofTextureSampler, input.roofUv, 0.0);
|
|
172
|
-
base = mix(base, toLinear(roof.rgb), roof.a);
|
|
173
|
-
}
|
|
174
|
-
`:""}
|
|
175
|
-
let mr = ${l?"textureSample(metalTexture, metalTextureSampler, input.uv)":"vec4<f32>(1.0)"};
|
|
176
|
-
let metal = clamp(u.material.x * mr.b, 0.0, 1.0);
|
|
177
|
-
let rough = clamp(u.material.y * mr.g, 0.08, 1.0);
|
|
178
|
-
let view = normalize(-input.viewPosition);
|
|
179
|
-
let halfVector = normalize(view + frame.lightDirection.xyz);
|
|
180
|
-
let nl = max(dot(normal, frame.lightDirection.xyz), 0.0) * frame.lightDirection.w * sunlight;
|
|
181
|
-
let nv = max(dot(normal, view), 0.001);
|
|
182
|
-
let nh = max(dot(normal, halfVector), 0.0);
|
|
183
|
-
let vh = max(dot(view, halfVector), 0.0);
|
|
184
|
-
let a2 = pow(rough, 4.0);
|
|
185
|
-
let d = a2 / max(PI * pow(nh * nh * (a2 - 1.0) + 1.0, 2.0), 0.0001);
|
|
186
|
-
let gv = nl * sqrt(nv * nv * (1.0 - a2) + a2);
|
|
187
|
-
let gl = nv * sqrt(nl * nl * (1.0 - a2) + a2);
|
|
188
|
-
let visibility = 0.5 / max(gv + gl, 0.0001);
|
|
189
|
-
let f0 = mix(vec3<f32>(0.04), base, metal);
|
|
190
|
-
let fresnel = f0 + (1.0 - f0) * pow(1.0 - vh, 5.0);
|
|
191
|
-
let specular = d * visibility * fresnel;
|
|
192
|
-
let diffuse = (1.0 - metal) * base / PI;
|
|
193
|
-
let sky = dot(normal, frame.skyDirection.xyz) * 0.5 + 0.5;
|
|
194
|
-
let ambient = mix(toLinear(vec3<f32>(0.455, 0.412, 0.322)), vec3<f32>(1.0), sky) * (2.0 / PI);
|
|
195
|
-
let ao = ${u?"mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)":"1.0"};
|
|
196
|
-
${t?`
|
|
197
|
-
let lattice = (fract(input.localPosition / 2.5) - 0.5) * 2.5;
|
|
198
|
-
let pointGlow = (1.0 - smoothstep(0.16, 0.42, length(lattice))) * u.highlight.z;
|
|
199
|
-
`:""}
|
|
200
|
-
// Vertex colour components above 1 are self-lit (e.g. vehicle lamps): dim by day, bright at night.
|
|
201
|
-
let glow = ${t?"vec3<f32>(3.0, 2.6, 1.8) * pointGlow +":""}${e.vertexColors?" max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +":""} u.emissive.rgb * ${c?e.emissiveTexture.srgb?"textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb":"toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)":"vec3<f32>(1.0)"};
|
|
202
|
-
var color = ambient * base * (1.0 - metal) * ao +
|
|
203
|
-
(diffuse + specular) * nl * toLinear(vec3<f32>(1.0, 0.937, 0.835)) * 3.0 + glow;
|
|
204
|
-
${e.vertexColors?"color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;":""}
|
|
205
|
-
color = (color - glow) * frame.atmosphereTint.rgb + base * artificial * (1.0 - metal * 0.5) + glow;
|
|
206
|
-
appearance(input.position.xy);
|
|
207
|
-
return vec4<f32>(toSRGB(color), ${e.alphaMode==="BLEND"?"alpha":"1.0"});
|
|
208
|
-
`}
|
|
209
|
-
}
|
|
210
|
-
`;return{vertex:x,fragment:y,bindings:v,textured:i,hasTerrain:s}}export{T as materialShaders};
|
|
211
|
-
//# sourceMappingURL=materialShaders.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/materialShaders.js"],
|
|
4
|
-
"sourcesContent": ["/** Material WGSL and texture bindings, without a GPU device or Leaflet layer. */\nexport function materialShaders(material = {}, sparkle = false, elevationWGSL = '') {\n const hasBase = Boolean(material.baseTexture);\n const hasMetal = Boolean(material.metalTexture);\n const hasEmissive = Boolean(material.emissiveTexture);\n const hasOcclusion = Boolean(material.occlusionTexture);\n const hasRoof = Boolean(material.roofTexture);\n const hasTerrain = Boolean(material.terrain);\n const textured = hasBase || hasMetal || hasEmissive || hasOcclusion || material.nightLight;\n const vertex = `\n struct Mesh {\n worldMatrix: mat4x4<f32>,\n baseColor: vec4<f32>,\n material: vec4<f32>,\n emissive: vec4<f32>,\n terrain: vec4<f32>,\n highlight: vec4<f32>,\n };\n struct Frame {\n viewMatrix: mat4x4<f32>,\n projectionMatrix: mat4x4<f32>,\n roofMatrix: mat4x4<f32>,\n lightDirection: vec4<f32>,\n skyDirection: vec4<f32>,\n atmosphereTint: vec4<f32>,\n };\n @group(0) @binding(0) var<uniform> u: Mesh;\n @group(0) @binding(1) var<uniform> frame: Frame;\n struct Solar { matrix: mat4x4<f32>, params: vec4<f32> };\n @group(1) @binding(0) var<uniform> solar: Solar;\n ${hasTerrain ? `@group(0) @binding(2) var dem: texture_2d<f32>;${elevationWGSL}` : ''}\n struct VertexInput {\n @location(0) position: vec3<f32>,\n @location(1) normal: vec3<f32>,\n ${material.vertexColors ? '@location(2) color: vec3<f32>,' : ''}\n ${textured ? '@location(3) uv: vec2<f32>,' : ''}\n };\n struct VertexOutput {\n @builtin(position) position: vec4<f32>,\n @location(0) color: vec3<f32>,\n @location(1) normal: vec3<f32>,\n @location(2) viewPosition: vec3<f32>,\n @location(6) shadowPosition: vec4<f32>,\n @location(7) worldPosition: vec3<f32>,\n ${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''}\n ${textured ? '@location(3) uv: vec2<f32>,' : ''}\n ${hasRoof ? '@location(4) roofUv: vec2<f32>, @location(5) roof: f32,' : ''}\n };\n @vertex fn vertexMain(input: VertexInput, @builtin(vertex_index) vertexIndex: u32) -> VertexOutput {\n var output: VertexOutput;\n var position = input.position;\n ${hasTerrain ? 'position.y = elevation(u.terrain.xy + input.uv * u.terrain.z, u.terrain.w) - u.terrain.w;' : ''}\n let highlighted = f32(vertexIndex) >= u.highlight.x && f32(vertexIndex) < u.highlight.y;\n output.color = ${material.vertexColors\n ? 'select(input.color, vec3<f32>(72.0 / 255.0, 217.0 / 255.0, 1.0), highlighted)'\n : 'u.baseColor.rgb'};\n // Inverse-transpose from cofactors; the camera view matrix is orthonormal.\n let m = mat3x3<f32>(u.worldMatrix[0].xyz, u.worldMatrix[1].xyz, u.worldMatrix[2].xyz);\n let normal = (cross(m[1], m[2]) * input.normal.x + cross(m[2], m[0]) * input.normal.y +\n cross(m[0], m[1]) * input.normal.z) / determinant(m);\n output.normal = (frame.viewMatrix * vec4<f32>(normal, 0.0)).xyz;\n let world = u.worldMatrix * vec4<f32>(position, 1.0);\n output.shadowPosition = solar.matrix * world;\n output.worldPosition = world.xyz / world.w;\n ${sparkle ? 'output.localPosition = input.position;' : ''}\n let viewPosition = frame.viewMatrix * world;\n output.viewPosition = viewPosition.xyz;\n ${textured ? 'output.uv = input.uv;' : ''}\n ${hasRoof ? `\n output.roofUv = (frame.roofMatrix * world).xz;\n output.roof = select(0.0, 1.0, input.normal.y >= 0.5 && !highlighted);\n ` : ''}\n output.position = frame.projectionMatrix * viewPosition;\n return output;\n }\n `;\n const bindings = [];\n let binding = 3;\n const textureBinding = (name, enabled) => {\n if (!enabled) return '';\n bindings.push({ name, texture: binding, sampler: binding + 1 });\n const current = binding;\n binding += 2;\n return `@group(0) @binding(${current}) var ${name}: texture_2d<f32>;\n @group(0) @binding(${current + 1}) var ${name}Sampler: sampler;`;\n };\n const baseBinding = textureBinding('baseTexture', hasBase);\n const metalBinding = textureBinding('metalTexture', hasMetal);\n const emissiveBinding = textureBinding('emissiveTexture', hasEmissive);\n const occlusionBinding = textureBinding('occlusionTexture', hasOcclusion);\n const roofBinding = textureBinding('roofTexture', hasRoof);\n const fragment = `\n struct Mesh {\n worldMatrix: mat4x4<f32>,\n baseColor: vec4<f32>,\n material: vec4<f32>,\n emissive: vec4<f32>,\n terrain: vec4<f32>,\n highlight: vec4<f32>,\n };\n struct Frame {\n viewMatrix: mat4x4<f32>,\n projectionMatrix: mat4x4<f32>,\n roofMatrix: mat4x4<f32>,\n lightDirection: vec4<f32>,\n skyDirection: vec4<f32>,\n atmosphereTint: vec4<f32>,\n };\n struct Solar {\n matrix: mat4x4<f32>,\n params: vec4<f32>,\n };\n @group(0) @binding(0) var<uniform> u: Mesh;\n @group(0) @binding(1) var<uniform> frame: Frame;\n @group(1) @binding(0) var<uniform> solar: Solar;\n @group(1) @binding(1) var shadowTexture: texture_depth_2d;\n @group(1) @binding(2) var shadowSampler: sampler_comparison;\n @group(1) @binding(3) var<storage, read> lightGrid: array<vec4<f32>>;\n ${baseBinding}${metalBinding}${emissiveBinding}${occlusionBinding}${roofBinding}\n struct FragmentInput {\n @builtin(position) position: vec4<f32>,\n @location(0) color: vec3<f32>,\n @location(1) normal: vec3<f32>,\n @location(2) viewPosition: vec3<f32>,\n @location(6) shadowPosition: vec4<f32>,\n @location(7) worldPosition: vec3<f32>,\n ${sparkle ? '@location(8) localPosition: vec3<f32>,' : ''}\n ${textured ? '@location(3) uv: vec2<f32>,' : ''}\n ${hasRoof ? '@location(4) roofUv: vec2<f32>, @location(5) roof: f32,' : ''}\n };\n const PI: f32 = 3.14159265;\n fn toLinear(c: vec3<f32>) -> vec3<f32> {\n return select(c / 12.92, pow((c + vec3<f32>(0.055)) / 1.055, vec3<f32>(2.4)), c >= vec3<f32>(0.04045));\n }\n fn toSRGB(c: vec3<f32>) -> vec3<f32> {\n return select(c * 12.92, 1.055 * pow(max(c, vec3<f32>(0.0)), vec3<f32>(1.0 / 2.4)) - vec3<f32>(0.055), c >= vec3<f32>(0.0031308));\n }\n fn sunVisibility(position: vec4<f32>) -> f32 {\n let p = position.xyz / position.w;\n let uv = vec2<f32>(p.x * 0.5 + 0.5, 0.5 - p.y * 0.5);\n if (solar.params.x < 0.5 || any(uv < vec2<f32>(0.0)) || any(uv > vec2<f32>(1.0)) || p.z < 0.0 || p.z > 1.0) {\n return 1.0;\n }\n return textureSampleCompareLevel(shadowTexture, shadowSampler, uv, p.z - 0.0003);\n }\n fn localLighting(position: vec3<f32>, normal: vec3<f32>) -> vec3<f32> {\n if (frame.skyDirection.w <= 0.0 || lightGrid[0].w < 1.0) { return vec3<f32>(0.0); }\n let cell = vec2<i32>(floor((position.xz - lightGrid[0].xy) / lightGrid[0].z));\n if (any(cell < vec2<i32>(0)) || cell.x >= i32(lightGrid[0].w) || cell.y >= i32(lightGrid[1].x)) {\n return vec3<f32>(0.0);\n }\n let header = lightGrid[2u + u32(cell.y) * u32(lightGrid[0].w) + u32(cell.x)];\n var light = vec3<f32>(0.0);\n for (var i = 0u; i < u32(header.y); i++) {\n let source = lightGrid[u32(header.x) + i * 2u];\n let colour = lightGrid[u32(header.x) + i * 2u + 1u];\n let delta = source.xyz - position;\n let distance2 = max(dot(delta, delta), 1.0);\n let falloff = max(0.0, 1.0 - distance2 / (source.w * source.w));\n let lambert = max(0.0, dot(normal, delta / sqrt(distance2)));\n light += toLinear(colour.rgb) * colour.w * lambert * falloff * falloff / distance2;\n }\n return light * frame.skyDirection.w;\n }\n fn appearance(position: vec2<f32>) {\n // Screen-door dissolve keeps opaque depth writes and avoids sorting whole buildings as glass.\n let noise = fract(52.9829189 * fract(dot(floor(position), vec2<f32>(0.06711056, 0.00583715))));\n if (u.highlight.w < 1.0 && noise >= u.highlight.w) { discard; }\n }\n @fragment fn fragmentMain(input: FragmentInput, @builtin(front_facing) frontFacing: bool) -> @location(0) vec4<f32> {\n ${material.nightLight ? `\n if (input.uv.x <= 2.0) {\n let radial = max(0.0, 1.0 - dot(input.uv, input.uv));\n let alpha = radial * radial * frame.skyDirection.w * 0.65;\n if (alpha < 0.005) { discard; }\n appearance(input.position.xy);\n return vec4<f32>(input.color, alpha);\n }\n ` : ''}\n let sunlight = sunVisibility(input.shadowPosition);\n let worldNormal = normalize(transpose(mat3x3<f32>(frame.viewMatrix[0].xyz, frame.viewMatrix[1].xyz, frame.viewMatrix[2].xyz)) * normalize(input.normal)) * select(-1.0, 1.0, frontFacing);\n let artificial = localLighting(input.worldPosition, worldNormal);\n ${material.unlit ? `\n let rasterTexel = ${hasBase ? 'textureSample(baseTexture, baseTextureSampler, input.uv)' : 'vec4<f32>(input.color, 1.0)'};\n return vec4<f32>(toSRGB(toLinear(rasterTexel.rgb) * (frame.atmosphereTint.rgb * (0.55 + 0.45 * sunlight) + artificial)), ${material.alphaMode === 'BLEND' ? 'u.material.z * rasterTexel.a' : '1.0'});\n ` : `\n var normal = normalize(input.normal) * select(-1.0, 1.0, frontFacing);\n let texel = ${hasBase ? 'textureSample(baseTexture, baseTextureSampler, input.uv)' : 'vec4<f32>(1.0)'};\n let alpha = u.material.z * texel.a;\n ${material.alphaMode === 'MASK' ? 'if (alpha < u.material.w) { discard; }' : ''}\n ${material.alphaMode === 'BLEND' ? 'if (alpha < 0.01) { discard; }' : ''}\n var base = ${material.vertexColors ? 'toLinear(min(input.color, vec3<f32>(1.0)))' : 'input.color'} *\n ${material.baseTexture?.srgb ? 'texel.rgb' : 'toLinear(texel.rgb)'};\n ${hasRoof ? `\n if (input.roof > 0.5 && all(input.roofUv >= vec2<f32>(0.0)) &&\n all(input.roofUv <= vec2<f32>(1.0))) {\n let roof = textureSampleLevel(roofTexture, roofTextureSampler, input.roofUv, 0.0);\n base = mix(base, toLinear(roof.rgb), roof.a);\n }\n ` : ''}\n let mr = ${hasMetal ? 'textureSample(metalTexture, metalTextureSampler, input.uv)' : 'vec4<f32>(1.0)'};\n let metal = clamp(u.material.x * mr.b, 0.0, 1.0);\n let rough = clamp(u.material.y * mr.g, 0.08, 1.0);\n let view = normalize(-input.viewPosition);\n let halfVector = normalize(view + frame.lightDirection.xyz);\n let nl = max(dot(normal, frame.lightDirection.xyz), 0.0) * frame.lightDirection.w * sunlight;\n let nv = max(dot(normal, view), 0.001);\n let nh = max(dot(normal, halfVector), 0.0);\n let vh = max(dot(view, halfVector), 0.0);\n let a2 = pow(rough, 4.0);\n let d = a2 / max(PI * pow(nh * nh * (a2 - 1.0) + 1.0, 2.0), 0.0001);\n let gv = nl * sqrt(nv * nv * (1.0 - a2) + a2);\n let gl = nv * sqrt(nl * nl * (1.0 - a2) + a2);\n let visibility = 0.5 / max(gv + gl, 0.0001);\n let f0 = mix(vec3<f32>(0.04), base, metal);\n let fresnel = f0 + (1.0 - f0) * pow(1.0 - vh, 5.0);\n let specular = d * visibility * fresnel;\n let diffuse = (1.0 - metal) * base / PI;\n let sky = dot(normal, frame.skyDirection.xyz) * 0.5 + 0.5;\n let ambient = mix(toLinear(vec3<f32>(0.455, 0.412, 0.322)), vec3<f32>(1.0), sky) * (2.0 / PI);\n let ao = ${hasOcclusion ? 'mix(1.0, textureSample(occlusionTexture, occlusionTextureSampler, input.uv).r, u.emissive.w)' : '1.0'};\n ${sparkle ? `\n let lattice = (fract(input.localPosition / 2.5) - 0.5) * 2.5;\n let pointGlow = (1.0 - smoothstep(0.16, 0.42, length(lattice))) * u.highlight.z;\n ` : ''}\n // Vertex colour components above 1 are self-lit (e.g. vehicle lamps): dim by day, bright at night.\n let glow = ${sparkle ? 'vec3<f32>(3.0, 2.6, 1.8) * pointGlow +' : ''}${material.vertexColors\n ? ' max(input.color - vec3<f32>(1.0), vec3<f32>(0.0)) * (0.3 + 5.0 * frame.skyDirection.w) +' : ''} u.emissive.rgb * ${hasEmissive\n ? material.emissiveTexture.srgb\n ? 'textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb'\n : 'toLinear(textureSample(emissiveTexture, emissiveTextureSampler, input.uv).rgb)'\n : 'vec3<f32>(1.0)'};\n var color = ambient * base * (1.0 - metal) * ao +\n (diffuse + specular) * nl * toLinear(vec3<f32>(1.0, 0.937, 0.835)) * 3.0 + glow;\n ${material.vertexColors ? 'color = base * (ambient + toLinear(vec3<f32>(1.0, 0.937, 0.835)) * (3.0 / PI) * nl) + glow;' : ''}\n color = (color - glow) * frame.atmosphereTint.rgb + base * artificial * (1.0 - metal * 0.5) + glow;\n appearance(input.position.xy);\n return vec4<f32>(toSRGB(color), ${material.alphaMode === 'BLEND' ? 'alpha' : '1.0'});\n `}\n }\n `;\n return { vertex, fragment, bindings, textured, hasTerrain };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["materialShaders", "material", "sparkle", "elevationWGSL", "hasBase", "hasMetal", "hasEmissive", "hasOcclusion", "hasRoof", "hasTerrain", "textured", "vertex", "bindings", "binding", "textureBinding", "name", "enabled", "current", "baseBinding", "metalBinding", "emissiveBinding", "occlusionBinding", "roofBinding", "fragment"]
|
|
7
|
-
}
|
package/dist/utils/mirror.js
DELETED
package/dist/utils/mirror.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/mirror.js"],
|
|
4
|
-
"sourcesContent": ["import { box } from \"./box.js\";\n\nexport const mirror = (x0, x1, z0, z1, ...rest) => [\n [box(x0, x1, z0, z1), ...rest],\n [box(-x1, -x0, z0, z1), ...rest]\n];\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,OAAAA,MAAW,WAEb,MAAMC,EAAS,CAACC,EAAIC,EAAIC,EAAIC,KAAOC,IAAS,CACjD,CAACN,EAAIE,EAAIC,EAAIC,EAAIC,CAAE,EAAG,GAAGC,CAAI,EAC7B,CAACN,EAAI,CAACG,EAAI,CAACD,EAAIE,EAAIC,CAAE,EAAG,GAAGC,CAAI,CACjC",
|
|
6
|
-
"names": ["box", "mirror", "x0", "x1", "z0", "z1", "rest"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{solarPosition as u}from"./solarPosition.js";import{horizontalPosition as l}from"./horizontalPosition.js";function f(i,h,M){u(i,h,M);const t=Math.PI/180,n=new Date(i).getTime()/864e5-10957.5,c=(134.963+13.064993*n)*t,a=(218.316+13.176396*n+6.289*Math.sin(c))*t,o=5.128*Math.sin((93.272+13.22935*n)*t)*t,s=23.4397*t,r=Math.cos(o)*Math.cos(a),e=Math.cos(o)*Math.sin(a)*Math.cos(s)-Math.sin(o)*Math.sin(s),m=Math.cos(o)*Math.sin(a)*Math.sin(s)+Math.sin(o)*Math.cos(s);return l(n,h,M,Math.atan2(e,r),Math.asin(m))}export{f as moonPosition};
|
|
2
|
-
//# sourceMappingURL=moonPosition.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/moonPosition.js"],
|
|
4
|
-
"sourcesContent": ["import { solarPosition } from \"./solarPosition.js\";\nimport { horizontalPosition } from \"./horizontalPosition.js\";\n\n// Low-precision geocentric lunar orbit; no parallax or atmospheric refraction.\n\nexport function moonPosition(date, lat, lng) {\n solarPosition(date, lat, lng);\n const rad = Math.PI / 180, d = new Date(date).getTime() / 86400000 - 10957.5;\n const anomaly = (134.963 + 13.064993 * d) * rad;\n const longitude = (218.316 + 13.176396 * d + 6.289 * Math.sin(anomaly)) * rad;\n const latitude = 5.128 * Math.sin((93.272 + 13.229350 * d) * rad) * rad;\n const obliquity = 23.4397 * rad;\n const x = Math.cos(latitude) * Math.cos(longitude);\n const y = Math.cos(latitude) * Math.sin(longitude) * Math.cos(obliquity) - Math.sin(latitude) * Math.sin(obliquity);\n const z = Math.cos(latitude) * Math.sin(longitude) * Math.sin(obliquity) + Math.sin(latitude) * Math.cos(obliquity);\n return horizontalPosition(d, lat, lng, Math.atan2(y, x), Math.asin(z));\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,iBAAAA,MAAqB,qBAC9B,OAAS,sBAAAC,MAA0B,0BAI5B,SAASC,EAAaC,EAAMC,EAAKC,EAAK,CAC3CL,EAAcG,EAAMC,EAAKC,CAAG,EAC5B,MAAMC,EAAM,KAAK,GAAK,IAAKC,EAAI,IAAI,KAAKJ,CAAI,EAAE,QAAQ,EAAI,MAAW,QAC/DK,GAAW,QAAU,UAAYD,GAAKD,EACtCG,GAAa,QAAU,UAAYF,EAAI,MAAQ,KAAK,IAAIC,CAAO,GAAKF,EACpEI,EAAW,MAAQ,KAAK,KAAK,OAAS,SAAYH,GAAKD,CAAG,EAAIA,EAC9DK,EAAY,QAAUL,EACtBM,EAAI,KAAK,IAAIF,CAAQ,EAAI,KAAK,IAAID,CAAS,EAC3CI,EAAI,KAAK,IAAIH,CAAQ,EAAI,KAAK,IAAID,CAAS,EAAI,KAAK,IAAIE,CAAS,EAAI,KAAK,IAAID,CAAQ,EAAI,KAAK,IAAIC,CAAS,EAC5GG,EAAI,KAAK,IAAIJ,CAAQ,EAAI,KAAK,IAAID,CAAS,EAAI,KAAK,IAAIE,CAAS,EAAI,KAAK,IAAID,CAAQ,EAAI,KAAK,IAAIC,CAAS,EAClH,OAAOV,EAAmBM,EAAGH,EAAKC,EAAK,KAAK,MAAMQ,EAAGD,CAAC,EAAG,KAAK,KAAKE,CAAC,CAAC,CACvE",
|
|
6
|
-
"names": ["solarPosition", "horizontalPosition", "moonPosition", "date", "lat", "lng", "rad", "d", "anomaly", "longitude", "latitude", "obliquity", "x", "y", "z"]
|
|
7
|
-
}
|
package/dist/utils/moves.js
DELETED
package/dist/utils/moves.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/moves.js"],
|
|
4
|
-
"sourcesContent": ["// W/S (\u2191/\u2193) run forward/back along the heading, A/D (\u2190/\u2192) turn: [forward, turn].\nexport const moves = {\n KeyW: [1, 0],\n ArrowUp: [1, 0],\n KeyS: [-1, 0],\n ArrowDown: [-1, 0],\n KeyD: [0, 1],\n ArrowRight: [0, 1],\n KeyA: [0, -1],\n ArrowLeft: [0, -1]\n};\n"],
|
|
5
|
-
"mappings": "AACO,MAAMA,EAAQ,CACnB,KAAM,CAAC,EAAG,CAAC,EACX,QAAS,CAAC,EAAG,CAAC,EACd,KAAM,CAAC,GAAI,CAAC,EACZ,UAAW,CAAC,GAAI,CAAC,EACjB,KAAM,CAAC,EAAG,CAAC,EACX,WAAY,CAAC,EAAG,CAAC,EACjB,KAAM,CAAC,EAAG,EAAE,EACZ,UAAW,CAAC,EAAG,EAAE,CACnB",
|
|
6
|
-
"names": ["moves"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{raycast as k}from"./raycast.js";const h=new WeakMap;function b(a){const{map:e}=a;let o=h.get(e);if(!o){o={states:new Set,hovered:null};const u=L.version.startsWith("2"),d=u?"pointermove":"mousemove",c=u?"pointerout":"mouseout",E=u?"pointerover":"mouseover",p=Object.getOwnPropertyDescriptor(e,"_fireDOMEvent"),s=e._fireDOMEvent,f=function(n,r=n.type,v){const g=L.Layer._renderers.get(e);if(!g?.renderer||v||!["click","preclick","dblclick","contextmenu","mousedown","mouseup","mousemove","mouseover","mouseout","pointerdown","pointerup","pointermove","pointerover","pointerout"].includes(r))return s.call(this,n,r,v);const O=n.target,M=O instanceof Element&&O.closest(".leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control");if(M&&o.hovered&&(r===d||r===c)&&(s.call(e,n,c,[o.hovered]),o.hovered=null,e.getContainer().style.cursor=""),M||r===d&&(e.dragging?.moving()||e._animatingZoom))return s.call(this,n,r,v);const m=[];if(r!==c)for(const l of o.states){const{source:i}=l;i instanceof L.Marker||i.options.interactive===!1||!(i instanceof L.Path)&&!i.options.interactive||m.push(...l.meshes.values())}const _=m.length?k(g,n,m,!1):[];_.sort((l,i)=>i.object.renderOrder-l.object.renderOrder||l.distance-i.distance);let t=_[0]?.object._nativeSource||null;return(r==="click"||r==="preclick")&&t&&e._draggableMoved(t)&&(t=null),(r===d||r===c)&&o.hovered!==t&&(o.hovered&&s.call(e,n,c,[o.hovered]),o.hovered=t,t&&s.call(e,n,E,[t]),e.getContainer().style.cursor=t?"pointer":""),s.call(this,n,r,t?[t]:void 0)};o.handle=f,o.restore=()=>{e._fireDOMEvent===f&&(p?Object.defineProperty(e,"_fireDOMEvent",p):delete e._fireDOMEvent)},h.set(e,o),e._fireDOMEvent=f}return o.states.add(a),()=>{o.states.delete(a),o.hovered===a.source&&(o.hovered=null,e.getContainer().style.cursor=""),!o.states.size&&(o.restore(),h.delete(e))}}export{b as nativeEvents};
|
|
2
|
-
//# sourceMappingURL=nativeEvents.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/nativeEvents.js"],
|
|
4
|
-
"sourcesContent": ["import { raycast } from './raycast.js';\r\n\r\nconst maps = new WeakMap();\r\n\r\n/** One GPU hit test per map event, rather than one invisible SVG path per feature. */\r\nexport function nativeEvents(state) {\r\n const { map } = state;\r\n let context = maps.get(map);\r\n if (!context) {\r\n context = { states: new Set(), hovered: null };\r\n const pointer = L.version.startsWith('2');\r\n const move = pointer ? 'pointermove' : 'mousemove', out = pointer ? 'pointerout' : 'mouseout';\r\n const over = pointer ? 'pointerover' : 'mouseover';\r\n const descriptor = Object.getOwnPropertyDescriptor(map, '_fireDOMEvent');\r\n const fireDOMEvent = map._fireDOMEvent;\r\n const handle = function (event, type = event.type, targets) {\r\n const owner = L.Layer._renderers.get(map);\r\n if (!owner?.renderer || targets || !['click', 'preclick', 'dblclick', 'contextmenu',\r\n 'mousedown', 'mouseup', 'mousemove', 'mouseover', 'mouseout',\r\n 'pointerdown', 'pointerup', 'pointermove', 'pointerover', 'pointerout'].includes(type)) {\r\n return fireDOMEvent.call(this, event, type, targets);\r\n }\r\n const target = event.target;\r\n const dom = target instanceof Element &&\r\n target.closest('.leaflet-marker-icon,.leaflet-popup,.leaflet-tooltip,.leaflet-control');\r\n if (dom && context.hovered && (type === move || type === out)) {\r\n fireDOMEvent.call(map, event, out, [context.hovered]);\r\n context.hovered = null;\r\n map.getContainer().style.cursor = '';\r\n }\r\n if (dom || type === move && (map.dragging?.moving() || map._animatingZoom)) {\r\n return fireDOMEvent.call(this, event, type, targets);\r\n }\r\n const meshes = [];\r\n if (type !== out) {\r\n for (const candidate of context.states) {\r\n const { source } = candidate;\r\n if (source instanceof L.Marker || source.options.interactive === false ||\r\n !(source instanceof L.Path) && !source.options.interactive) continue;\r\n meshes.push(...candidate.meshes.values());\r\n }\r\n }\r\n const hits = meshes.length ? raycast(owner, event, meshes, false) : [];\r\n hits.sort((a, b) => b.object.renderOrder - a.object.renderOrder || a.distance - b.distance);\r\n let source = hits[0]?.object._nativeSource || null;\r\n if ((type === 'click' || type === 'preclick') && source && map._draggableMoved(source)) source = null;\r\n if (type === move || type === out) {\r\n if (context.hovered !== source) {\r\n if (context.hovered) fireDOMEvent.call(map, event, out, [context.hovered]);\r\n context.hovered = source;\r\n if (source) fireDOMEvent.call(map, event, over, [source]);\r\n map.getContainer().style.cursor = source ? 'pointer' : '';\r\n }\r\n }\r\n return fireDOMEvent.call(this, event, type, source ? [source] : undefined);\r\n };\r\n context.handle = handle;\r\n context.restore = () => {\r\n if (map._fireDOMEvent !== handle) return;\r\n if (descriptor) Object.defineProperty(map, '_fireDOMEvent', descriptor);\r\n else delete map._fireDOMEvent;\r\n };\r\n maps.set(map, context);\r\n map._fireDOMEvent = handle;\r\n }\r\n context.states.add(state);\r\n return () => {\r\n context.states.delete(state);\r\n if (context.hovered === state.source) {\r\n context.hovered = null;\r\n map.getContainer().style.cursor = '';\r\n }\r\n if (context.states.size) return;\r\n context.restore();\r\n maps.delete(map);\r\n };\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["raycast", "maps", "nativeEvents", "state", "map", "context", "pointer", "move", "out", "over", "descriptor", "fireDOMEvent", "handle", "event", "type", "targets", "owner", "target", "dom", "meshes", "candidate", "source", "hits", "a", "b"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{triangulate as C}from"./triangulate.js";function O(d,b,I){const j=[],g=[],c=d.options,M=(e,o,a,r)=>e.push(...I(o),...I(a),...I(r)),v=(e,o,a,r=o)=>{if(!(o>0)||!(r>0))return;const l=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(o))));for(let i=0;i<l;i++){const n=t=>new L.Point(e.x+o*Math.cos(t*2*Math.PI/l),e.y+r*Math.sin(t*2*Math.PI/l));M(a,e,n(i),n(i+1))}},m=Number(c.weight)||0,h=(Array.isArray(c.dashArray)?c.dashArray:String(c.dashArray||"").trim().split(/[ ,]+/)).map(Number);if(h.some(e=>!Number.isFinite(e)||e<0))throw new Error("Invalid Leaflet dashArray");h.every(e=>e===0)&&(h.length=0),h.length%2&&h.push(...h);const k=(e,o)=>{if(!c.stroke||m<=0||e.length<2)return;const a=m/2,r=(n,t,x,u)=>{const f=n.distanceTo(t);if(!f)return;const y=t.subtract(n).divideBy(f),s=new L.Point(-y.y*a,y.x*a);c.lineCap==="square"&&(x&&(n=n.subtract(y.multiplyBy(a))),u&&(t=t.add(y.multiplyBy(a)))),M(g,n.add(s),n.subtract(s),t.add(s)),M(g,t.add(s),n.subtract(s),t.subtract(s)),c.lineCap==="round"&&(x&&v(n,a,g),u&&v(t,a,g))};let l=Number(c.dashOffset)||0;const i=h.reduce((n,t)=>n+t,0);for(let n=0;n<e.length-(o?0:1);n++){const t=e[n],x=e[(n+1)%e.length],u=t.distanceTo(x);if(h.length){let f=0;for(;f<u;){let y=((l+f)%i+i)%i,s=0;for(;y>=h[s];)y-=h[s++];const p=Math.min(u,f+h[s]-y);if(s%2===0){const P=x.subtract(t).divideBy(u);r(t.add(P.multiplyBy(f)),t.add(P.multiplyBy(p)),!0,!0)}f=p}}else if(r(t,x,!o&&n===0,!o&&n===e.length-2),o||n>0)if(c.lineJoin==="round")v(t,a,g);else{const f=t.subtract(e[(n+e.length-1)%e.length]),y=Math.hypot(f.x,f.y);if(y&&u){const s=f.divideBy(y),p=x.subtract(t).divideBy(u),P=s.x*p.y-s.y*p.x>0?-1:1,w=new L.Point(-s.y*P,s.x*P),B=new L.Point(-p.y*P,p.x*P),_=t.add(w.multiplyBy(a)),N=t.add(B.multiplyBy(a)),q=1+w.x*B.x+w.y*B.y,A=q>0?w.add(B).multiplyBy(a/q):null;M(g,_,t,N),c.lineJoin==="miter"&&A&&Math.hypot(A.x,A.y)<=a*4&&M(g,_,t.add(A),N)}}l+=u}};if(d instanceof L.CircleMarker){const e=b.project(d.getLatLng());let o=d.getRadius(),a=o;if(d instanceof L.Circle){d._project();const i=d._point.add(b.getPixelOrigin());e.x=i.x,e.y=i.y,o=d._radius,a=d._radiusY||o}c.fill&&v(e,o,j,a);const r=Math.max(12,Math.min(128,Math.ceil(Math.PI*Math.sqrt(Math.max(o,a))))),l=(i,n=0)=>{const t=i*Math.PI*2/r;return new L.Point(e.x+Math.max(0,o+n)*Math.cos(t),e.y+Math.max(0,a+n)*Math.sin(t))};if(h.length)k(Array.from({length:r},(i,n)=>l(n)),!0);else if(c.stroke&&m>0)for(let i=0;i<r;i++)M(g,l(i,m/2),l(i,-m/2),l(i+1,m/2)),M(g,l(i+1,m/2),l(i,-m/2),l(i+1,-m/2))}else{const e=d instanceof L.Polygon,o=r=>{const l=r.map(i=>i.map(n=>b.project(n)));if(e&&c.fill&&l[0]?.length>=3){const i=l.filter(t=>t.length>=3),n=i.flat();for(const t of C(i[0],i.slice(1)))M(j,n[t[0]],n[t[1]],n[t[2]])}for(const i of l)k(i,e)},a=r=>{if(r.length)if(r[0]instanceof L.LatLng)o([r]);else if(e&&r[0][0]instanceof L.LatLng)o(r);else for(const l of r)a(l)};a(d.getLatLngs())}return{fill:j,stroke:g}}export{O as nativeGeometry};
|
|
2
|
-
//# sourceMappingURL=nativeGeometry.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/nativeGeometry.js"],
|
|
4
|
-
"sourcesContent": ["import { triangulate } from './triangulate.js';\r\n\r\n/** Leaflet paths become flat triangles; pixel-sized strokes are rebuilt on zoom. */\r\nexport function nativeGeometry(source, map, point) {\r\n const fill = [], stroke = [], options = source.options;\r\n const triangle = (target, a, b, c) => target.push(...point(a), ...point(b), ...point(c));\r\n const disk = (center, radius, target, radiusY = radius) => {\r\n if (!(radius > 0) || !(radiusY > 0)) return;\r\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(radius))));\r\n for (let i = 0; i < count; i++) {\r\n const at = index => new L.Point(center.x + radius * Math.cos(index * 2 * Math.PI / count),\r\n center.y + radiusY * Math.sin(index * 2 * Math.PI / count));\r\n triangle(target, center, at(i), at(i + 1));\r\n }\r\n };\r\n const width = Number(options.weight) || 0;\r\n const dash = (Array.isArray(options.dashArray) ? options.dashArray :\r\n String(options.dashArray || '').trim().split(/[ ,]+/)).map(Number);\r\n if (dash.some(value => !Number.isFinite(value) || value < 0)) throw new Error('Invalid Leaflet dashArray');\r\n if (dash.every(value => value === 0)) dash.length = 0;\r\n if (dash.length % 2) dash.push(...dash);\r\n const line = (points, closed) => {\r\n if (!options.stroke || width <= 0 || points.length < 2) return;\r\n const radius = width / 2;\r\n const segment = (a, b, startCap, endCap) => {\r\n const length = a.distanceTo(b);\r\n if (!length) return;\r\n const direction = b.subtract(a).divideBy(length);\r\n const normal = new L.Point(-direction.y * radius, direction.x * radius);\r\n if (options.lineCap === 'square') {\r\n if (startCap) a = a.subtract(direction.multiplyBy(radius));\r\n if (endCap) b = b.add(direction.multiplyBy(radius));\r\n }\r\n triangle(stroke, a.add(normal), a.subtract(normal), b.add(normal));\r\n triangle(stroke, b.add(normal), a.subtract(normal), b.subtract(normal));\r\n if (options.lineCap === 'round') {\r\n if (startCap) disk(a, radius, stroke);\r\n if (endCap) disk(b, radius, stroke);\r\n }\r\n };\r\n let distance = Number(options.dashOffset) || 0;\r\n const period = dash.reduce((sum, value) => sum + value, 0);\r\n for (let i = 0; i < points.length - (closed ? 0 : 1); i++) {\r\n const a = points[i], b = points[(i + 1) % points.length], length = a.distanceTo(b);\r\n if (!dash.length) {\r\n segment(a, b, !closed && i === 0, !closed && i === points.length - 2);\r\n if (closed || i > 0) {\r\n if (options.lineJoin === 'round') disk(a, radius, stroke);\r\n else {\r\n const previous = a.subtract(points[(i + points.length - 1) % points.length]);\r\n const previousLength = Math.hypot(previous.x, previous.y);\r\n if (previousLength && length) {\r\n const incoming = previous.divideBy(previousLength);\r\n const outgoing = b.subtract(a).divideBy(length);\r\n const side = incoming.x * outgoing.y - incoming.y * outgoing.x > 0 ? -1 : 1;\r\n const n1 = new L.Point(-incoming.y * side, incoming.x * side);\r\n const n2 = new L.Point(-outgoing.y * side, outgoing.x * side);\r\n const from = a.add(n1.multiplyBy(radius)), to = a.add(n2.multiplyBy(radius));\r\n const denominator = 1 + n1.x * n2.x + n1.y * n2.y;\r\n const miter = denominator > 0 ? n1.add(n2).multiplyBy(radius / denominator) : null;\r\n triangle(stroke, from, a, to);\r\n if (options.lineJoin === 'miter' && miter && Math.hypot(miter.x, miter.y) <= radius * 4) {\r\n triangle(stroke, from, a.add(miter), to);\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n let offset = 0;\r\n while (offset < length) {\r\n let phase = ((distance + offset) % period + period) % period, index = 0;\r\n while (phase >= dash[index]) phase -= dash[index++];\r\n const end = Math.min(length, offset + dash[index] - phase);\r\n if (index % 2 === 0) {\r\n const delta = b.subtract(a).divideBy(length);\r\n segment(a.add(delta.multiplyBy(offset)), a.add(delta.multiplyBy(end)), true, true);\r\n }\r\n offset = end;\r\n }\r\n }\r\n distance += length;\r\n }\r\n };\r\n if (source instanceof L.CircleMarker) {\r\n const center = map.project(source.getLatLng());\r\n let radius = source.getRadius(), radiusY = radius;\r\n if (source instanceof L.Circle) {\r\n source._project();\r\n const projected = source._point.add(map.getPixelOrigin());\r\n center.x = projected.x;\r\n center.y = projected.y;\r\n radius = source._radius;\r\n radiusY = source._radiusY || radius;\r\n }\r\n if (options.fill) disk(center, radius, fill, radiusY);\r\n const count = Math.max(12, Math.min(128, Math.ceil(Math.PI * Math.sqrt(Math.max(radius, radiusY)))));\r\n const at = (index, offset = 0) => {\r\n const angle = index * Math.PI * 2 / count;\r\n return new L.Point(center.x + Math.max(0, radius + offset) * Math.cos(angle),\r\n center.y + Math.max(0, radiusY + offset) * Math.sin(angle));\r\n };\r\n if (dash.length) line(Array.from({ length: count }, (_, index) => at(index)), true);\r\n else if (options.stroke && width > 0) {\r\n for (let i = 0; i < count; i++) {\r\n triangle(stroke, at(i, width / 2), at(i, -width / 2), at(i + 1, width / 2));\r\n triangle(stroke, at(i + 1, width / 2), at(i, -width / 2), at(i + 1, -width / 2));\r\n }\r\n }\r\n } else {\r\n const closed = source instanceof L.Polygon;\r\n const polygon = rings => {\r\n const projected = rings.map(ring => ring.map(latlng => map.project(latlng)));\r\n if (closed && options.fill && projected[0]?.length >= 3) {\r\n const valid = projected.filter(ring => ring.length >= 3);\r\n const vertices = valid.flat();\r\n for (const indices of triangulate(valid[0], valid.slice(1))) {\r\n triangle(fill, vertices[indices[0]], vertices[indices[1]], vertices[indices[2]]);\r\n }\r\n }\r\n for (const ring of projected) line(ring, closed);\r\n };\r\n const visit = coordinates => {\r\n if (!coordinates.length) return;\r\n if (coordinates[0] instanceof L.LatLng) polygon([coordinates]);\r\n else if (closed && coordinates[0][0] instanceof L.LatLng) polygon(coordinates);\r\n else for (const child of coordinates) visit(child);\r\n };\r\n visit(source.getLatLngs());\r\n }\r\n return { fill, stroke };\r\n}\r\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,eAAAA,MAAmB,mBAGrB,SAASC,EAAeC,EAAQC,EAAKC,EAAO,CACjD,MAAMC,EAAO,CAAC,EAAGC,EAAS,CAAC,EAAGC,EAAUL,EAAO,QACzCM,EAAW,CAACC,EAAQC,EAAGC,EAAGC,IAAMH,EAAO,KAAK,GAAGL,EAAMM,CAAC,EAAG,GAAGN,EAAMO,CAAC,EAAG,GAAGP,EAAMQ,CAAC,CAAC,EACjFC,EAAO,CAACC,EAAQC,EAAQN,EAAQO,EAAUD,IAAW,CACzD,GAAI,EAAEA,EAAS,IAAM,EAAEC,EAAU,GAAI,OACrC,MAAMC,EAAQ,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,KAAK,KAAK,KAAK,GAAK,KAAK,KAAKF,CAAM,CAAC,CAAC,CAAC,EAChF,QAAS,EAAI,EAAG,EAAIE,EAAO,IAAK,CAC9B,MAAMC,EAAKC,GAAS,IAAI,EAAE,MAAML,EAAO,EAAIC,EAAS,KAAK,IAAII,EAAQ,EAAI,KAAK,GAAKF,CAAK,EACtFH,EAAO,EAAIE,EAAU,KAAK,IAAIG,EAAQ,EAAI,KAAK,GAAKF,CAAK,CAAC,EAC5DT,EAASC,EAAQK,EAAQI,EAAG,CAAC,EAAGA,EAAG,EAAI,CAAC,CAAC,CAC3C,CACF,EACME,EAAQ,OAAOb,EAAQ,MAAM,GAAK,EAClCc,GAAQ,MAAM,QAAQd,EAAQ,SAAS,EAAIA,EAAQ,UACvD,OAAOA,EAAQ,WAAa,EAAE,EAAE,KAAK,EAAE,MAAM,OAAO,GAAG,IAAI,MAAM,EACnE,GAAIc,EAAK,KAAKC,GAAS,CAAC,OAAO,SAASA,CAAK,GAAKA,EAAQ,CAAC,EAAG,MAAM,IAAI,MAAM,2BAA2B,EACrGD,EAAK,MAAMC,GAASA,IAAU,CAAC,IAAGD,EAAK,OAAS,GAChDA,EAAK,OAAS,GAAGA,EAAK,KAAK,GAAGA,CAAI,EACtC,MAAME,EAAO,CAACC,EAAQC,IAAW,CAC/B,GAAI,CAAClB,EAAQ,QAAUa,GAAS,GAAKI,EAAO,OAAS,EAAG,OACxD,MAAMT,EAASK,EAAQ,EACjBM,EAAU,CAAChB,EAAGC,EAAGgB,EAAUC,IAAW,CAC1C,MAAMC,EAASnB,EAAE,WAAWC,CAAC,EAC7B,GAAI,CAACkB,EAAQ,OACb,MAAMC,EAAYnB,EAAE,SAASD,CAAC,EAAE,SAASmB,CAAM,EACzCE,EAAS,IAAI,EAAE,MAAM,CAACD,EAAU,EAAIf,EAAQe,EAAU,EAAIf,CAAM,EAClER,EAAQ,UAAY,WAClBoB,IAAUjB,EAAIA,EAAE,SAASoB,EAAU,WAAWf,CAAM,CAAC,GACrDa,IAAQjB,EAAIA,EAAE,IAAImB,EAAU,WAAWf,CAAM,CAAC,IAEpDP,EAASF,EAAQI,EAAE,IAAIqB,CAAM,EAAGrB,EAAE,SAASqB,CAAM,EAAGpB,EAAE,IAAIoB,CAAM,CAAC,EACjEvB,EAASF,EAAQK,EAAE,IAAIoB,CAAM,EAAGrB,EAAE,SAASqB,CAAM,EAAGpB,EAAE,SAASoB,CAAM,CAAC,EAClExB,EAAQ,UAAY,UAClBoB,GAAUd,EAAKH,EAAGK,EAAQT,CAAM,EAChCsB,GAAQf,EAAKF,EAAGI,EAAQT,CAAM,EAEtC,EACA,IAAI0B,EAAW,OAAOzB,EAAQ,UAAU,GAAK,EAC7C,MAAM0B,EAASZ,EAAK,OAAO,CAACa,EAAKZ,IAAUY,EAAMZ,EAAO,CAAC,EACzD,QAASa,EAAI,EAAGA,EAAIX,EAAO,QAAUC,EAAS,EAAI,GAAIU,IAAK,CACzD,MAAMzB,EAAIc,EAAOW,CAAC,EAAGxB,EAAIa,GAAQW,EAAI,GAAKX,EAAO,MAAM,EAAGK,EAASnB,EAAE,WAAWC,CAAC,EACjF,GAAKU,EAAK,OAuBH,CACL,IAAIe,EAAS,EACb,KAAOA,EAASP,GAAQ,CACtB,IAAIQ,IAAUL,EAAWI,GAAUH,EAASA,GAAUA,EAAQd,EAAQ,EACtE,KAAOkB,GAAShB,EAAKF,CAAK,GAAGkB,GAAShB,EAAKF,GAAO,EAClD,MAAMmB,EAAM,KAAK,IAAIT,EAAQO,EAASf,EAAKF,CAAK,EAAIkB,CAAK,EACzD,GAAIlB,EAAQ,IAAM,EAAG,CACnB,MAAMoB,EAAQ5B,EAAE,SAASD,CAAC,EAAE,SAASmB,CAAM,EAC3CH,EAAQhB,EAAE,IAAI6B,EAAM,WAAWH,CAAM,CAAC,EAAG1B,EAAE,IAAI6B,EAAM,WAAWD,CAAG,CAAC,EAAG,GAAM,EAAI,CACnF,CACAF,EAASE,CACX,CACF,SAlCEZ,EAAQhB,EAAGC,EAAG,CAACc,GAAUU,IAAM,EAAG,CAACV,GAAUU,IAAMX,EAAO,OAAS,CAAC,EAChEC,GAAUU,EAAI,EAChB,GAAI5B,EAAQ,WAAa,QAASM,EAAKH,EAAGK,EAAQT,CAAM,MACnD,CACH,MAAMkC,EAAW9B,EAAE,SAASc,GAAQW,EAAIX,EAAO,OAAS,GAAKA,EAAO,MAAM,CAAC,EACrEiB,EAAiB,KAAK,MAAMD,EAAS,EAAGA,EAAS,CAAC,EACxD,GAAIC,GAAkBZ,EAAQ,CAC5B,MAAMa,EAAWF,EAAS,SAASC,CAAc,EAC3CE,EAAWhC,EAAE,SAASD,CAAC,EAAE,SAASmB,CAAM,EACxCe,EAAOF,EAAS,EAAIC,EAAS,EAAID,EAAS,EAAIC,EAAS,EAAI,EAAI,GAAK,EACpEE,EAAK,IAAI,EAAE,MAAM,CAACH,EAAS,EAAIE,EAAMF,EAAS,EAAIE,CAAI,EACtDE,EAAK,IAAI,EAAE,MAAM,CAACH,EAAS,EAAIC,EAAMD,EAAS,EAAIC,CAAI,EACtDG,EAAOrC,EAAE,IAAImC,EAAG,WAAW9B,CAAM,CAAC,EAAGiC,EAAKtC,EAAE,IAAIoC,EAAG,WAAW/B,CAAM,CAAC,EACrEkC,EAAc,EAAIJ,EAAG,EAAIC,EAAG,EAAID,EAAG,EAAIC,EAAG,EAC1CI,EAAQD,EAAc,EAAIJ,EAAG,IAAIC,CAAE,EAAE,WAAW/B,EAASkC,CAAW,EAAI,KAC9EzC,EAASF,EAAQyC,EAAMrC,EAAGsC,CAAE,EACxBzC,EAAQ,WAAa,SAAW2C,GAAS,KAAK,MAAMA,EAAM,EAAGA,EAAM,CAAC,GAAKnC,EAAS,GACpFP,EAASF,EAAQyC,EAAMrC,EAAE,IAAIwC,CAAK,EAAGF,CAAE,CAE3C,CACF,CAeJhB,GAAYH,CACd,CACF,EACA,GAAI3B,aAAkB,EAAE,aAAc,CACpC,MAAMY,EAASX,EAAI,QAAQD,EAAO,UAAU,CAAC,EAC7C,IAAIa,EAASb,EAAO,UAAU,EAAGc,EAAUD,EAC3C,GAAIb,aAAkB,EAAE,OAAQ,CAC9BA,EAAO,SAAS,EAChB,MAAMiD,EAAYjD,EAAO,OAAO,IAAIC,EAAI,eAAe,CAAC,EACxDW,EAAO,EAAIqC,EAAU,EACrBrC,EAAO,EAAIqC,EAAU,EACrBpC,EAASb,EAAO,QAChBc,EAAUd,EAAO,UAAYa,CAC/B,CACIR,EAAQ,MAAMM,EAAKC,EAAQC,EAAQV,EAAMW,CAAO,EACpD,MAAMC,EAAQ,KAAK,IAAI,GAAI,KAAK,IAAI,IAAK,KAAK,KAAK,KAAK,GAAK,KAAK,KAAK,KAAK,IAAIF,EAAQC,CAAO,CAAC,CAAC,CAAC,CAAC,EAC7FE,EAAK,CAACC,EAAOiB,EAAS,IAAM,CAChC,MAAMgB,EAAQjC,EAAQ,KAAK,GAAK,EAAIF,EACpC,OAAO,IAAI,EAAE,MAAMH,EAAO,EAAI,KAAK,IAAI,EAAGC,EAASqB,CAAM,EAAI,KAAK,IAAIgB,CAAK,EACzEtC,EAAO,EAAI,KAAK,IAAI,EAAGE,EAAUoB,CAAM,EAAI,KAAK,IAAIgB,CAAK,CAAC,CAC9D,EACA,GAAI/B,EAAK,OAAQE,EAAK,MAAM,KAAK,CAAE,OAAQN,CAAM,EAAG,CAACoC,EAAGlC,IAAUD,EAAGC,CAAK,CAAC,EAAG,EAAI,UACzEZ,EAAQ,QAAUa,EAAQ,EACjC,QAAS,EAAI,EAAG,EAAIH,EAAO,IACzBT,EAASF,EAAQY,EAAG,EAAGE,EAAQ,CAAC,EAAGF,EAAG,EAAG,CAACE,EAAQ,CAAC,EAAGF,EAAG,EAAI,EAAGE,EAAQ,CAAC,CAAC,EAC1EZ,EAASF,EAAQY,EAAG,EAAI,EAAGE,EAAQ,CAAC,EAAGF,EAAG,EAAG,CAACE,EAAQ,CAAC,EAAGF,EAAG,EAAI,EAAG,CAACE,EAAQ,CAAC,CAAC,CAGrF,KAAO,CACL,MAAMK,EAASvB,aAAkB,EAAE,QAC7BoD,EAAUC,GAAS,CACvB,MAAMJ,EAAYI,EAAM,IAAIC,GAAQA,EAAK,IAAIC,GAAUtD,EAAI,QAAQsD,CAAM,CAAC,CAAC,EAC3E,GAAIhC,GAAUlB,EAAQ,MAAQ4C,EAAU,CAAC,GAAG,QAAU,EAAG,CACvD,MAAMO,EAAQP,EAAU,OAAOK,GAAQA,EAAK,QAAU,CAAC,EACjDG,EAAWD,EAAM,KAAK,EAC5B,UAAWE,KAAW5D,EAAY0D,EAAM,CAAC,EAAGA,EAAM,MAAM,CAAC,CAAC,EACxDlD,EAASH,EAAMsD,EAASC,EAAQ,CAAC,CAAC,EAAGD,EAASC,EAAQ,CAAC,CAAC,EAAGD,EAASC,EAAQ,CAAC,CAAC,CAAC,CAEnF,CACA,UAAWJ,KAAQL,EAAW5B,EAAKiC,EAAM/B,CAAM,CACjD,EACMoC,EAAQC,GAAe,CAC3B,GAAKA,EAAY,OACjB,GAAIA,EAAY,CAAC,YAAa,EAAE,OAAQR,EAAQ,CAACQ,CAAW,CAAC,UACpDrC,GAAUqC,EAAY,CAAC,EAAE,CAAC,YAAa,EAAE,OAAQR,EAAQQ,CAAW,MACxE,WAAWC,KAASD,EAAaD,EAAME,CAAK,CACnD,EACAF,EAAM3D,EAAO,WAAW,CAAC,CAC3B,CACA,MAAO,CAAE,KAAAG,EAAM,OAAAC,CAAO,CACxB",
|
|
6
|
-
"names": ["triangulate", "nativeGeometry", "source", "map", "point", "fill", "stroke", "options", "triangle", "target", "a", "b", "c", "disk", "center", "radius", "radiusY", "count", "at", "index", "width", "dash", "value", "line", "points", "closed", "segment", "startCap", "endCap", "length", "direction", "normal", "distance", "period", "sum", "i", "offset", "phase", "end", "delta", "previous", "previousLength", "incoming", "outgoing", "side", "n1", "n2", "from", "to", "denominator", "miter", "projected", "angle", "_", "polygon", "rings", "ring", "latlng", "valid", "vertices", "indices", "visit", "coordinates", "child"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{createMesh as re}from"./createMesh.js";import{destroyTexture as P}from"./destroyTexture.js";import{disposeMesh as I}from"./disposeMesh.js";import{nativeGeometry as oe}from"./nativeGeometry.js";import{nativeEvents as ne}from"./nativeEvents.js";import{parseColor as se}from"./parseColor.js";import{update as k}from"./update.js";async function me(f){const{source:r,map:d}=f,s=f.backend=new L.Layer({source:{type:"3d"}}),p=f.meshes=new Map,u=new Map,H=new Map,v=new Set;d._nativeGPUOrder||=0,d._nativeGPUBack||=0;let U=!0,M=!0,T=!1,_=++d._nativeGPUOrder,F;const y=r instanceof L.Marker,Y=Number(getComputedStyle(r.getPane()).zIndex)||0,z=()=>r._nativeGPU===f&&d.hasLayer(r),m=()=>{U=!0,M=!0,T=!1,f.hide();const e=[r._icon,r._shadow,r._image];for(const t of v)e.includes(t)||(t.removeEventListener("load",m),t.removeEventListener("error",G),v.delete(t));for(const t of e)!(t instanceof HTMLImageElement)||v.has(t)||(v.add(t),t.addEventListener("load",m),t.addEventListener("error",G));s._shared&&k(s)},G=()=>r.fire("error",{error:new Error("Unable to load native layer image")});f.refresh=m,f.reorder=e=>{_=e?++d._nativeGPUOrder:--d._nativeGPUBack,m()};const W=()=>{M=!0,s._shared&&k(s)},R="load tileload tileunload move drag";r.on(R,m),d.on("zoomend",m),y&&d.on("move zoom rotate pitch resize viewreset",W);const J=ne(f);for(const e of["setLatLng","setLatLngs","addLatLng","setRadius","setStyle","redraw","setIcon","setUrl","setBounds","setOpacity","setZIndex","setZIndexOffset","bringToFront","bringToBack"]){if(typeof r[e]!="function")continue;const t=Object.getOwnPropertyDescriptor(r,e),o=r[e];H.set(e,t),r[e]=function(...i){const a=o.apply(this,i);if((e==="bringToFront"||e==="bringToBack")&&this instanceof L.GridLayer){const l=Object.values(d._layers).filter(c=>c!==this&&c instanceof L.GridLayer&&c.getPane()===this.getPane()).map(c=>c.options.zIndex||0),n=e==="bringToFront"?Math.max(...l)+1:Math.min(...l)-1;Number.isFinite(n)&&this.setZIndex(n)}return e==="bringToFront"&&(_=++d._nativeGPUOrder),e==="bringToBack"&&(_=--d._nativeGPUBack),m(),a}}f.dispose=()=>{r.off(R,m),d.off("zoomend",m),y&&d.off("move zoom rotate pitch resize viewreset",W),J(),f.refresh=f.reorder=null;for(const[e,t]of H)t?Object.defineProperty(r,e,t):delete r[e];for(const e of p.values())I(s,e);p.clear();for(const e of u.values())P(s,e.texture);u.clear();for(const e of v)e.removeEventListener("load",m),e.removeEventListener("error",G);s._beforeRender=null,s.remove()};const K=new Promise((e,t)=>{s.once("ready",e),s.once("error",({error:o})=>t(o))});if(s.on("error",({error:e})=>r.fire("error",{error:e})),m(),s.addTo(d),await K.catch(e=>{throw f.dispose(),e}),!z())return r;const S=e=>{const t=d.options.crs,o=t.project(s.location),i=t.project(e),a=Math.cos(s.location.lat*Math.PI/180);return[(i.x-o.x)*a,0,-(i.y-o.y)*a]},$=e=>S(d.unproject(e)),q=(e,t,o)=>{e.program.uniforms.baseColor.value=t,e.program.uniforms.opacity.value=o,r instanceof L.GridLayer&&(e.opacity=o);const i=y?r._zIndex+(r._cameraZIndexOffset||0):r.options.zIndex;e.renderOrder=Y*1e6+(i||0)*1e3+_,e._nativeSource=r,e._nativeUsed=!0},A=(e,t,o,i,a,l)=>{if(!t.length)return;let n=p.get(e);const c={position:t,normal:t.map((h,w)=>w%3===1?1:0),...l?{uv:l}:{}};if(!n||n.geometry.attributes.position.data.length!==t.length||n.program.uniforms.baseTexture?.value!==a)n&&I(s,n),n=re(s,c,{vertexColors:!1,color:o,opacity:i,unlit:!0,alphaMode:"BLEND",...a?{baseTexture:a}:{}},0,r instanceof L.GridLayer?F:void 0),r instanceof L.GridLayer&&(F||=n.program,n.texture=a),p.set(e,n);else{const h=n.geometry.attributes.position;h.data.set(t),h.needsUpdate=!0,n.geometry.bounds=null}return q(n,o,i),n},ee=(e,t)=>{if(!(t instanceof HTMLImageElement)&&!(t instanceof HTMLCanvasElement))throw new Error("WebGPU native raster layers require image or canvas tiles");let o=u.get(e);const i=t.currentSrc||t.src;if(!o||o.image!==t||o.url!==i){if(o){const c=p.get(e);c&&I(s,c),p.delete(e),P(s,o.texture),u.delete(e)}const a=t.naturalWidth||t.width,l=t.naturalHeight||t.height;if(!a||!l)return;const{device:n}=s.renderer;if(o={device:n,image:t,url:i,format:"rgba8unorm",uploaded:null,texture:n.createTexture({size:[a,l],format:"rgba8unorm",usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT}),sampler:n.createSampler({minFilter:"linear",magFilter:"linear"})},u.set(e,o),t instanceof HTMLCanvasElement)o.pending=!0,createImageBitmap(t).then(c=>{try{if(!z()||u.get(e)!==o)return;n.queue.copyExternalImageToTexture({source:c},{texture:o.texture},[a,l]),o.uploaded=t,o.pending=!1,m()}finally{c.close()}}).catch(c=>{T=!0,r.fire("error",{error:c})});else{try{n.queue.copyExternalImageToTexture({source:t},{texture:o.texture},[a,l])}catch(c){throw o.texture.destroy(),u.delete(e),c}o.uploaded=t}}return o.used=!0,o.uploaded===t?o:void 0},D=(e,t,o,i)=>{const a=ee(e,t);if(!a)return;const l=[0,2,1,1,2,3];return A(e,l.flatMap(n=>o[n]),[1,1,1],i,a,l.flatMap(n=>[[0,0],[1,0],[0,1],[1,1]][n]))},Z=e=>[e.getNorthWest(),e.getNorthEast(),e.getSouthWest(),e.getSouthEast()].map(S),V=()=>{if(!(!z()||!s.renderer||T)&&!(!U&&(!y||!M))){U=!1,M=!1;for(const e of p.values())e._nativeUsed=!1;for(const e of u.values())e.used=!1;if(r instanceof L.GridLayer)for(const[e,t]of Object.entries(r._tiles||{})){if(!t.loaded||t.el instanceof HTMLImageElement&&!t.el.naturalWidth)continue;const o=(r.options.opacity??1)*(t._gpuOpacity??1),i=u.get(e);let a=p.get(e);if(a&&i?.image===t.el&&i.url===(t.el.currentSrc||t.el.src))i.used=!0,q(a,[1,1,1],o);else{const[l,n]=r._tileCoordsToNwSe(t.coords);a=D(e,t.el,Z(new L.LatLngBounds(l,n)),o)}a&&(a.renderOrder+=t.coords.z/100)}else if(r instanceof L.ImageOverlay)r._image?.complete&&r._image.naturalWidth&&D("image",r._image,Z(r.getBounds()),r.options.opacity??1);else if(y)for(const[e,t]of[["shadow",r._shadow],["icon",r._icon]]){if(!(t instanceof HTMLImageElement)||!t.complete||!t.naturalWidth)continue;const i=new DOMPoint(...S(r.getLatLng()),1).matrixTransform(new DOMMatrix(s.root.worldMatrix)).matrixTransform(new DOMMatrix(s.camera.projectionViewMatrix)),a=new DOMMatrix(s.camera.projectionViewMatrix).inverse(),l=new DOMMatrix(s.root.worldMatrix).inverse(),n=r.options.icon.options,c=d.getSize(),h=n[e==="shadow"?"shadowSize":"iconSize"]||[t.naturalWidth,t.naturalHeight],w=h.x??h[0],B=h.y??h[1],E=e==="shadow"&&n.shadowAnchor||n.iconAnchor||[Math.floor(w/2),Math.floor(B/2)],g=new L.Point((i.x/i.w+1)*c.x/2,(1-i.y/i.w)*c.y/2),O=g.x-(E.x??E[0]),b=g.y-(E.y??E[1]),te=[[O,b],[O+w,b],[O,b+B],[O+w,b+B]].map(([C,N])=>{const X=r._cameraIconPoint(C-g.x,N-g.y);C=g.x+X.x,N=g.y+X.y;const x=new DOMPoint(C/c.x*2-1,1-N/c.y*2,i.z/i.w,1).matrixTransform(a),j=new DOMPoint(x.x/x.w,x.y/x.w,x.z/x.w,1).matrixTransform(l);return[j.x,j.y,j.z]}),Q=D(e,t,te,r.options.opacity??1);e==="shadow"&&Q&&(Q.renderOrder-=100*1e6)}else{const{fill:e,stroke:t}=oe(r,d,$);for(const[o,i,a,l]of[["fill",e,r.options.fillColor||r.options.color,r.options.fillOpacity],["stroke",t,r.options.color,r.options.opacity]]){if(!i.length)continue;const{r:n,g:c,b:h}=se(a);A(o,i,[n,c,h],l??1)}}for(const[e,t]of p){if(t._nativeUsed)continue;I(s,t),p.delete(e);const o=u.get(e);o&&P(s,o.texture),u.delete(e)}for(const[e,t]of u)t.used||(P(s,t.texture),u.delete(e))}};s._beforeRender=()=>{try{V()}catch(e){T=!0,r.fire("error",{error:e})}};try{V()}catch(e){throw f.dispose(),e}return k(s),r}export{me as nativeLayer};
|
|
2
|
-
//# sourceMappingURL=nativeLayer.js.map
|