// // triggerToTalk.js // // by Zach Fox on 06/22/18 // Copyright 2018 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 (function() { var _this; var TRIGGER_CONTROLS = [Controller.Standard.LT, Controller.Standard.RT]; var TRIGGER_THRESHOLD = 0.95; var MIC_MUTED_SOUND = SoundCache.getSound(Script.resolvePath("micMuted.wav")); var MIC_UNMUTED_SOUND = SoundCache.getSound(Script.resolvePath("micUnmuted.wav")); var initialMutedStatus = false; var equipped = false; var currentHand = null; var injector; var TriggerToTalk = function() { _this = this; }; TriggerToTalk.prototype = { // START PRELOAD AND UNLOAD FUNCTIONS preload: function(entityID) { _this.entityID = entityID; }, unload: function() { if (equipped) { Audio.muted = initialMutedStatus; } }, // END PRELOAD AND UNLOAD FUNCTIONS // START EQUIP-RELATED FUNCTIONS startEquip: function(id, params) { equipped = true; currentHand = params[0] === "left" ? 0 : 1; }, continueEquip: function(id, params) { if (!equipped) { var parentJointIndex = Entities.getEntityProperties(_this.entityID, 'parentJointIndex').parentJointIndex; currentHand = (parentJointIndex === MyAvatar.getJointIndex("LeftHand")) ? 0 : 1; initialMutedStatus = Audio.muted; equipped = true; } else { var triggerValue = Controller.getValue(TRIGGER_CONTROLS[currentHand]); if (triggerValue < TRIGGER_THRESHOLD) { if (!Audio.muted) { Entities.editEntity(_this.entityID, { color: { red: 255, green: 0, blue: 0 } }); Audio.muted = true; _this.playSound(MIC_MUTED_SOUND); } } else { if (Audio.muted) { Entities.editEntity(_this.entityID, { color: { red: 0, green: 255, blue: 0 } }); Audio.muted = false; _this.playSound(MIC_UNMUTED_SOUND); } } } }, releaseEquip: function(id, params) { currentHand = null; equipped = false; Audio.muted = initialMutedStatus; }, // END EQUIP-RELATED FUNCTIONS // START UTILITY FUNCTIONS playSound: function(sound) { if (sound.downloaded) { if (injector) { injector.stop(); } injector = Audio.playSound(sound, { position: MyAvatar.position, volume: 0.3, localOnly: true }); } } // END UTILITY FUNCTIONS }; return new TriggerToTalk(); });