Tour-360 / tour-player

Virual tour player
http://tour-player.herokuapp.com
52 stars 19 forks source link

Исправит баг с переходом по 3д стрелкам #463

Closed BorodinDK closed 3 years ago

BorodinDK commented 3 years ago
Tour.mousManager.getVector = function(event){
    var vector = new THREE.Vector2();
    vector.x = (event.clientX / window.innerWidth) * 2 - 1;
    vector.y = -(event.clientY / window.innerHeight) * 2 + 1;
    return vector;
}

Tour.mousManager.check = function(event){
    var mouse = this.getVector(event);

    var raycaster = new THREE.Raycaster();
    raycaster.setFromCamera(mouse, Tour.camera);
    var intersects = raycaster.intersectObjects(Tour.scene.children, true);

    intersects = intersects.sort(function(a, b){
        return (b.object._onclick?1:0) - (a.object._onclick?1:0) || a.distance - b.distance;
    }).shift();

    var obj = intersects && intersects.object;

    if(obj){
        if(obj._onhover){
            if(this.target != obj){
                this.target && this.target._onover && this.target._onover();
                this.target = obj;
                obj._onhover();
                obj._title && UI.tooltip.setTitle(obj._title)
            }
        }else{
            this.target && this.target._onover && this.target._onover();
            this.target = false;
        }

        UI.layout.setActive(!!obj._onclick);
        UI.tooltip.setVisible(!!obj._title);
        obj._title && UI.tooltip.setPosition(event.clientX, event.clientY)
    }
}

Tour.mousManager.onMouseUp = function(event){
    if(this.getVector(event).distanceTo(this.startMouse) < 0.01){
        this.target && this.target._onclick && this.target._onclick(event);
    }
}

Tour.mousManager.onMouseDown = function(event){
    this.move = false;
    this.startMouse = this.getVector(event);
}

Tour.mousManager.onMouseUp = function(event){
    this.check(event);
    if(this.getVector(event).distanceTo(this.startMouse) < 0.01){
        this.target && this.target._onclick && this.target._onclick(event);
    }
}