mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-08 05:22:09 +02:00
204 lines
6.5 KiB
JavaScript
204 lines
6.5 KiB
JavaScript
"use strict";
|
|
|
|
// pointerUtils.js
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
/* jslint bitwise: true */
|
|
|
|
/* global Script, Pointers,
|
|
DEFAULT_SEARCH_SPHERE_DISTANCE, COLORS_GRAB_SEARCHING_HALF_SQUEEZE, COLORS_GRAB_SEARCHING_FULL_SQUEEZE,
|
|
COLORS_GRAB_DISTANCE_HOLD, TRIGGER_ON_VALUE,
|
|
Pointer:true, PointerManager:true
|
|
*/
|
|
|
|
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
|
Pointer = function(hudLayer, pickType, pointerData) {
|
|
this.SEARCH_SPHERE_SIZE = 0.0132;
|
|
this.dim = {x: this.SEARCH_SPHERE_SIZE, y: this.SEARCH_SPHERE_SIZE, z: this.SEARCH_SPHERE_SIZE};
|
|
this.halfPath = {
|
|
type: "line3d",
|
|
color: COLORS_GRAB_SEARCHING_HALF_SQUEEZE,
|
|
visible: true,
|
|
alpha: 1,
|
|
solid: true,
|
|
glow: 1.0,
|
|
ignoreRayIntersection: true, // always ignore this
|
|
drawInFront: !hudLayer, // Even when burried inside of something, show it.
|
|
drawHUDLayer: hudLayer,
|
|
};
|
|
this.halfEnd = {
|
|
type: "sphere",
|
|
dimensions: this.dim,
|
|
solid: true,
|
|
color: COLORS_GRAB_SEARCHING_HALF_SQUEEZE,
|
|
alpha: 0.9,
|
|
ignoreRayIntersection: true,
|
|
drawInFront: !hudLayer, // Even when burried inside of something, show it.
|
|
drawHUDLayer: hudLayer,
|
|
visible: true
|
|
};
|
|
this.fullPath = {
|
|
type: "line3d",
|
|
color: COLORS_GRAB_SEARCHING_FULL_SQUEEZE,
|
|
visible: true,
|
|
alpha: 1,
|
|
solid: true,
|
|
glow: 1.0,
|
|
ignoreRayIntersection: true, // always ignore this
|
|
drawInFront: !hudLayer, // Even when burried inside of something, show it.
|
|
drawHUDLayer: hudLayer,
|
|
};
|
|
this.fullEnd = {
|
|
type: "sphere",
|
|
dimensions: this.dim,
|
|
solid: true,
|
|
color: COLORS_GRAB_SEARCHING_FULL_SQUEEZE,
|
|
alpha: 0.9,
|
|
ignoreRayIntersection: true,
|
|
drawInFront: !hudLayer, // Even when burried inside of something, show it.
|
|
drawHUDLayer: hudLayer,
|
|
visible: true
|
|
};
|
|
this.holdPath = {
|
|
type: "line3d",
|
|
color: COLORS_GRAB_DISTANCE_HOLD,
|
|
visible: true,
|
|
alpha: 1,
|
|
solid: true,
|
|
glow: 1.0,
|
|
ignoreRayIntersection: true, // always ignore this
|
|
drawInFront: !hudLayer, // Even when burried inside of something, show it.
|
|
drawHUDLayer: hudLayer,
|
|
};
|
|
|
|
this.renderStates = [
|
|
{name: "half", path: this.halfPath, end: this.halfEnd},
|
|
{name: "full", path: this.fullPath, end: this.fullEnd},
|
|
{name: "hold", path: this.holdPath}
|
|
];
|
|
|
|
this.defaultRenderStates = [
|
|
{name: "half", distance: DEFAULT_SEARCH_SPHERE_DISTANCE, path: this.halfPath},
|
|
{name: "full", distance: DEFAULT_SEARCH_SPHERE_DISTANCE, path: this.fullPath},
|
|
{name: "hold", distance: DEFAULT_SEARCH_SPHERE_DISTANCE, path: this.holdPath}
|
|
];
|
|
|
|
|
|
this.pointerID = null;
|
|
this.visible = false;
|
|
this.locked = false;
|
|
this.allwaysOn = false;
|
|
this.hand = pointerData.hand;
|
|
delete pointerData.hand;
|
|
|
|
function createPointer(pickType, pointerData) {
|
|
var pointerID = Pointers.createPointer(pickType, pointerData);
|
|
Pointers.setRenderState(pointerID, "");
|
|
Pointers.enablePointer(pointerID);
|
|
return pointerID;
|
|
}
|
|
|
|
this.enable = function() {
|
|
Pointers.enablePointer(this.pointerID);
|
|
};
|
|
|
|
this.disable = function() {
|
|
Pointers.disablePointer(this.pointerID);
|
|
};
|
|
|
|
this.removePointer = function() {
|
|
Pointers.removePointer(this.pointerID);
|
|
};
|
|
|
|
this.makeVisible = function() {
|
|
this.visible = true;
|
|
};
|
|
|
|
this.makeInvisible = function() {
|
|
this.visible = false;
|
|
};
|
|
|
|
this.lockEnd = function(lockData) {
|
|
if (lockData !== undefined) {
|
|
if (this.visible && !this.locked && lockData.targetID !== null) {
|
|
var targetID = lockData.targetID;
|
|
var targetIsOverlay = lockData.isOverlay;
|
|
if (lockData.offset === undefined) {
|
|
Pointers.setLockEndUUID(this.pointerID, targetID, targetIsOverlay);
|
|
} else {
|
|
Pointers.setLockEndUUID(this.pointerID, targetID, targetIsOverlay, lockData.offset);
|
|
}
|
|
this.locked = targetID;
|
|
}
|
|
} else if (this.locked) {
|
|
Pointers.setLockEndUUID(this.pointerID, null, false);
|
|
this.locked = false;
|
|
}
|
|
};
|
|
|
|
this.updateRenderState = function(triggerClicks, triggerValues) {
|
|
var mode = "";
|
|
if (this.visible) {
|
|
if (this.locked) {
|
|
mode = "hold";
|
|
} else if (triggerClicks[this.hand]) {
|
|
mode = "full";
|
|
} else if (triggerValues[this.hand] > TRIGGER_ON_VALUE || this.alwaysOn) {
|
|
mode = "half";
|
|
}
|
|
}
|
|
|
|
Pointers.setRenderState(this.pointerID, mode);
|
|
};
|
|
pointerData.renderStates = this.renderStates;
|
|
pointerData.defaultRenderStates = this.defaultRenderStates;
|
|
this.pointerID = createPointer(pickType, pointerData);
|
|
};
|
|
|
|
|
|
PointerManager = function() {
|
|
this.pointers = [];
|
|
|
|
this.createPointer = function(hudLayer, pickType, pointerData) {
|
|
var pointer = new Pointer(hudLayer, pickType, pointerData);
|
|
this.pointers.push(pointer);
|
|
return pointer.pointerID;
|
|
};
|
|
|
|
this.makePointerVisible = function(laserParams) {
|
|
var index = laserParams.hand;
|
|
if (index < this.pointers.length && index >= 0) {
|
|
this.pointers[index].makeVisible();
|
|
this.pointers[index].alwaysOn = laserParams.alwaysOn;
|
|
}
|
|
};
|
|
|
|
this.makePointerInvisible = function(laserParams) {
|
|
var index = laserParams.hand;
|
|
if (index < this.pointers.length && index >= 0) {
|
|
this.pointers[index].makeInvisible();
|
|
}
|
|
};
|
|
|
|
this.lockPointerEnd = function(laserParams, lockData) {
|
|
var index = laserParams.hand;
|
|
if (index < this.pointers.length && index >= 0) {
|
|
this.pointers[index].lockEnd(lockData);
|
|
}
|
|
};
|
|
|
|
this.updatePointersRenderState = function(triggerClicks, triggerValues) {
|
|
for (var index = 0; index < this.pointers.length; index++) {
|
|
this.pointers[index].updateRenderState(triggerClicks, triggerValues);
|
|
}
|
|
};
|
|
|
|
this.removePointers = function() {
|
|
for (var index = 0; index < this.pointers.length; index++) {
|
|
this.pointers[index].removePointer();
|
|
}
|
|
this.pointers = [];
|
|
};
|
|
};
|