@vcmap/core 5.0.3 → 5.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. package/dist/geojson.d.ts +27 -0
  2. package/dist/index.d.ts +14 -4
  3. package/dist/index.js +9 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/classRegistry.js +2 -2
  6. package/dist/src/classRegistry.js.map +1 -1
  7. package/dist/src/featureProvider/abstractFeatureProvider.d.ts +2 -1
  8. package/dist/src/featureProvider/abstractFeatureProvider.js +2 -1
  9. package/dist/src/featureProvider/abstractFeatureProvider.js.map +1 -1
  10. package/dist/src/featureProvider/tileProviderFeatureProvider.d.ts +1 -1
  11. package/dist/src/featureProvider/tileProviderFeatureProvider.js +2 -2
  12. package/dist/src/featureProvider/tileProviderFeatureProvider.js.map +1 -1
  13. package/dist/src/featureProvider/wmsFeatureProvider.d.ts +1 -1
  14. package/dist/src/featureProvider/wmsFeatureProvider.js +4 -3
  15. package/dist/src/featureProvider/wmsFeatureProvider.js.map +1 -1
  16. package/dist/src/interaction/eventHandler.js +3 -3
  17. package/dist/src/interaction/eventHandler.js.map +1 -1
  18. package/dist/src/interaction/featureProviderInteraction.js +1 -1
  19. package/dist/src/interaction/featureProviderInteraction.js.map +1 -1
  20. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.d.ts +4 -1
  21. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.js +31 -2
  22. package/dist/src/layer/cesium/cesiumTilesetCesiumImpl.js.map +1 -1
  23. package/dist/src/layer/cesium/resourceHelper.d.ts +2 -0
  24. package/dist/src/layer/cesium/resourceHelper.js +12 -0
  25. package/dist/src/layer/cesium/resourceHelper.js.map +1 -0
  26. package/dist/src/layer/cesium/singleImageCesiumImpl.js +2 -1
  27. package/dist/src/layer/cesium/singleImageCesiumImpl.js.map +1 -1
  28. package/dist/src/layer/cesium/terrainCesiumImpl.js +1 -1
  29. package/dist/src/layer/cesium/terrainCesiumImpl.js.map +1 -1
  30. package/dist/src/layer/cesium/tmsCesiumImpl.js +2 -1
  31. package/dist/src/layer/cesium/tmsCesiumImpl.js.map +1 -1
  32. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js +1 -0
  33. package/dist/src/layer/cesium/vectorRasterTileCesiumImpl.js.map +1 -1
  34. package/dist/src/layer/cesium/vectorTileImageryProvider.d.ts +2 -0
  35. package/dist/src/layer/cesium/vectorTileImageryProvider.js +3 -1
  36. package/dist/src/layer/cesium/vectorTileImageryProvider.js.map +1 -1
  37. package/dist/src/layer/cesium/wmsCesiumImpl.js +2 -1
  38. package/dist/src/layer/cesium/wmsCesiumImpl.js.map +1 -1
  39. package/dist/src/layer/cesium/wmtsCesiumImpl.js +2 -1
  40. package/dist/src/layer/cesium/wmtsCesiumImpl.js.map +1 -1
  41. package/dist/src/layer/cesiumTilesetLayer.d.ts +5 -1
  42. package/dist/src/layer/cesiumTilesetLayer.js +17 -7
  43. package/dist/src/layer/cesiumTilesetLayer.js.map +1 -1
  44. package/dist/src/layer/czmlLayer.js +2 -1
  45. package/dist/src/layer/czmlLayer.js.map +1 -1
  46. package/dist/src/layer/featureLayer.js +2 -2
  47. package/dist/src/layer/featureLayer.js.map +1 -1
  48. package/dist/src/layer/featureStoreLayer.js +8 -5
  49. package/dist/src/layer/featureStoreLayer.js.map +1 -1
  50. package/dist/src/layer/featureStoreLayerChanges.d.ts +20 -8
  51. package/dist/src/layer/featureStoreLayerChanges.js +26 -26
  52. package/dist/src/layer/featureStoreLayerChanges.js.map +1 -1
  53. package/dist/src/layer/featureStoreLayerState.d.ts +1 -5
  54. package/dist/src/layer/featureStoreLayerState.js +0 -9
  55. package/dist/src/layer/featureStoreLayerState.js.map +1 -1
  56. package/dist/src/layer/geojsonLayer.js +3 -2
  57. package/dist/src/layer/geojsonLayer.js.map +1 -1
  58. package/dist/src/layer/layer.d.ts +15 -0
  59. package/dist/src/layer/layer.js +30 -4
  60. package/dist/src/layer/layer.js.map +1 -1
  61. package/dist/src/layer/layerImplementation.d.ts +1 -0
  62. package/dist/src/layer/layerImplementation.js +2 -0
  63. package/dist/src/layer/layerImplementation.js.map +1 -1
  64. package/dist/src/layer/oblique/vectorObliqueImpl.js +17 -7
  65. package/dist/src/layer/oblique/vectorObliqueImpl.js.map +1 -1
  66. package/dist/src/layer/openlayers/loadFunctionHelpers.d.ts +2 -0
  67. package/dist/src/layer/openlayers/loadFunctionHelpers.js +20 -0
  68. package/dist/src/layer/openlayers/loadFunctionHelpers.js.map +1 -0
  69. package/dist/src/layer/openlayers/singleImageOpenlayersImpl.js +25 -1
  70. package/dist/src/layer/openlayers/singleImageOpenlayersImpl.js.map +1 -1
  71. package/dist/src/layer/openlayers/tmsOpenlayersImpl.js +9 -1
  72. package/dist/src/layer/openlayers/tmsOpenlayersImpl.js.map +1 -1
  73. package/dist/src/layer/openlayers/vectorTileOpenlayersImpl.js +1 -1
  74. package/dist/src/layer/openlayers/vectorTileOpenlayersImpl.js.map +1 -1
  75. package/dist/src/layer/openlayers/wmsOpenlayersImpl.d.ts +4 -1
  76. package/dist/src/layer/openlayers/wmsOpenlayersImpl.js +20 -1
  77. package/dist/src/layer/openlayers/wmsOpenlayersImpl.js.map +1 -1
  78. package/dist/src/layer/openlayers/wmtsOpenlayersImpl.js +9 -1
  79. package/dist/src/layer/openlayers/wmtsOpenlayersImpl.js.map +1 -1
  80. package/dist/src/layer/pointCloudLayer.js +2 -2
  81. package/dist/src/layer/pointCloudLayer.js.map +1 -1
  82. package/dist/src/layer/terrainHelpers.d.ts +3 -3
  83. package/dist/src/layer/terrainHelpers.js +12 -7
  84. package/dist/src/layer/terrainHelpers.js.map +1 -1
  85. package/dist/src/layer/terrainLayer.js +1 -1
  86. package/dist/src/layer/terrainLayer.js.map +1 -1
  87. package/dist/src/layer/tileProvider/mvtTileProvider.d.ts +1 -1
  88. package/dist/src/layer/tileProvider/mvtTileProvider.js +4 -3
  89. package/dist/src/layer/tileProvider/mvtTileProvider.js.map +1 -1
  90. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.d.ts +1 -1
  91. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js +4 -3
  92. package/dist/src/layer/tileProvider/staticGeojsonTileProvider.js.map +1 -1
  93. package/dist/src/layer/tileProvider/tileProvider.d.ts +14 -11
  94. package/dist/src/layer/tileProvider/tileProvider.js +23 -20
  95. package/dist/src/layer/tileProvider/tileProvider.js.map +1 -1
  96. package/dist/src/layer/tileProvider/urlTemplateTileProvider.d.ts +1 -1
  97. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js +4 -3
  98. package/dist/src/layer/tileProvider/urlTemplateTileProvider.js.map +1 -1
  99. package/dist/src/layer/vectorLayer.d.ts +1 -2
  100. package/dist/src/layer/vectorLayer.js +3 -3
  101. package/dist/src/layer/vectorLayer.js.map +1 -1
  102. package/dist/src/layer/vectorProperties.d.ts +11 -16
  103. package/dist/src/layer/vectorProperties.js +16 -13
  104. package/dist/src/layer/vectorProperties.js.map +1 -1
  105. package/dist/src/layer/wfsLayer.js +9 -6
  106. package/dist/src/layer/wfsLayer.js.map +1 -1
  107. package/dist/src/layer/wmsHelpers.d.ts +10 -0
  108. package/dist/src/layer/wmsHelpers.js +53 -12
  109. package/dist/src/layer/wmsHelpers.js.map +1 -1
  110. package/dist/src/layer/wmsLayer.d.ts +6 -0
  111. package/dist/src/layer/wmsLayer.js +5 -2
  112. package/dist/src/layer/wmsLayer.js.map +1 -1
  113. package/dist/src/map/cameraLimiter.d.ts +5 -0
  114. package/dist/src/map/cameraLimiter.js +11 -4
  115. package/dist/src/map/cameraLimiter.js.map +1 -1
  116. package/dist/src/map/cesiumMap.d.ts +20 -1
  117. package/dist/src/map/cesiumMap.js +51 -2
  118. package/dist/src/map/cesiumMap.js.map +1 -1
  119. package/dist/src/map/vcsMap.js +2 -2
  120. package/dist/src/map/vcsMap.js.map +1 -1
  121. package/dist/src/oblique/helpers.d.ts +1 -1
  122. package/dist/src/oblique/helpers.js +5 -9
  123. package/dist/src/oblique/helpers.js.map +1 -1
  124. package/dist/src/oblique/obliqueCollection.d.ts +1 -0
  125. package/dist/src/oblique/obliqueCollection.js +1 -1
  126. package/dist/src/oblique/obliqueCollection.js.map +1 -1
  127. package/dist/src/oblique/obliqueDataSet.d.ts +3 -1
  128. package/dist/src/oblique/obliqueDataSet.js +13 -6
  129. package/dist/src/oblique/obliqueDataSet.js.map +1 -1
  130. package/dist/src/oblique/obliqueImageMeta.d.ts +2 -0
  131. package/dist/src/oblique/obliqueImageMeta.js +2 -0
  132. package/dist/src/oblique/obliqueImageMeta.js.map +1 -1
  133. package/dist/src/oblique/obliqueView.d.ts +1 -0
  134. package/dist/src/oblique/obliqueView.js +12 -2
  135. package/dist/src/oblique/obliqueView.js.map +1 -1
  136. package/dist/src/oblique/parseImageJson.d.ts +6 -5
  137. package/dist/src/oblique/parseImageJson.js +7 -5
  138. package/dist/src/oblique/parseImageJson.js.map +1 -1
  139. package/dist/src/ol/geom/circle.js.map +1 -1
  140. package/dist/src/style/declarativeStyleItem.js +10 -2
  141. package/dist/src/style/declarativeStyleItem.js.map +1 -1
  142. package/dist/src/style/styleFactory.js +2 -2
  143. package/dist/src/style/styleFactory.js.map +1 -1
  144. package/dist/src/style/styleHelpers.js +13 -3
  145. package/dist/src/style/styleHelpers.js.map +1 -1
  146. package/dist/src/style/vectorStyleItem.js +29 -16
  147. package/dist/src/style/vectorStyleItem.js.map +1 -1
  148. package/dist/src/util/clipping/clippingPlaneHelper.js +3 -3
  149. package/dist/src/util/clipping/clippingPlaneHelper.js.map +1 -1
  150. package/dist/src/util/editor/createFeatureSession.d.ts +2 -2
  151. package/dist/src/util/editor/createFeatureSession.js +2 -2
  152. package/dist/src/util/editor/createFeatureSession.js.map +1 -1
  153. package/dist/src/util/editor/editFeaturesSession.d.ts +2 -2
  154. package/dist/src/util/editor/editGeometrySession.d.ts +2 -2
  155. package/dist/src/util/editor/editorSessionHelpers.d.ts +2 -2
  156. package/dist/src/util/editor/selectFeaturesSession.d.ts +2 -2
  157. package/dist/src/util/editor/selectFeaturesSession.js +2 -2
  158. package/dist/src/util/editor/selectFeaturesSession.js.map +1 -1
  159. package/dist/src/util/featureconverter/arcToCesium.d.ts +1 -1
  160. package/dist/src/util/featureconverter/arcToCesium.js +5 -2
  161. package/dist/src/util/featureconverter/arcToCesium.js.map +1 -1
  162. package/dist/src/util/featureconverter/circleToCesium.d.ts +4 -2
  163. package/dist/src/util/featureconverter/circleToCesium.js +8 -3
  164. package/dist/src/util/featureconverter/circleToCesium.js.map +1 -1
  165. package/dist/src/util/featureconverter/extent3D.js.map +1 -1
  166. package/dist/src/util/featureconverter/featureconverterHelper.js +2 -2
  167. package/dist/src/util/featureconverter/featureconverterHelper.js.map +1 -1
  168. package/dist/src/util/featureconverter/lineStringToCesium.d.ts +3 -1
  169. package/dist/src/util/featureconverter/lineStringToCesium.js +7 -2
  170. package/dist/src/util/featureconverter/lineStringToCesium.js.map +1 -1
  171. package/dist/src/util/featureconverter/pointToCesium.js +1 -1
  172. package/dist/src/util/featureconverter/pointToCesium.js.map +1 -1
  173. package/dist/src/util/featureconverter/polygonToCesium.d.ts +3 -3
  174. package/dist/src/util/featureconverter/polygonToCesium.js +9 -15
  175. package/dist/src/util/featureconverter/polygonToCesium.js.map +1 -1
  176. package/dist/src/util/fetch.d.ts +2 -0
  177. package/dist/src/util/fetch.js +16 -0
  178. package/dist/src/util/fetch.js.map +1 -1
  179. package/dist/src/util/flight/flightAnchor.d.ts +23 -0
  180. package/dist/src/util/flight/flightAnchor.js +152 -0
  181. package/dist/src/util/flight/flightAnchor.js.map +1 -0
  182. package/dist/src/util/flight/flightCollection.d.ts +25 -0
  183. package/dist/src/util/flight/flightCollection.js +63 -0
  184. package/dist/src/util/flight/flightCollection.js.map +1 -0
  185. package/dist/src/util/flight/flightHelpers.d.ts +29 -0
  186. package/dist/src/util/flight/flightHelpers.js +134 -0
  187. package/dist/src/util/flight/flightHelpers.js.map +1 -0
  188. package/dist/src/util/flight/flightInstance.d.ts +57 -0
  189. package/dist/src/util/flight/flightInstance.js +166 -0
  190. package/dist/src/util/flight/flightInstance.js.map +1 -0
  191. package/dist/src/util/flight/flightPlayer.d.ts +30 -0
  192. package/dist/src/util/flight/flightPlayer.js +247 -0
  193. package/dist/src/util/flight/flightPlayer.js.map +1 -0
  194. package/dist/src/util/flight/flightVisualizer.d.ts +18 -0
  195. package/dist/src/util/flight/flightVisualizer.js +151 -0
  196. package/dist/src/util/flight/flightVisualizer.js.map +1 -0
  197. package/dist/src/util/hiddenObjects.d.ts +8 -0
  198. package/dist/src/util/hiddenObjects.js +17 -0
  199. package/dist/src/util/hiddenObjects.js.map +1 -0
  200. package/dist/src/util/mapCollection.js +2 -2
  201. package/dist/src/util/mapCollection.js.map +1 -1
  202. package/dist/src/util/overrideCollection.d.ts +8 -3
  203. package/dist/src/util/overrideCollection.js +17 -0
  204. package/dist/src/util/overrideCollection.js.map +1 -1
  205. package/dist/src/util/projection.js +5 -2
  206. package/dist/src/util/projection.js.map +1 -1
  207. package/dist/src/util/viewpoint.d.ts +1 -0
  208. package/dist/src/util/viewpoint.js +24 -7
  209. package/dist/src/util/viewpoint.js.map +1 -1
  210. package/dist/src/vcsApp.d.ts +10 -3
  211. package/dist/src/vcsApp.js +34 -15
  212. package/dist/src/vcsApp.js.map +1 -1
  213. package/dist/src/vcsModule.d.ts +4 -0
  214. package/dist/src/vcsModule.js.map +1 -1
  215. package/dist/tests/unit/helpers/cesiumHelpers.d.ts +2 -2
  216. package/dist/tests/unit/helpers/cesiumHelpers.js +2 -1
  217. package/dist/tests/unit/helpers/cesiumHelpers.js.map +1 -1
  218. package/dist/tests/unit/helpers/terrain/terrainData.d.ts +7 -0
  219. package/dist/tests/unit/helpers/terrain/terrainData.js +2 -2
  220. package/dist/tests/unit/helpers/terrain/terrainData.js.map +1 -1
  221. package/index.ts +39 -1
  222. package/package.json +3 -2
  223. package/src/classRegistry.ts +2 -2
  224. package/src/featureProvider/abstractFeatureProvider.ts +2 -0
  225. package/src/featureProvider/tileProviderFeatureProvider.ts +2 -0
  226. package/src/featureProvider/wmsFeatureProvider.ts +4 -2
  227. package/src/interaction/eventHandler.ts +3 -3
  228. package/src/interaction/featureProviderInteraction.ts +1 -0
  229. package/src/layer/cesium/cesiumTilesetCesiumImpl.ts +44 -5
  230. package/src/layer/cesium/resourceHelper.ts +15 -0
  231. package/src/layer/cesium/singleImageCesiumImpl.ts +2 -1
  232. package/src/layer/cesium/terrainCesiumImpl.ts +2 -1
  233. package/src/layer/cesium/tmsCesiumImpl.ts +2 -1
  234. package/src/layer/cesium/vectorRasterTileCesiumImpl.ts +1 -0
  235. package/src/layer/cesium/vectorTileImageryProvider.ts +10 -1
  236. package/src/layer/cesium/wmsCesiumImpl.ts +2 -1
  237. package/src/layer/cesium/wmtsCesiumImpl.ts +4 -2
  238. package/src/layer/cesiumTilesetLayer.ts +25 -7
  239. package/src/layer/czmlLayer.ts +2 -1
  240. package/src/layer/featureLayer.ts +2 -2
  241. package/src/layer/featureStoreLayer.ts +8 -8
  242. package/src/layer/featureStoreLayerChanges.ts +63 -45
  243. package/src/layer/featureStoreLayerState.ts +6 -5
  244. package/src/layer/geojsonLayer.ts +3 -3
  245. package/src/layer/layer.ts +41 -4
  246. package/src/layer/layerImplementation.ts +3 -0
  247. package/src/layer/oblique/vectorObliqueImpl.ts +18 -12
  248. package/src/layer/openlayers/loadFunctionHelpers.ts +24 -0
  249. package/src/layer/openlayers/singleImageOpenlayersImpl.ts +25 -1
  250. package/src/layer/openlayers/tmsOpenlayersImpl.ts +8 -1
  251. package/src/layer/openlayers/vectorTileOpenlayersImpl.ts +1 -0
  252. package/src/layer/openlayers/wmsOpenlayersImpl.ts +23 -2
  253. package/src/layer/openlayers/wmtsOpenlayersImpl.ts +8 -1
  254. package/src/layer/pointCloudLayer.ts +2 -2
  255. package/src/layer/terrainHelpers.ts +19 -6
  256. package/src/layer/terrainLayer.ts +8 -4
  257. package/src/layer/tileProvider/mvtTileProvider.ts +9 -3
  258. package/src/layer/tileProvider/staticGeojsonTileProvider.ts +9 -3
  259. package/src/layer/tileProvider/tileProvider.ts +49 -13
  260. package/src/layer/tileProvider/urlTemplateTileProvider.ts +10 -3
  261. package/src/layer/vectorLayer.ts +9 -9
  262. package/src/layer/vectorProperties.ts +46 -22
  263. package/src/layer/wfsLayer.ts +9 -6
  264. package/src/layer/wmsHelpers.ts +78 -10
  265. package/src/layer/wmsLayer.ts +11 -2
  266. package/src/map/cameraLimiter.ts +21 -2
  267. package/src/map/cesiumMap.ts +67 -2
  268. package/src/map/vcsMap.ts +2 -2
  269. package/src/oblique/helpers.ts +5 -13
  270. package/src/oblique/obliqueCollection.ts +2 -0
  271. package/src/oblique/obliqueDataSet.ts +16 -2
  272. package/src/oblique/obliqueImageMeta.ts +4 -0
  273. package/src/oblique/obliqueView.ts +12 -2
  274. package/src/oblique/parseImageJson.ts +7 -4
  275. package/src/ol/geojson.d.ts +1 -2
  276. package/src/ol/geom/circle.ts +1 -1
  277. package/src/style/declarativeStyleItem.ts +10 -2
  278. package/src/style/styleFactory.ts +2 -2
  279. package/src/style/styleHelpers.ts +13 -4
  280. package/src/style/vectorStyleItem.ts +32 -20
  281. package/src/util/clipping/clippingPlaneHelper.ts +3 -3
  282. package/src/util/editor/createFeatureSession.ts +9 -8
  283. package/src/util/editor/editFeaturesSession.ts +1 -1
  284. package/src/util/editor/editGeometrySession.ts +1 -1
  285. package/src/util/editor/editorSessionHelpers.ts +2 -2
  286. package/src/util/editor/selectFeaturesSession.ts +3 -3
  287. package/src/util/featureconverter/arcToCesium.ts +5 -1
  288. package/src/util/featureconverter/circleToCesium.ts +8 -2
  289. package/src/util/featureconverter/extent3D.ts +1 -1
  290. package/src/util/featureconverter/featureconverterHelper.ts +3 -5
  291. package/src/util/featureconverter/lineStringToCesium.ts +8 -1
  292. package/src/util/featureconverter/pointToCesium.ts +1 -1
  293. package/src/util/featureconverter/polygonToCesium.ts +6 -15
  294. package/src/util/fetch.ts +25 -0
  295. package/src/util/flight/flightAnchor.ts +195 -0
  296. package/src/util/flight/flightCollection.ts +78 -0
  297. package/src/util/flight/flightHelpers.ts +208 -0
  298. package/src/util/flight/flightInstance.ts +240 -0
  299. package/src/util/flight/flightPlayer.ts +326 -0
  300. package/src/util/flight/flightVisualizer.ts +202 -0
  301. package/src/util/hiddenObjects.ts +35 -0
  302. package/src/util/mapCollection.ts +2 -2
  303. package/src/util/overrideCollection.ts +26 -3
  304. package/src/util/projection.ts +5 -2
  305. package/src/util/viewpoint.ts +27 -7
  306. package/src/vcsApp.ts +56 -15
  307. package/src/vcsModule.ts +4 -0
