Add existing to tracked
This commit is contained in:
+109
@@ -0,0 +1,109 @@
|
||||
import BoundingSphere from "../Core/BoundingSphere.js";
|
||||
import combine from "../Core/combine.js";
|
||||
import defined from "../Core/defined.js";
|
||||
import EasingFunction from "../Core/EasingFunction.js";
|
||||
/**
|
||||
* Transitions the KmlTour to the next destination. This transition is facilitated
|
||||
* using a specified flyToMode over a given number of seconds.
|
||||
*
|
||||
* @alias KmlTourFlyTo
|
||||
* @constructor
|
||||
*
|
||||
* @param {number} duration entry duration
|
||||
* @param {string} flyToMode KML fly to mode: bounce, smooth, etc
|
||||
* @param {KmlCamera|KmlLookAt} view KmlCamera or KmlLookAt
|
||||
*
|
||||
* @see KmlTour
|
||||
* @see KmlTourWait
|
||||
*/
|
||||
function KmlTourFlyTo(duration, flyToMode, view) {
|
||||
this.type = "KmlTourFlyTo";
|
||||
this.blocking = true;
|
||||
this.activeCamera = null;
|
||||
this.activeCallback = null;
|
||||
|
||||
this.duration = duration;
|
||||
this.view = view;
|
||||
this.flyToMode = flyToMode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Play this playlist entry
|
||||
*
|
||||
* @param {KmlTourFlyTo.DoneCallback} done function which will be called when playback ends
|
||||
* @param {Camera} camera Cesium camera
|
||||
* @param {object} [cameraOptions] which will be merged with camera flyTo options. See {@link Camera#flyTo}
|
||||
*/
|
||||
KmlTourFlyTo.prototype.play = function (done, camera, cameraOptions) {
|
||||
this.activeCamera = camera;
|
||||
if (defined(done) && done !== null) {
|
||||
const self = this;
|
||||
this.activeCallback = function (terminated) {
|
||||
delete self.activeCallback;
|
||||
delete self.activeCamera;
|
||||
done(defined(terminated) ? false : terminated);
|
||||
};
|
||||
}
|
||||
|
||||
const options = this.getCameraOptions(cameraOptions);
|
||||
if (this.view.headingPitchRoll) {
|
||||
camera.flyTo(options);
|
||||
} else if (this.view.headingPitchRange) {
|
||||
const target = new BoundingSphere(this.view.position);
|
||||
camera.flyToBoundingSphere(target, options);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Stop execution of curent entry. Cancel camera flyTo
|
||||
*/
|
||||
KmlTourFlyTo.prototype.stop = function () {
|
||||
if (defined(this.activeCamera)) {
|
||||
this.activeCamera.cancelFlight();
|
||||
}
|
||||
if (defined(this.activeCallback)) {
|
||||
this.activeCallback(true);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns options for {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere}
|
||||
* depends on this.view type.
|
||||
*
|
||||
* @param {object} cameraOptions options to merge with generated. See {@link Camera#flyTo}
|
||||
* @returns {object} {@link Camera#flyTo} or {@link Camera#flyToBoundingSphere} options
|
||||
*/
|
||||
KmlTourFlyTo.prototype.getCameraOptions = function (cameraOptions) {
|
||||
let options = {
|
||||
duration: this.duration,
|
||||
};
|
||||
|
||||
if (defined(this.activeCallback)) {
|
||||
options.complete = this.activeCallback;
|
||||
}
|
||||
|
||||
if (this.flyToMode === "smooth") {
|
||||
options.easingFunction = EasingFunction.LINEAR_NONE;
|
||||
}
|
||||
|
||||
if (this.view.headingPitchRoll) {
|
||||
options.destination = this.view.position;
|
||||
options.orientation = this.view.headingPitchRoll;
|
||||
} else if (this.view.headingPitchRange) {
|
||||
options.offset = this.view.headingPitchRange;
|
||||
}
|
||||
|
||||
if (defined(cameraOptions)) {
|
||||
options = combine(options, cameraOptions);
|
||||
}
|
||||
return options;
|
||||
};
|
||||
|
||||
/**
|
||||
* A function that will be executed when the flight completes.
|
||||
* @callback KmlTourFlyTo.DoneCallback
|
||||
*
|
||||
* @param {boolean} terminated true if {@link KmlTourFlyTo#stop} was
|
||||
* called before entry done playback.
|
||||
*/
|
||||
export default KmlTourFlyTo;
|
||||
Reference in New Issue
Block a user