function createTween (params) {

    new TWEEN.Tween(params.object)        .to(params.to, params.duration)        .onComplete(() => onComplete())        .onUpdate(params.onUpdate)        .easing(params.easing)        .start()}function onComplete() {    console.log("onComplete")}var tweenParams = {    targetTweenDuration: 2500,    posTweenDuration: 2500,    upTweenDuration: 2500,    targetTweenEasing: {        id: TWEEN.Easing.Quadratic.Out,            name: 'Linear'    },    posTweenEasing: {        id: TWEEN.Easing.Quadratic.Out,        name: 'Linear'    },    upTweenEasing: {        id: TWEEN.Easing.Quadratic.Out,        name: 'Linear'    },    configManager: null,    showLoader: true}

function tweenCameraTo (state, immediate) {

    immediate = false;    const targetEnd = new THREE.Vector3(        state.viewport.target[0],        state.viewport.target[1],        state.viewport.target[2])    const posEnd = new THREE.Vector3(        state.viewport.eye[0],        state.viewport.eye[1],        state.viewport.eye[2])    const upEnd = new THREE.Vector3(        state.viewport.up[0],        state.viewport.up[1],        state.viewport.up[2])    const nav = viewer.navigation    const target = new THREE.Vector3().copy(        nav.getTarget())    const pos = new THREE.Vector3().copy(        nav.getPosition())    const up = new THREE.Vector3().copy(        nav.getCameraUpVector())    const targetTween = createTween({        easing: tweenParams.targetTweenEasing.id,        onUpdate: (v) => {            nav.setTarget(v)        },        duration: immediate ? 0 : tweenParams.targetTweenDuration,            object: target,            to: targetEnd    })    const posTween = this.createTween({        easing: tweenParams.posTweenEasing.id,        onUpdate: (v) => {            nav.setPosition(v)        },        duration: immediate ? 0 :tweenParams.posTweenDuration,            object: pos,            to: posEnd    })    const upTween = this.createTween({        easing: tweenParams.upTweenEasing.id,        onUpdate: (v) => {            nav.setCameraUpVector(v)        },        duration: immediate ? 0 : tweenParams.upTweenDuration,            object: up,            to: upEnd    })    Promise.all([        targetTween,        posTween,        upTween]).then(() => {            animate = false            console.log(11111)        })    }// function animate(time) {//     requestAnimationFrame(animate);//     TWEEN.update(time);//     console.log(1)// }// requestAnimationFrame(animate);function runAnimation (start) {    if (start || animate) {        this.animId = window.requestAnimationFrame(            runAnimation)        Tween.update()    }}