{"version":3,"file":"index.mjs","sources":["../../../../../../packages/components/analyses/flood/index.ts"],"sourcesContent":["/*\n * @Author: zouyaoji@https://github.com/zouyaoji\n * @Date: 2021-12-31 10:30:21\n * @LastEditTime: 2022-08-22 20:31:30\n * @LastEditors: zouyaoji\n * @Description:\n * @FilePath: \\vue-cesium@next\\packages\\components\\analyses\\flood\\index.ts\n */\nimport { defineComponent, getCurrentInstance, PropType, ref, h, createCommentVNode, WatchStopHandle, onUnmounted, watch } from 'vue'\nimport { polygonHierarchy } from '@vue-cesium/utils/cesium-props'\nimport { VcColor, VcComponentInternalInstance, VcComponentPublicInstance, VcPolygonHierarchy, VcReadyObject } from '@vue-cesium/utils/types'\nimport { makeColor } from '@vue-cesium/utils/cesium-helpers'\nimport { VcPrimitiveClassification } from '@vue-cesium/components/primitives'\nimport { VcGeometryInstance } from '@vue-cesium/components/geometry-instance'\nimport { VcGeometryPolygon } from '@vue-cesium/components/geometries'\nimport { getInstanceListener, getVcParentInstance } from '@vue-cesium/utils/private/vm'\nimport { useCommon } from '@vue-cesium/composables'\nimport { commonEmits } from '@vue-cesium/utils/emits'\n\nconst emits = {\n  ...commonEmits,\n  stop: (evt: Cesium.ClassificationPrimitive) => true\n}\nexport default defineComponent({\n  name: 'VcAnalysisFlood',\n  props: {\n    minHeight: {\n      type: Number,\n      default: -1\n    },\n    maxHeight: {\n      type: Number,\n      default: 8888\n    },\n    speed: {\n      type: Number,\n      default: 10\n    },\n    loop: {\n      type: Boolean,\n      default: false\n    },\n    color: {\n      type: [Object, Array, String] as PropType<VcColor>,\n      default: 'rgba(40,150,200,0.6)'\n    },\n    ...polygonHierarchy\n  },\n  emits: emits,\n  setup(props: VcAnalysisFloodProps, ctx) {\n    const instance = getCurrentInstance() as VcComponentInternalInstance\n    instance.cesiumClass = 'VcAnalysisFlood'\n    instance.cesiumEvents = []\n\n    const commonState = useCommon(props, ctx, instance)\n    if (commonState === void 0) {\n      return\n    }\n\n    const { emit } = ctx\n\n    const canRender = ref(false)\n\n    const vcParent = getVcParentInstance(instance)\n    ;(vcParent.proxy as VcComponentPublicInstance).creatingPromise?.then(() => {\n      canRender.value = true\n    })\n\n    const flooding = ref(false)\n    const attributes = ref<any>(null)\n    const extrudedHeight = ref(-1)\n    const childRef = ref<Cesium.ClassificationPrimitive>(null)\n    let stoped = false\n\n    // watcch\n    let unwatchFns: Array<WatchStopHandle> = []\n    unwatchFns.push(\n      watch(\n        () => props.minHeight,\n        val => {\n          extrudedHeight.value = val\n        }\n      )\n    )\n\n    // methods\n    instance.createCesiumObject = async () => {\n      const { ColorGeometryInstanceAttribute } = Cesium\n\n      attributes.value = {\n        color: ColorGeometryInstanceAttribute.fromColor(makeColor(props.color) as Cesium.Color)\n      }\n\n      return childRef.value\n    }\n\n    instance.mount = async () => {\n      const { viewer } = commonState.$services\n      viewer.clock.onTick.addEventListener(onClockTick)\n      return true\n    }\n\n    instance.unmount = async () => {\n      const { viewer } = commonState.$services\n      viewer.clock.onTick.removeEventListener(onClockTick)\n      extrudedHeight.value = -1\n      flooding.value = false\n      return true\n    }\n\n    const onClockTick = () => {\n      if (flooding.value) {\n        if (extrudedHeight.value <= props.maxHeight) {\n          extrudedHeight.value += props.speed\n          stoped = false\n        } else {\n          const listener = getInstanceListener(instance, 'stop')\n          listener && emit('stop', childRef.value)\n          stoped = true\n          if (props.loop) {\n            extrudedHeight.value = props.minHeight\n          } else {\n            flooding.value = false\n          }\n        }\n      }\n    }\n\n    const start = (height?: number) => {\n      extrudedHeight.value = Cesium.defined(height) ? height : props.minHeight\n      flooding.value = true\n    }\n\n    const pause = () => {\n      flooding.value = !flooding.value\n      if (stoped) {\n        extrudedHeight.value = props.minHeight\n      }\n    }\n\n    const stop = () => {\n      extrudedHeight.value = -1\n      flooding.value = false\n    }\n\n    // life cycle\n    onUnmounted(() => {\n      unwatchFns.forEach(item => item())\n      unwatchFns = []\n    })\n\n    // expose public methods\n    Object.assign(instance.proxy, {\n      start,\n      pause,\n      stop,\n      getCurrentHeight: () => extrudedHeight.value\n    })\n\n    return () => {\n      if (canRender.value) {\n        const { createGuid } = Cesium\n\n        return h(\n          VcPrimitiveClassification,\n          {\n            asynchronous: false,\n            ref: childRef\n          },\n          () =>\n            h(\n              VcGeometryInstance,\n              {\n                id: createGuid(),\n                attributes: attributes.value\n              },\n              () =>\n                h(VcGeometryPolygon, {\n                  extrudedHeight: extrudedHeight.value,\n                  polygonHierarchy: props.polygonHierarchy\n                })\n            )\n        )\n      } else {\n        return createCommentVNode('v-if')\n      }\n    }\n  }\n})\n\nexport interface VcAnalysisFloodProps {\n  /**\n   * Specify the minimum elevation.\n   * Default value: -1\n   */\n  minHeight?: number\n  /**\n   * Specify the maximum elevation.\n   * Default value: 8888\n   */\n  maxHeight?: number\n  /**\n   * Specify the height to increase each frame.\n   * Default value: 10\n   */\n  speed?: number\n  /**\n   * Specify whether to restart after reaching the maximum height.\n   * Default value: false\n   */\n  loop?: boolean\n  /**\n   * Specify the VcColor of water.\n   * Default value: rgba(40,150,200,0.6)\n   */\n  color?: VcColor\n  /**\n   * Specify ths VcPolygonHierarchy of polygon.\n   */\n  polygonHierarchy: VcPolygonHierarchy\n  /**\n   * Triggers before the VcAnalysisFlood is loaded.\n   */\n  onBeforeLoad?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the VcAnalysisFlood is successfully loaded.\n   */\n  onReady?: (readyObject: VcReadyObject) => void\n  /**\n   * Triggers when the component load failed.\n   */\n  onUnready?: (e: any) => void\n  /**\n   * Triggers when the VcAnalysisFlood is destroyed.\n   */\n  onDestroyed?: (instance: VcComponentInternalInstance) => void\n  /**\n   * Triggers when the maxHeight is reached.\n   */\n  onStop?: (evt: Cesium.ClassificationPrimitive) => void\n}\n\nexport interface VcAnalysisFloodRef extends VcComponentPublicInstance<VcAnalysisFloodProps> {\n  /**\n   * Start flood analysis\n   */\n  start: (height?: number) => void\n  /**\n   * Pause flood analysis\n   */\n  pause: () => void\n  /**\n   * Stop flood analysis\n   */\n  stop: (removeLatest?: boolean) => void\n  /**\n   * Get the extrudedHeight value.\n   */\n  getCurrentHeight: () => number\n}\n"],"names":[],"mappings":"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"}