content/hifi-content/alan/dev/hackathon/button.js
2022-02-13 20:41:08 +01:00

99 lines
3.2 KiB
JavaScript

//
// 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 ]);
}
});