mirror of
https://github.com/AleziaKurdis/overte.git
synced 2025-04-07 03:13:13 +02:00
116 lines
3.2 KiB
JavaScript
116 lines
3.2 KiB
JavaScript
"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 avatar
|
|
var GOD_VIEW_HEIGHT = 300; // 300 meter above the ground
|
|
var 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
|