mirror of
https://github.com/overte-org/overte.git
synced 2025-04-06 11:52:47 +02:00
88 lines
2.9 KiB
JavaScript
88 lines
2.9 KiB
JavaScript
"use strict";
|
|
|
|
/*jslint vars: true, plusplus: true*/
|
|
/*globals Script, Overlays, Controller, Reticle, HMD, Camera, Entities, MyAvatar, Settings, Menu, ScriptDiscoveryService, Window, Vec3, Quat, print*/
|
|
|
|
Trigger = function(properties) {
|
|
properties = properties || {};
|
|
var that = this;
|
|
var controllerStandard = Controller.Standard;
|
|
that.label = properties.label || Math.random();
|
|
that.SMOOTH_RATIO = properties.smooth || 0.1; // Time averaging of trigger - 0.0 disables smoothing
|
|
that.DEADZONE = properties.deadzone || 0.10; // Once pressed, a trigger must fall below the deadzone to be considered un-pressed once pressed.
|
|
that.HYSTERESIS = properties.hystersis || 0.05; // If not pressed, a trigger must go above DEADZONE + HYSTERSIS to be considered pressed
|
|
|
|
that.value = 0;
|
|
that.pressed = false;
|
|
that.clicked = false;
|
|
|
|
// Handlers
|
|
that.onPress = properties.onPress || function(){
|
|
print("Pressed trigger " + that.label)
|
|
};
|
|
that.onRelease = properties.onRelease || function(){
|
|
print("Released trigger " + that.label)
|
|
};
|
|
that.onClick = properties.onClick || function(){
|
|
print("Clicked trigger " + that.label)
|
|
};
|
|
that.onUnclick = properties.onUnclick || function(){
|
|
print("Unclicked trigger " + that.label)
|
|
};
|
|
|
|
// Getters
|
|
that.isPressed = function() {
|
|
return that.pressed;
|
|
}
|
|
|
|
that.isClicked = function() {
|
|
return that.clicked;
|
|
}
|
|
|
|
that.getValue = function() {
|
|
return that.value;
|
|
}
|
|
|
|
|
|
// Private values
|
|
var controller = properties.controller || controllerStandard.LT;
|
|
var controllerClick = properties.controllerClick || controllerStandard.LTClick;
|
|
that.mapping = Controller.newMapping('com.highfidelity.controller.trigger.' + controller + '-' + controllerClick + '.' + that.label + Math.random());
|
|
Script.scriptEnding.connect(that.mapping.disable);
|
|
|
|
// Setup mapping,
|
|
that.mapping.from(controller).peek().to(function(value) {
|
|
that.value = (that.value * that.SMOOTH_RATIO) +
|
|
(value * (1.0 - that.SMOOTH_RATIO));
|
|
|
|
var oldPressed = that.pressed;
|
|
if (!that.pressed && that.value >= (that.DEADZONE + that.HYSTERESIS)) {
|
|
that.pressed = true;
|
|
that.onPress();
|
|
}
|
|
|
|
if (that.pressed && that.value < that.HYSTERESIS) {
|
|
that.pressed = false;
|
|
that.onRelease();
|
|
}
|
|
});
|
|
|
|
that.mapping.from(controllerClick).peek().to(function(value){
|
|
if (!that.clicked && value > 0.0) {
|
|
that.clicked = true;
|
|
that.onClick();
|
|
}
|
|
if (that.clicked && value == 0.0) {
|
|
that.clicked = false;
|
|
that.onUnclick();
|
|
}
|
|
});
|
|
|
|
that.enable = function() {
|
|
that.mapping.enable();
|
|
}
|
|
|
|
that.disable = function() {
|
|
that.mapping.disable();
|
|
}
|
|
}
|