116 lines · 3.2 KB · JavaScript
RawDownload
"use strict";////  godView.js//  scripts/system/////  Created by Brad Hefta-Gaub on 1 Jun 2017//  Copyright 2017 High Fidelity, Inc.////  Distributed under the Apache License, Version 2.0.//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html///* globals HMD, Script, Menu, Tablet, Camera *//* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE var godView = false; var GOD_CAMERA_OFFSET = -1; // 1 meter below the avatarvar GOD_VIEW_HEIGHT = 300; // 300 meter above the groundvar ABOVE_GROUND_DROP = 2;var MOVE_BY = 1; function moveTo(position) {    if (godView) {        MyAvatar.position = position;        Camera.position = Vec3.sum(MyAvatar.position, {x:0, y: GOD_CAMERA_OFFSET, z: 0});    } else {        MyAvatar.position = position;    }} function keyPressEvent(event) {    if (godView) {        switch(event.text) {            case "UP":                moveTo(Vec3.sum(MyAvatar.position, {x:0.0, y: 0, z: -1 * MOVE_BY}));                break;            case "DOWN":                moveTo(Vec3.sum(MyAvatar.position, {x:0, y: 0, z: MOVE_BY}));                break;            case "LEFT":                moveTo(Vec3.sum(MyAvatar.position, {x:-1 * MOVE_BY, y: 0, z: 0}));                break;            case "RIGHT":                moveTo(Vec3.sum(MyAvatar.position, {x:MOVE_BY, y: 0, z: 0}));                break;        }    }} function mousePress(event) {    if (godView) {        var pickRay = Camera.computePickRay(event.x, event.y);        var pointingAt = Vec3.sum(pickRay.origin, Vec3.multiply(pickRay.direction,300));        var moveToPosition = { x: pointingAt.x, y: MyAvatar.position.y, z: pointingAt.z };        moveTo(moveToPosition);    }}  var oldCameraMode = Camera.mode; function startGodView() {    if (!godView) {        oldCameraMode = Camera.mode;        MyAvatar.position = Vec3.sum(MyAvatar.position, {x:0, y: GOD_VIEW_HEIGHT, z: 0});        Camera.mode = "independent";        Camera.position = Vec3.sum(MyAvatar.position, {x:0, y: GOD_CAMERA_OFFSET, z: 0});        Camera.orientation = Quat.fromPitchYawRollDegrees(-90,0,0);        godView = true;    }} function endGodView() {    if (godView) {        Camera.mode = oldCameraMode;        MyAvatar.position = Vec3.sum(MyAvatar.position, {x:0, y: (-1 * GOD_VIEW_HEIGHT) + ABOVE_GROUND_DROP, z: 0});        godView = false;    }} var button;var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); function onClicked() {    if (godView) {        endGodView();    } else {        startGodView();    }} button = tablet.addButton({    icon: "icons/tablet-icons/switch-desk-i.svg", // FIXME - consider a better icon from Alan    text: "God View"}); button.clicked.connect(onClicked);Controller.keyPressEvent.connect(keyPressEvent);Controller.mousePressEvent.connect(mousePress);  Script.scriptEnding.connect(function () {    if (godView) {        endGodView();    }    button.clicked.disconnect(onClicked);    if (tablet) {        tablet.removeButton(button);    }    Controller.keyPressEvent.disconnect(keyPressEvent);    Controller.mousePressEvent.disconnect(mousePress);}); }()); // END LOCAL_SCOPE