88 lines · 2.9 KB · JavaScript
RawDownload
"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();    }}