// // button.js // // Created by Clement Brisset on 10/26/13 // 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 Entities, Script, AnimationCache, Settings, MyAvatar, DriveKeys, AvatarList, Vec3, HMD, Overlays, Camera, isInEditMode */ (function () { var myEntityID = null; var version = 11; var myParentID = null; var myUserData = null; function debug(text) { console.log("[TAG " + version + "] " + text); } debug("Version: " + version); var signals = { list: {}, connect: function(signal, func) { debug("Connecting: " + signal.name); signal.connect(func); signals.list[signal.name] = function() { signal.disconnect(func); } }, disconnect: function(signal) { debug("Disonnecting: " + signal.name); signals.list[signal.name](); delete signals.list[signal.name]; }, disconnectAll: function() { for (signalName in signals.list) { debug("DisonnectingAll: " + signalName); signals.list[signalName](); delete signals.list[signalName]; } } }; this.preload = function (id) { myEntityID = id; var props = Entities.getEntityProperties(myEntityID, ["parentID", "userData"]); myParentID = props.parentID; myUserData = JSON.parse(props.userData); debug("Loading " + myEntityID + " (parentID: " + myParentID + ")"); signals.connect(Entities.clickDownOnEntity, onClickDown); signals.connect(Entities.clickReleaseOnEntity, onClickRelease); }; this.unload = function () { debug("Unloading " + myEntityID); signals.disconnectAll(); }; function onClickDown(entityID, event) { if (myEntityID != entityID || !event.isPrimaryButton) { return; } debug("onClickDown: " + JSON.stringify(myUserData)) if (myUserData.action == "drive") { var props = Entities.getEntityProperties(myEntityID, ["position"]); MyAvatar.position = { x: props.position.x, y: MyAvatar.position.y, z: props.position.z }; } Entities.callEntityMethod(myParentID, "onButtonClicked", [ myUserData.action, 1 ]); } function onClickRelease(entityID, event) { if (myEntityID != entityID || !event.isPrimaryButton) { return; } debug("onClickRelease: " + JSON.stringify(myUserData)) Entities.callEntityMethod(myParentID, "onButtonClicked", [ myUserData.action, 0 ]); } this.state = 0; this.startFarTrigger = function() { debug("startFarTrigger: " + JSON.stringify(myUserData)) this.state = (this.state + 1) % 2; Entities.callEntityMethod(myParentID, "onButtonClicked", [ myUserData.action, this.state ]); } this.endFarTrigger = function() { debug("endFarTrigger: " + JSON.stringify(myUserData)) Entities.callEntityMethod(myParentID, "onButtonClicked", [ myUserData.action, 0 ]); } });