{"version":3,"file":"use-compass.mjs","sources":["../../../../../../packages/components/controls/compass/use-compass.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { AnyFunction, VcComponentInternalInstance } from '@vue-cesium/utils/types'\nimport CameraFlightPath from './CameraFlightPath'\nimport { getInstanceListener, $ } from '@vue-cesium/utils/private/vm'\nimport { VcTooltip } from '@vue-cesium/components/ui'\nimport { isObject } from '@vue-cesium/utils/util'\n\nexport default function (props, { emit }, vcInstance: VcComponentInternalInstance) {\n  // state\n  const vectorScratch: any = {}\n  const oldTransformScratch: any = {}\n  const newTransformScratch: any = {}\n  const centerScratch: any = {}\n\n  let unsubscribeFromPostRender: AnyFunction<void>\n  let unsubscribeFromClockTick: AnyFunction<void>\n\n  let orbitMouseMoveFunction: EventListener\n  let orbitMouseUpFunction: EventListener\n  let orbitTickFunction: EventListener\n\n  const heading = ref(0)\n  const orbitCursorAngle = ref(0)\n  const orbitCursorOpacity = ref(0)\n\n  let isOrbiting = false\n  let orbitLastTimestamp = 0\n  let orbitFrame: any = {}\n  let orbitIsLook = false\n\n  let rotateMouseUpFunction: AnyFunction<void>\n  let rotateMouseMoveFunction: AnyFunction<void>\n  let isRotating = false\n  let rotateInitialCursorAngle = 0\n  let rotateFrame: any = {}\n  let rotateIsLook = false\n  let rotateInitialCameraAngle = 0\n  let rotateInitialCameraDistance: any = {}\n\n  const iconOuterTooltipRef = ref<typeof VcTooltip | null>(null)\n  const iconInnerTooltipRef = ref<typeof VcTooltip | null>(null)\n\n  // methods\n  const handleMouseDown = (e: MouseEvent | TouchEvent) => {\n    if (e.stopPropagation) e.stopPropagation()\n    if (e.preventDefault) e.preventDefault()\n\n    $(iconOuterTooltipRef)?.hide()\n    $(iconInnerTooltipRef)?.hide()\n\n    const { SceneMode, Cartesian2 } = Cesium\n    const scene = vcInstance.viewer.scene\n    if (scene.mode === SceneMode.MORPHING) {\n      return true\n    }\n\n    const compassElement = e.currentTarget as HTMLElement\n    const compassRectangle = compassElement.getBoundingClientRect()\n    const maxDistance = compassRectangle.width / 2.0\n    const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n    let clickLocation\n    if (e instanceof MouseEvent) {\n      clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n    } else if (e instanceof TouchEvent) {\n      clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n    }\n    const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n    const distanceFromCenter = Cartesian2.magnitude(vector)\n    const distanceFraction = distanceFromCenter / maxDistance\n    const nominalTotalRadius = 145\n    const norminalGyroRadius = 50\n\n    if (distanceFraction < norminalGyroRadius / nominalTotalRadius) {\n      orbit(compassElement, vector)\n    } else if (distanceFraction < 1.0) {\n      rotate(compassElement, vector)\n    } else {\n      return true\n    }\n  }\n  const handleDoubleClick = e => {\n    const { Cartesian2, Cartesian3, defined, Ellipsoid, Matrix4, Ray, SceneMode, Transforms } = Cesium\n    const { viewer } = vcInstance\n    const scene = viewer.scene\n    const camera = scene.camera\n    const sscc = scene.screenSpaceCameraController\n\n    if (scene.mode === SceneMode.MORPHING || !sscc.enableInputs) {\n      return true\n    }\n    if (scene.mode === SceneMode.COLUMBUS_VIEW && !sscc.enableTranslate) {\n      return\n    }\n    if (scene.mode === SceneMode.SCENE3D || scene.mode === SceneMode.COLUMBUS_VIEW) {\n      if (!sscc.enableLook) {\n        return\n      }\n\n      if (scene.mode === SceneMode.SCENE3D) {\n        if (!sscc.enableRotate) {\n          return\n        }\n      }\n    }\n\n    const windowPosition = new Cartesian2()\n    windowPosition.x = scene.canvas.clientWidth / 2\n    windowPosition.y = scene.canvas.clientHeight / 2\n    const pickRayScratch = new Ray()\n    const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n    const center = scene.globe.pick(ray, scene, centerScratch)\n    if (!isObject(center) || !defined(center)) {\n      // Globe is barely visible, so reset to home view.\n      viewer.camera.flyHome()\n      return\n    }\n\n    const listener = getInstanceListener(vcInstance, 'compassEvt')\n    listener &&\n      emit('compassEvt', {\n        type: 'reset',\n        camera: viewer.camera,\n        status: 'start',\n        target: e.currentTarget\n      })\n    const rotateFrame = Transforms.eastNorthUpToFixedFrame(center, viewer.scene.globe.ellipsoid)\n    const lookVector = Cartesian3.subtract(center, camera.position, new Cartesian3())\n    const flight = CameraFlightPath.createTween(scene, {\n      destination: Matrix4.multiplyByPoint(rotateFrame, new Cartesian3(0.0, 0.0, Cartesian3.magnitude(lookVector)), new Cartesian3()),\n      direction: Matrix4.multiplyByPointAsVector(rotateFrame, new Cartesian3(0.0, 0.0, -1.0), new Cartesian3()),\n      up: Matrix4.multiplyByPointAsVector(rotateFrame, new Cartesian3(0.0, 1.0, 0.0), new Cartesian3()),\n      duration: props.duration,\n      complete: () => {\n        listener &&\n          emit('compassEvt', {\n            type: 'reset',\n            camera: viewer.camera,\n            status: 'end',\n            target: e.currentTarget\n          })\n      },\n      cancel: () => {\n        listener &&\n          emit('compassEvt', {\n            type: 'reset',\n            camera: viewer.camera,\n            status: 'cancel',\n            target: e.currentTarget\n          })\n      }\n    })\n    ;(scene as any).tweens.add(flight)\n  }\n  const resetRotater = () => {\n    orbitCursorOpacity.value = 0\n    orbitCursorAngle.value = 0\n  }\n  // state methods\n  const viewerChange = () => {\n    const { defined } = Cesium\n    if (defined(vcInstance.viewer)) {\n      if (unsubscribeFromPostRender) {\n        unsubscribeFromPostRender()\n        ;(unsubscribeFromPostRender as any) = undefined\n      }\n\n      unsubscribeFromPostRender = vcInstance.viewer.scene.postRender.addEventListener(function () {\n        if (heading.value !== vcInstance.viewer.scene.camera.heading) {\n          heading.value = vcInstance.viewer.scene.camera.heading\n        }\n      })\n    } else {\n      if (unsubscribeFromPostRender) {\n        unsubscribeFromPostRender()\n        ;(unsubscribeFromPostRender as any) = undefined\n      }\n    }\n  }\n\n  const orbit = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n    const { Cartesian2, Cartesian3, defined, getTimestamp, Math: CesiumMath, Matrix4, Ray, SceneMode, Transforms } = Cesium\n    let scene = vcInstance.viewer.scene\n    let camera = scene.camera\n    const sscc = scene.screenSpaceCameraController\n    // do not orbit if it is disabled\n    if (scene.mode === SceneMode.MORPHING || !sscc.enableInputs) {\n      return\n    }\n\n    switch (scene.mode) {\n      case SceneMode.COLUMBUS_VIEW:\n        if (sscc.enableLook) {\n          break\n        }\n        if (!sscc.enableTranslate || !sscc.enableTilt) {\n          return\n        }\n        break\n      case SceneMode.SCENE3D:\n        if (sscc.enableLook) {\n          break\n        }\n        if (!sscc.enableTilt || !sscc.enableRotate) {\n          return\n        }\n        break\n      case Cesium.SceneMode.SCENE2D:\n        if (!sscc.enableTranslate) {\n          return\n        }\n        break\n    }\n    const listener = getInstanceListener(vcInstance, 'compassEvt')\n    listener &&\n      emit('compassEvt', {\n        type: 'orbit',\n        camera: scene.camera,\n        status: 'start',\n        target: compassElement\n      })\n\n    // Remove existing event handlers, if any.\n    document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n    document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n    document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n    document.removeEventListener('touchend', orbitMouseUpFunction, false)\n\n    if (defined(orbitTickFunction)) {\n      vcInstance.viewer.clock.onTick.removeEventListener(orbitTickFunction)\n    }\n\n    ;(orbitMouseMoveFunction as any) = undefined\n    ;(orbitMouseUpFunction as any) = undefined\n    ;(orbitTickFunction as any) = undefined\n\n    isOrbiting = true\n    orbitLastTimestamp = getTimestamp()\n\n    const windowPosition = new Cartesian2()\n    windowPosition.x = scene.canvas.clientWidth / 2\n    windowPosition.y = scene.canvas.clientHeight / 2\n    const pickRayScratch = new Ray()\n    const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n    const center = scene.globe.pick(ray, scene, centerScratch)\n    if (!defined(center)) {\n      orbitFrame = Transforms.eastNorthUpToFixedFrame(camera.positionWC, scene.globe.ellipsoid, newTransformScratch)\n      orbitIsLook = true\n    } else {\n      orbitFrame = Transforms.eastNorthUpToFixedFrame(center || new Cesium.Cartesian3(), scene.globe.ellipsoid, newTransformScratch)\n      orbitIsLook = false\n    }\n\n    orbitTickFunction = function (e) {\n      const timestamp = getTimestamp()\n      const deltaT = timestamp - orbitLastTimestamp\n      const rate = ((orbitCursorOpacity.value - 0.5) * 2.5) / 1000\n      const distance = deltaT * rate\n\n      const angle = orbitCursorAngle.value + CesiumMath.PI_OVER_TWO\n      const x = Math.cos(angle) * distance\n      const y = Math.sin(angle) * distance\n\n      scene = vcInstance.viewer.scene\n      camera = scene.camera\n\n      const oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n      camera.lookAtTransform(orbitFrame)\n      if (orbitIsLook) {\n        camera.look(Cartesian3.UNIT_Z, -x)\n        camera.look(camera.right, -y)\n      } else {\n        camera.rotateLeft(x)\n        camera.rotateUp(y)\n      }\n\n      camera.lookAtTransform(oldTransform)\n      orbitLastTimestamp = timestamp\n    }\n\n    function updateAngleAndOpacity(vector, compassWidth) {\n      const angle = Math.atan2(-vector.y, vector.x)\n      orbitCursorAngle.value = CesiumMath.zeroToTwoPi(angle - CesiumMath.PI_OVER_TWO)\n      const distance = Cartesian2.magnitude(vector)\n      const maxDistance = compassWidth / 2.0\n      const distanceFraction = Math.min(distance / maxDistance, 1.0)\n      const easedOpacity = 0.5 * distanceFraction * distanceFraction + 0.5\n      orbitCursorOpacity.value = easedOpacity\n    }\n\n    orbitMouseMoveFunction = function (e: Event) {\n      const compassRectangle = compassElement.getBoundingClientRect()\n      const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n      let clickLocation\n      if (e instanceof MouseEvent) {\n        clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n      } else if (e instanceof TouchEvent) {\n        clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n      }\n      const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n      updateAngleAndOpacity(vector, compassRectangle.width)\n      listener &&\n        emit('compassEvt', {\n          type: 'orbit',\n          camera: scene.camera,\n          status: 'changing',\n          target: compassElement\n        })\n    }\n\n    orbitMouseUpFunction = function (e) {\n      // TODO: if mouse didn't move, reset view to looking down, north is up?\n\n      isOrbiting = false\n      document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n      document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n      document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n      document.removeEventListener('touchend', orbitMouseUpFunction, false)\n\n      if (defined(orbitTickFunction)) {\n        vcInstance.viewer.clock.onTick.removeEventListener(orbitTickFunction)\n      }\n\n      ;(orbitMouseMoveFunction as any) = undefined\n      ;(orbitMouseUpFunction as any) = undefined\n      ;(orbitTickFunction as any) = undefined\n\n      resetRotater()\n\n      listener &&\n        emit('compassEvt', {\n          type: 'orbit',\n          camera: scene.camera,\n          status: 'end',\n          target: compassElement\n        })\n    }\n\n    document.addEventListener('mousemove', orbitMouseMoveFunction, false)\n    document.addEventListener('mouseup', orbitMouseUpFunction, false)\n    document.addEventListener('touchmove', orbitMouseMoveFunction, false)\n    document.addEventListener('touchend', orbitMouseUpFunction, false)\n    unsubscribeFromClockTick = vcInstance.viewer.clock.onTick.addEventListener(orbitTickFunction)\n    updateAngleAndOpacity(cursorVector, compassElement.getBoundingClientRect().width)\n  }\n\n  const rotate = (compassElement: HTMLElement, cursorVector: Cesium.Cartesian2) => {\n    if (!props.enableCompassOuterRing) {\n      return\n    }\n\n    const scene = vcInstance.viewer.scene\n    let camera = scene.camera\n    const sscc = scene.screenSpaceCameraController\n    // do not rotate in 2D mode or if rotating is disabled\n    if (scene.mode === Cesium.SceneMode.MORPHING || scene.mode === Cesium.SceneMode.SCENE2D || !sscc.enableInputs) {\n      return\n    }\n    if (!sscc.enableLook && (scene.mode === Cesium.SceneMode.COLUMBUS_VIEW || (scene.mode === Cesium.SceneMode.SCENE3D && !sscc.enableRotate))) {\n      return\n    }\n    // Remove existing event handlers, if any.\n    document.removeEventListener('mousemove', rotateMouseMoveFunction, false)\n    document.removeEventListener('touchmove', rotateMouseMoveFunction, false)\n    document.removeEventListener('mouseup', rotateMouseUpFunction, false)\n    document.removeEventListener('touchend', rotateMouseUpFunction, false)\n    const { Cartesian2, Cartesian3, defined, Math: CesiumMath, Matrix4, Ray, Transforms } = Cesium\n    ;(rotateMouseMoveFunction as any) = undefined\n    ;(rotateMouseUpFunction as any) = undefined\n\n    const listener = getInstanceListener(vcInstance, 'compassEvt')\n    listener &&\n      emit('compassEvt', {\n        type: 'rotate',\n        camera: scene.camera,\n        status: 'start',\n        target: compassElement\n      })\n\n    isRotating = true\n    rotateInitialCursorAngle = Math.atan2(-cursorVector.y, cursorVector.x)\n\n    const windowPosition = new Cartesian2()\n    windowPosition.x = scene.canvas.clientWidth / 2\n    windowPosition.y = scene.canvas.clientHeight / 2\n    const pickRayScratch = new Ray()\n    const ray = camera.getPickRay(windowPosition, pickRayScratch)\n\n    const viewCenter = scene.globe.pick(ray, scene, centerScratch)\n    if (!defined(viewCenter)) {\n      rotateFrame = Transforms.eastNorthUpToFixedFrame(camera.positionWC, scene.globe.ellipsoid, newTransformScratch)\n      rotateIsLook = true\n    } else {\n      rotateFrame = Transforms.eastNorthUpToFixedFrame(viewCenter || new Cartesian3(), scene.globe.ellipsoid, newTransformScratch)\n      rotateIsLook = false\n    }\n\n    let oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n    camera.lookAtTransform(rotateFrame)\n    rotateInitialCameraAngle = Math.atan2(camera.position.y, camera.position.x)\n    rotateInitialCameraDistance = Cartesian3.magnitude(new Cartesian3(camera.position.x, camera.position.y, 0.0))\n    camera.lookAtTransform(oldTransform)\n\n    rotateMouseMoveFunction = function (e: MouseEvent | TouchEvent) {\n      const compassRectangle = compassElement.getBoundingClientRect()\n      const center = new Cartesian2((compassRectangle.right - compassRectangle.left) / 2.0, (compassRectangle.bottom - compassRectangle.top) / 2.0)\n      let clickLocation\n      if (e instanceof MouseEvent) {\n        clickLocation = new Cartesian2(e.clientX - compassRectangle.left, e.clientY - compassRectangle.top)\n      } else if (e instanceof TouchEvent) {\n        clickLocation = new Cartesian2(e.changedTouches[0].clientX - compassRectangle.left, e.changedTouches[0].clientY - compassRectangle.top)\n      }\n      const vector = Cartesian2.subtract(clickLocation, center, vectorScratch)\n      const angle = Math.atan2(-vector.y, vector.x)\n\n      const angleDifference = angle - rotateInitialCursorAngle\n      const newCameraAngle = CesiumMath.zeroToTwoPi(rotateInitialCameraAngle - angleDifference)\n\n      camera = vcInstance.viewer.scene.camera\n\n      oldTransform = Matrix4.clone(camera.transform, oldTransformScratch)\n      camera.lookAtTransform(rotateFrame)\n      const currentCameraAngle = Math.atan2(camera.position.y, camera.position.x)\n      camera.rotateRight(newCameraAngle - currentCameraAngle)\n      camera.lookAtTransform(oldTransform)\n      listener &&\n        emit('compassEvt', {\n          type: 'rotate',\n          camera: scene.camera,\n          status: 'changing',\n          target: compassElement\n        })\n    }\n\n    rotateMouseUpFunction = function (e) {\n      isRotating = false\n      document.removeEventListener('mousemove', rotateMouseMoveFunction, false)\n      document.removeEventListener('touchmove', rotateMouseMoveFunction, false)\n      document.removeEventListener('mouseup', rotateMouseUpFunction, false)\n      document.removeEventListener('touchend', rotateMouseUpFunction, false)\n      ;(rotateMouseMoveFunction as any) = undefined\n      ;(rotateMouseUpFunction as any) = undefined\n\n      listener &&\n        emit('compassEvt', {\n          type: 'rotate',\n          camera: scene.camera,\n          status: 'end',\n          target: compassElement\n        })\n    }\n\n    document.addEventListener('mousemove', rotateMouseMoveFunction, false)\n    document.addEventListener('touchmove', rotateMouseMoveFunction, false)\n    document.addEventListener('mouseup', rotateMouseUpFunction, false)\n    document.addEventListener('touchend', rotateMouseUpFunction, false)\n  }\n\n  const onTooltipBeforeShow = e => {\n    if (rotateMouseMoveFunction !== undefined || orbitMouseMoveFunction !== undefined) {\n      e.cancel = true\n    }\n  }\n\n  const load = async viewer => {\n    vcInstance.viewer = viewer\n    viewerChange()\n    return true\n  }\n\n  const unload = async () => {\n    document.removeEventListener('mousemove', orbitMouseMoveFunction, false)\n    document.removeEventListener('mouseup', orbitMouseUpFunction, false)\n    document.removeEventListener('touchmove', orbitMouseMoveFunction, false)\n    document.removeEventListener('touchend', orbitMouseUpFunction, false)\n    unsubscribeFromClockTick && unsubscribeFromClockTick()\n    unsubscribeFromPostRender && unsubscribeFromPostRender()\n    return true\n  }\n\n  return {\n    heading,\n    orbitCursorAngle,\n    orbitCursorOpacity,\n    handleDoubleClick,\n    handleMouseDown,\n    resetRotater,\n    onTooltipBeforeShow,\n    viewerChange,\n    load,\n    unload,\n    iconOuterTooltipRef,\n    iconInnerTooltipRef\n  }\n}\n"],"names":[],"mappings":"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"}