@@ -0,0 +1,29 @@
1
+ import { CatmullRomSpline, LinearSpline, QuaternionSpline } from '@vcmap-cesium/engine';
2
+ import type { FeatureCollection, Point as GeojsonPoint, LineString as GeojsonLineString } from 'geojson';
3
+ import type { Coordinate } from 'ol/coordinate.js';
4
+ import type { default as FlightInstance, FlightInstanceOptions } from './flightInstance.js';
5
+ import { FlightAnchorGeojsonFeature } from './flightAnchor.js';
6
+ /**
7
+ * exports a flight as GeoJson FeatureCollection
8
+ * {Object} vcsMeta.flightOptions: flight settings
9
+ * {Array} feature: viewpoints
10
+ *
11
+ * @param flightInstance
12
+ */
13
+ export declare function exportFlightAsGeoJson(flightInstance: FlightInstance): FeatureCollection<GeojsonPoint>;
14
+ export declare function getSplineAndTimesForInstance(flightInstance: FlightInstance): {
15
+ destinationSpline: CatmullRomSpline | LinearSpline;
16
+ quaternionSpline: QuaternionSpline;
17
+ times: number[];
18
+ };
19
+ export declare function getFlightPathCoordinatesFromInstance(flightInstance: FlightInstance): Coordinate[];
20
+ export declare function exportFlightPathAsGeoJson(flightInstance: FlightInstance): FeatureCollection<GeojsonLineString>;
21
+ /**
22
+ * parses source and creates a flight Object
23
+ * @param {Object} collection GeoJSON
24
+ * containing:
25
+ * {Object} vcsMeta containing flightOptions
26
+ * {Array} features anchors of flightInstance
27
+ * @returns
28
+ */
29
+ export declare function parseFlightOptionsFromGeoJson(collection: FeatureCollection<GeojsonPoint, FlightAnchorGeojsonFeature['properties']>): FlightInstanceOptions;
@@ -0,0 +1,134 @@
1
+ import { HeadingPitchRoll, Cartesian3, Quaternion, CatmullRomSpline, LinearSpline, QuaternionSpline, Cartographic, Math as CesiumMath, } from '@vcmap-cesium/engine';
2
+ import { vcsMetaVersion } from '../../layer/vectorProperties.js';
3
+ /**
4
+ * exports a flight as GeoJson FeatureCollection
5
+ * {Object} vcsMeta.flightOptions: flight settings
6
+ * {Array} feature: viewpoints
7
+ *
8
+ * @param flightInstance
9
+ */
10
+ export function exportFlightAsGeoJson(flightInstance) {
11
+ const options = flightInstance.toJSON();
12
+ const flightOptions = {};
13
+ if (options.loop != null) {
14
+ flightOptions.loop = options.loop;
15
+ }
16
+ if (options.interpolation != null) {
17
+ flightOptions.interpolation = options.interpolation;
18
+ }
19
+ if (options.multiplier != null) {
20
+ flightOptions.multiplier = options.multiplier;
21
+ }
22
+ return {
23
+ type: 'FeatureCollection',
24
+ features: options.anchors ?? [],
25
+ vcsMeta: {
26
+ version: vcsMetaVersion,
27
+ flightOptions: options,
28
+ },
29
+ };
30
+ }
31
+ export function getSplineAndTimesForInstance(flightInstance) {
32
+ const { loop, anchors } = flightInstance;
33
+ const anchorsArray = [...anchors];
34
+ const length = loop ? anchors.size + 1 : anchors.size;
35
+ const points = new Array(length);
36
+ const quaternions = new Array(length);
37
+ const times = new Array(length);
38
+ anchorsArray.forEach((anchor, index) => {
39
+ points[index] = Cartesian3.fromDegrees(anchor.coordinate[0], anchor.coordinate[1], anchor.coordinate[2]);
40
+ quaternions[index] = Quaternion.fromHeadingPitchRoll(HeadingPitchRoll.fromDegrees(anchor.heading, anchor.pitch, anchor.roll));
41
+ if (index > 0) {
42
+ let previousDuration = anchorsArray[index - 1].duration;
43
+ if (!previousDuration) {
44
+ previousDuration =
45
+ Cartesian3.distance(points[index - 1], points[index]) / 300 || 1;
46
+ }
47
+ times[index] = times[index - 1] + previousDuration;
48
+ }
49
+ else {
50
+ times[index] = 0;
51
+ }
52
+ });
53
+ if (loop) {
54
+ points[length - 1] = Cartesian3.fromDegrees(anchorsArray[0].coordinate[0], anchorsArray[0].coordinate[1], anchorsArray[0].coordinate[2]);
55
+ quaternions[length - 1] = Quaternion.fromHeadingPitchRoll(HeadingPitchRoll.fromDegrees(anchorsArray[0].heading, anchorsArray[0].pitch, anchorsArray[0].roll));
56
+ let loopDuration = anchorsArray[length - 2].duration;
57
+ if (!loopDuration) {
58
+ loopDuration =
59
+ Cartesian3.distance(points[length - 2], points[length - 1]) / 300 || 1;
60
+ }
61
+ times[length - 1] = times[length - 2] + loopDuration;
62
+ }
63
+ const destinationSpline = flightInstance.interpolation === 'spline'
64
+ ? new CatmullRomSpline({ times, points })
65
+ : new LinearSpline({ times, points });
66
+ const quaternionSpline = new QuaternionSpline({ times, points: quaternions });
67
+ return {
68
+ destinationSpline,
69
+ quaternionSpline,
70
+ times,
71
+ };
72
+ }
73
+ export function getFlightPathCoordinatesFromInstance(flightInstance) {
74
+ const pathCoordinates = [];
75
+ if (flightInstance.interpolation === 'spline') {
76
+ const { destinationSpline, times } = getSplineAndTimesForInstance(flightInstance);
77
+ const scratchCartographic = new Cartographic();
78
+ const addCoordinateFromTime = (time) => {
79
+ Cartographic.fromCartesian(destinationSpline.evaluate(time), undefined, scratchCartographic);
80
+ pathCoordinates.push([
81
+ CesiumMath.toDegrees(scratchCartographic.longitude),
82
+ CesiumMath.toDegrees(scratchCartographic.latitude),
83
+ scratchCartographic.height,
84
+ ]);
85
+ };
86
+ const endTime = times[times.length - 1];
87
+ const step = endTime / 0.2 > 500 ? endTime / 500 : 0.2;
88
+ for (let i = 0; i < endTime; i += step) {
89
+ addCoordinateFromTime(i);
90
+ }
91
+ addCoordinateFromTime(endTime);
92
+ }
93
+ else {
94
+ for (const anchor of flightInstance.anchors) {
95
+ pathCoordinates.push(anchor.coordinate);
96
+ }
97
+ if (flightInstance.loop) {
98
+ pathCoordinates.push(pathCoordinates[0]);
99
+ }
100
+ }
101
+ return pathCoordinates;
102
+ }
103
+ export function exportFlightPathAsGeoJson(flightInstance) {
104
+ const coordinates = getFlightPathCoordinatesFromInstance(flightInstance);
105
+ return {
106
+ type: 'FeatureCollection',
107
+ features: [
108
+ {
109
+ type: 'Feature',
110
+ geometry: {
111
+ type: 'LineString',
112
+ coordinates,
113
+ },
114
+ properties: {},
115
+ },
116
+ ],
117
+ };
118
+ }
119
+ /**
120
+ * parses source and creates a flight Object
121
+ * @param {Object} collection GeoJSON
122
+ * containing:
123
+ * {Object} vcsMeta containing flightOptions
124
+ * {Array} features anchors of flightInstance
125
+ * @returns
126
+ */
127
+ export function parseFlightOptionsFromGeoJson(collection) {
128
+ const flightOptions = collection.vcsMeta && collection.vcsMeta.flightOptions
129
+ ? collection.vcsMeta.flightOptions
130
+ : {};
131
+ flightOptions.anchors = collection.features;
132
+ return flightOptions;
133
+ }
134
+ //# sourceMappingURL=flightHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flightHelpers.js","sourceRoot":"","sources":["../../../../src/util/flight/flightHelpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import VcsObject, { VcsObjectOptions } from '../../vcsObject.js';
2
+ import VcsEvent from '../../vcsEvent.js';
3
+ import { FlightAnchor, FlightAnchorGeojsonFeature } from './flightAnchor.js';
4
+ import IndexedCollection from '../indexedCollection.js';
5
+ export type FlightInterpolation = 'spline' | 'linear';
6
+ export type FlightInstanceMeta = VcsObjectOptions & {
7
+ multiplier?: number;
8
+ interpolation?: FlightInterpolation;
9
+ loop?: boolean;
10
+ };
11
+ export type FlightInstanceOptions = FlightInstanceMeta & {
12
+ anchors?: FlightAnchorGeojsonFeature[];
13
+ url?: string;
14
+ };
15
+ declare class FlightInstance extends VcsObject {
16
+ static get className(): string;
17
+ anchors: IndexedCollection<FlightAnchor>;
18
+ private _multiplier;
19
+ private _loop;
20
+ private _interpolation;
21
+ /**
22
+ * Raised when anchors are added, removed, moved or changed
23
+ */
24
+ anchorsChanged: VcsEvent<void>;
25
+ /**
26
+ * Raised when multiplier, loop or interpolation changes.
27
+ */
28
+ propertyChanged: VcsEvent<"multiplier" | "loop" | "interpolation">;
29
+ private readonly _url;
30
+ private _readyPromise;
31
+ private _anchorListeners;
32
+ static getDefaultOptions(): FlightInstanceOptions;
33
+ constructor(options: FlightInstanceOptions);
34
+ get initialized(): boolean;
35
+ get multiplier(): number;
36
+ set multiplier(value: number);
37
+ /**
38
+ * Whether this flight represents a circular flight path or not
39
+ */
40
+ get loop(): boolean;
41
+ set loop(value: boolean);
42
+ get interpolation(): FlightInterpolation;
43
+ set interpolation(value: FlightInterpolation);
44
+ initialize(): Promise<void>;
45
+ /**
46
+ * checks if this flightInstance is valid. To be valid, a flight must have at least 2 anchors.
47
+ * @returns
48
+ */
49
+ isValid(): boolean;
50
+ /**
51
+ * returns an options object for this flight. if this flight was configured via an URL, only the url will be configured.
52
+ * @returns
53
+ */
54
+ toJSON(): FlightInstanceOptions;
55
+ destroy(): void;
56
+ }
57
+ export default FlightInstance;
@@ -0,0 +1,166 @@
1
+ import { parseBoolean, parseNumber } from '@vcsuite/parsers';
2
+ import { check, oneOf } from '@vcsuite/check';
3
+ import VcsObject from '../../vcsObject.js';
4
+ import VcsEvent from '../../vcsEvent.js';
5
+ import { parseFlightOptionsFromGeoJson } from './flightHelpers.js';
6
+ import { requestJson } from '../fetch.js';
7
+ import { anchorFromGeojsonFeature, anchorToGeojsonFeature, } from './flightAnchor.js';
8
+ import IndexedCollection from '../indexedCollection.js';
9
+ import { destroyCollection } from '../../vcsModuleHelpers.js';
10
+ class FlightInstance extends VcsObject {
11
+ static get className() {
12
+ return 'FlightInstance';
13
+ }
14
+ anchors;
15
+ _multiplier;
16
+ _loop;
17
+ _interpolation;
18
+ /**
19
+ * Raised when anchors are added, removed, moved or changed
20
+ */
21
+ anchorsChanged = new VcsEvent();
22
+ /**
23
+ * Raised when multiplier, loop or interpolation changes.
24
+ */
25
+ propertyChanged = new VcsEvent();
26
+ _url;
27
+ _readyPromise = null;
28
+ _anchorListeners = new Map();
29
+ static getDefaultOptions() {
30
+ return {
31
+ multiplier: 1,
32
+ loop: false,
33
+ interpolation: 'spline',
34
+ anchors: [],
35
+ };
36
+ }
37
+ constructor(options) {
38
+ super(options);
39
+ const defaultOptions = FlightInstance.getDefaultOptions();
40
+ const anchorsArray = (options.anchors ?? defaultOptions.anchors)
41
+ .map(anchorFromGeojsonFeature)
42
+ .filter((a) => !!a);
43
+ this.anchors = IndexedCollection.from(anchorsArray);
44
+ this._multiplier = parseNumber(options.multiplier, defaultOptions.multiplier);
45
+ this._loop = parseBoolean(options.loop, defaultOptions.loop);
46
+ this._interpolation =
47
+ options.interpolation || defaultOptions.interpolation;
48
+ this.anchorsChanged = new VcsEvent();
49
+ this._url = options.url;
50
+ }
51
+ get initialized() {
52
+ return !!this._readyPromise;
53
+ }
54
+ get multiplier() {
55
+ return this._multiplier;
56
+ }
57
+ set multiplier(value) {
58
+ check(value, Number);
59
+ if (this._multiplier !== value) {
60
+ this._multiplier = value;
61
+ this.propertyChanged.raiseEvent('multiplier');
62
+ }
63
+ }
64
+ /**
65
+ * Whether this flight represents a circular flight path or not
66
+ */
67
+ get loop() {
68
+ return this._loop;
69
+ }
70
+ set loop(value) {
71
+ check(value, Boolean);
72
+ if (this._loop !== value) {
73
+ this._loop = value;
74
+ this.propertyChanged.raiseEvent('loop');
75
+ }
76
+ }
77
+ get interpolation() {
78
+ return this._interpolation;
79
+ }
80
+ set interpolation(value) {
81
+ check(value, oneOf('linear', 'spline'));
82
+ if (this._interpolation !== value) {
83
+ this._interpolation = value;
84
+ this.propertyChanged.raiseEvent('interpolation');
85
+ }
86
+ }
87
+ initialize() {
88
+ if (!this._readyPromise) {
89
+ if (this._url) {
90
+ this._readyPromise = requestJson(this._url).then((collection) => {
91
+ const instance = parseFlightOptionsFromGeoJson(collection);
92
+ (instance.anchors ?? [])
93
+ .map(anchorFromGeojsonFeature)
94
+ .filter((a) => !!a)
95
+ .forEach((anchor) => this.anchors.add(anchor));
96
+ this._multiplier = instance.multiplier ?? this._multiplier;
97
+ this._loop = instance.loop ?? this._loop;
98
+ this._interpolation = instance.interpolation ?? this._interpolation;
99
+ });
100
+ }
101
+ else {
102
+ this._readyPromise = Promise.resolve();
103
+ }
104
+ for (const anchor of this.anchors) {
105
+ this._anchorListeners.set(anchor.name, anchor.changed.addEventListener(() => {
106
+ this.anchorsChanged.raiseEvent();
107
+ }));
108
+ }
109
+ this.anchors.added.addEventListener((anchor) => {
110
+ this._anchorListeners.set(anchor.name, anchor.changed.addEventListener(() => {
111
+ this.anchorsChanged.raiseEvent();
112
+ }));
113
+ this.anchorsChanged.raiseEvent();
114
+ });
115
+ this.anchors.removed.addEventListener((anchor) => {
116
+ this._anchorListeners.get(anchor.name)?.();
117
+ this._anchorListeners.delete(anchor.name);
118
+ this.anchorsChanged.raiseEvent();
119
+ });
120
+ this.anchors.moved.addEventListener(() => {
121
+ this.anchorsChanged.raiseEvent();
122
+ });
123
+ }
124
+ return this._readyPromise;
125
+ }
126
+ /**
127
+ * checks if this flightInstance is valid. To be valid, a flight must have at least 2 anchors.
128
+ * @returns
129
+ */
130
+ isValid() {
131
+ return this.anchors.size >= 2;
132
+ }
133
+ /**
134
+ * returns an options object for this flight. if this flight was configured via an URL, only the url will be configured.
135
+ * @returns
136
+ */
137
+ toJSON() {
138
+ const config = super.toJSON();
139
+ if (this._url) {
140
+ config.url = this._url;
141
+ return config;
142
+ }
143
+ const defaultOptions = FlightInstance.getDefaultOptions();
144
+ if (this._multiplier !== defaultOptions.multiplier) {
145
+ config.multiplier = this._multiplier;
146
+ }
147
+ if (this._loop !== defaultOptions.loop) {
148
+ config.loop = this._loop;
149
+ }
150
+ if (this._interpolation !== defaultOptions.interpolation) {
151
+ config.interpolation = this._interpolation;
152
+ }
153
+ if (this.anchors.size > 0) {
154
+ config.anchors = [...this.anchors].map(anchorToGeojsonFeature);
155
+ }
156
+ return config;
157
+ }
158
+ destroy() {
159
+ this.anchorsChanged.destroy();
160
+ destroyCollection(this.anchors);
161
+ this._anchorListeners.clear();
162
+ super.destroy();
163
+ }
164
+ }
165
+ export default FlightInstance;
166
+ //# sourceMappingURL=flightInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flightInstance.js","sourceRoot":"","sources":["../../../../src/util/flight/flightInstance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import FlightInstance from './flightInstance.js';
2
+ import VcsEvent from '../../vcsEvent.js';
3
+ import VcsApp from '../../vcsApp.js';
4
+ export type FlightPlayerClock = {
5
+ startTime: number;
6
+ endTime: number;
7
+ currentTime: number;
8
+ times: number[];
9
+ currentSystemTime?: number;
10
+ };
11
+ export type FlightPlayerState = 'playing' | 'paused' | 'stopped';
12
+ export type FlightPlayer = {
13
+ readonly flightInstanceName: string;
14
+ readonly state: FlightPlayerState;
15
+ readonly stateChanged: VcsEvent<FlightPlayerState>;
16
+ readonly destroyed: VcsEvent<void>;
17
+ clock: FlightPlayerClock;
18
+ play(): void;
19
+ stop(): void;
20
+ pause(): void;
21
+ /**
22
+ * jumps to the given time
23
+ * @param time time in seconds
24
+ */
25
+ goToTime(time: number): void;
26
+ forward(): void;
27
+ backward(): void;
28
+ destroy(): void;
29
+ };
30
+ export declare function createFlightPlayer(instance: FlightInstance, app: VcsApp): Promise<FlightPlayer>;
@@ -0,0 +1,247 @@
1
+ import { HeadingPitchRoll, } from '@vcmap-cesium/engine';
2
+ import { getLogger } from '@vcsuite/logger';
3
+ import { check } from '@vcsuite/check';
4
+ import CesiumMap from '../../map/cesiumMap.js';
5
+ import { getSplineAndTimesForInstance } from './flightHelpers.js';
6
+ import FlightInstance from './flightInstance.js';
7
+ import VcsEvent from '../../vcsEvent.js';
8
+ import VcsApp from '../../vcsApp.js';
9
+ function getDefaultFlightPlayerClock() {
10
+ return {
11
+ startTime: 0,
12
+ endTime: 0,
13
+ currentTime: 0,
14
+ times: [],
15
+ };
16
+ }
17
+ export async function createFlightPlayer(instance, app) {
18
+ check(instance, FlightInstance);
19
+ check(app, VcsApp);
20
+ let cesiumMap = app.maps.activeMap instanceof CesiumMap
21
+ ? app.maps.activeMap
22
+ : app.maps.getByType(CesiumMap.className)[0];
23
+ if (!cesiumMap) {
24
+ throw new Error('Cannot start a flight player without a cesium map');
25
+ }
26
+ await instance.initialize();
27
+ const clock = getDefaultFlightPlayerClock();
28
+ let playerState = 'stopped';
29
+ const stateChanged = new VcsEvent();
30
+ const setState = (state) => {
31
+ playerState = state;
32
+ stateChanged.raiseEvent(playerState);
33
+ };
34
+ let destinationSpline;
35
+ let quaternionSpline;
36
+ let postRenderListener;
37
+ let backedBeforeTimeout;
38
+ let screenSpaceCameraController;
39
+ const stop = () => {
40
+ if (playerState !== 'stopped') {
41
+ if (postRenderListener) {
42
+ postRenderListener();
43
+ postRenderListener = undefined;
44
+ }
45
+ if (screenSpaceCameraController) {
46
+ screenSpaceCameraController.enableInputs = true;
47
+ }
48
+ setState('stopped');
49
+ clock.currentTime = 0;
50
+ clock.currentSystemTime = undefined;
51
+ }
52
+ };
53
+ const updateSplines = () => {
54
+ if (!instance.isValid()) {
55
+ stop();
56
+ Object.assign(clock, getDefaultFlightPlayerClock());
57
+ }
58
+ else {
59
+ const splines = getSplineAndTimesForInstance(instance);
60
+ ({ destinationSpline, quaternionSpline } = splines);
61
+ const { times } = splines;
62
+ clock.endTime = times[times.length - 1];
63
+ clock.times = times;
64
+ }
65
+ };
66
+ updateSplines();
67
+ const listeners = [
68
+ instance.anchorsChanged.addEventListener(updateSplines),
69
+ instance.propertyChanged.addEventListener((property) => {
70
+ if (property === 'interpolation' || property === 'loop') {
71
+ updateSplines();
72
+ }
73
+ }),
74
+ app.maps.mapActivated.addEventListener(() => {
75
+ stop();
76
+ if (app.maps.activeMap instanceof CesiumMap) {
77
+ cesiumMap = app.maps.activeMap;
78
+ }
79
+ }),
80
+ ];
81
+ const cesiumPostRender = (scene) => {
82
+ const time = Date.now() / 1000;
83
+ if (!clock.currentSystemTime) {
84
+ clock.currentSystemTime = time;
85
+ }
86
+ const seconds = time - clock.currentSystemTime;
87
+ clock.currentSystemTime = time;
88
+ if (playerState === 'paused') {
89
+ if (screenSpaceCameraController) {
90
+ screenSpaceCameraController.enableInputs = true;
91
+ }
92
+ return;
93
+ }
94
+ clock.currentTime += seconds * instance.multiplier;
95
+ if (clock.currentTime > clock.endTime) {
96
+ if (instance.loop && clock.endTime > 0) {
97
+ while (clock.currentTime > clock.endTime) {
98
+ clock.currentTime -= clock.endTime;
99
+ }
100
+ }
101
+ else {
102
+ stop();
103
+ }
104
+ }
105
+ else if (clock.currentTime < clock.startTime) {
106
+ if (instance.loop) {
107
+ clock.currentTime = clock.endTime + clock.currentTime;
108
+ }
109
+ else {
110
+ clock.currentTime = clock.startTime;
111
+ return;
112
+ }
113
+ }
114
+ const view = {
115
+ destination: destinationSpline.evaluate(clock.currentTime),
116
+ orientation: HeadingPitchRoll.fromQuaternion(quaternionSpline.evaluate(clock.currentTime)),
117
+ };
118
+ scene.camera.setView(view);
119
+ if (playerState === 'playing') {
120
+ if (screenSpaceCameraController) {
121
+ screenSpaceCameraController.enableInputs = false;
122
+ }
123
+ }
124
+ };
125
+ const play = () => {
126
+ if (playerState === 'playing') {
127
+ return;
128
+ }
129
+ if (!(app.maps.activeMap instanceof CesiumMap)) {
130
+ getLogger('FlightPlayer').warning('cannot play without a cesium map active');
131
+ return;
132
+ }
133
+ if (playerState === 'paused') {
134
+ setState('playing');
135
+ return;
136
+ }
137
+ if (postRenderListener) {
138
+ postRenderListener();
139
+ postRenderListener = undefined;
140
+ }
141
+ const scene = cesiumMap.getScene();
142
+ if (!scene) {
143
+ return;
144
+ }
145
+ ({ screenSpaceCameraController } = scene);
146
+ postRenderListener = scene.postRender.addEventListener(cesiumPostRender);
147
+ clock.currentSystemTime = undefined;
148
+ setState('playing');
149
+ };
150
+ const goToTime = (time) => {
151
+ if (time > clock.endTime) {
152
+ getLogger('FlightPlayer').warning(`time: ${time} out of range`);
153
+ return;
154
+ }
155
+ clock.currentTime = time;
156
+ clock.currentSystemTime = undefined;
157
+ if (playerState !== 'playing') {
158
+ const view = {
159
+ destination: destinationSpline.evaluate(clock.currentTime),
160
+ orientation: HeadingPitchRoll.fromQuaternion(quaternionSpline.evaluate(clock.currentTime)),
161
+ };
162
+ cesiumMap.getScene()?.camera.setView(view);
163
+ }
164
+ };
165
+ const destroyed = new VcsEvent();
166
+ const destroy = () => {
167
+ if (postRenderListener) {
168
+ postRenderListener();
169
+ postRenderListener = undefined;
170
+ }
171
+ if (screenSpaceCameraController) {
172
+ screenSpaceCameraController.enableInputs = true;
173
+ screenSpaceCameraController = undefined;
174
+ }
175
+ if (backedBeforeTimeout != null) {
176
+ clearTimeout(backedBeforeTimeout);
177
+ }
178
+ listeners.forEach((cb) => {
179
+ cb();
180
+ });
181
+ stateChanged.destroy();
182
+ destroyed.raiseEvent();
183
+ destroyed.destroy();
184
+ };
185
+ listeners.push(app.flights.removed.addEventListener((flight) => {
186
+ if (flight === instance) {
187
+ destroy();
188
+ }
189
+ }), app.flights.added.addEventListener((flight) => {
190
+ if (flight.name === instance.name) {
191
+ destroy();
192
+ }
193
+ }));
194
+ return {
195
+ clock,
196
+ get flightInstanceName() {
197
+ return instance.name;
198
+ },
199
+ get state() {
200
+ return playerState;
201
+ },
202
+ get stateChanged() {
203
+ return stateChanged;
204
+ },
205
+ get destroyed() {
206
+ return destroyed;
207
+ },
208
+ play,
209
+ stop,
210
+ pause() {
211
+ if (playerState === 'playing') {
212
+ setState('paused');
213
+ }
214
+ },
215
+ goToTime,
216
+ /**
217
+ * forwards the currentTime to the next anchor
218
+ */
219
+ forward() {
220
+ const seconds = clock.currentTime;
221
+ const newTime = clock.times.find((t) => t > seconds) ||
222
+ clock.times[clock.times.length - 1];
223
+ goToTime(newTime);
224
+ },
225
+ /**
226
+ * resets the currentTime to the previous anchor
227
+ */
228
+ backward() {
229
+ const seconds = clock.currentTime;
230
+ let index = clock.times.findIndex((t) => t >= seconds) - 1;
231
+ if (backedBeforeTimeout != null) {
232
+ index -= 1;
233
+ clearTimeout(backedBeforeTimeout);
234
+ }
235
+ if (index < 0) {
236
+ index = 0;
237
+ }
238
+ const newTime = clock.times[index];
239
+ goToTime(newTime);
240
+ backedBeforeTimeout = window.setTimeout(() => {
241
+ backedBeforeTimeout = undefined;
242
+ }, 700);
243
+ },
244
+ destroy,
245
+ };
246
+ }
247
+ //# sourceMappingURL=flightPlayer.js.map