content/hifi-content/brosche/dev/MoneyTree/Non-minified/moneyTreeBankerClient.js
2022-02-13 21:50:01 +01:00

185 lines
No EOL
6.8 KiB
JavaScript

// moneyTreeBankerClient.js
// Created by Mark Brosche on 11-8-2018
// 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
//
/* global EventBridge Users AccountServices Agent Avatar */
(function (){
// get userData
// spawn Overlays for clients with ID == giverID
// delete after overlay after click event or after timer expires.
// send data to google sheet
var MONEY_TREE_CHANNEL = "MoneyTreeChannel";
var _this,
spawnerProperties,
power,
userData,
materialID,
bankerID,
powerOverlay,
clicked,
modelURL = "https://hifi-content.s3.amazonaws.com/brosche/DomainContent/Hub/MoneyTree/symbol-power.fbx";
var MoneyTree = function(){
_this = this;
};
MoneyTree.prototype = {
preload: function(entityID){
_this.entityID = entityID;
_this.getEntityData();
Messages.subscribe(MONEY_TREE_CHANNEL);
Messages.messageReceived.connect(_this.moneyListener);
Overlays.mouseReleaseOnOverlay.connect(_this.mousePressOnOverlay);
_this.spawnPowerOverlay();
},
moneyListener: function (channel, message, sender) {
if (channel === "MoneyTreeChannel") {
message = JSON.parse(message);
if (message.type === 'tree power') {
power = message.state;
var material = _this.powerMaterial(power);
Entities.editEntity(materialID, material);
}
if (message.type === 'delete power') {
_this.deleteOverlay();
}
}
},
powerMaterial: function() {
if (power){
var materials = {
albedo: [0, 0.5, 0.5],
emissive: [0, 1, 0.5],
roughness: 0.1,
metallic: 1,
scattering: 0
};
return {
materialURL: "materialData",
materialData: JSON.stringify({
materialVersion: 1,
materials: materials
})
};
} else {
var materials = {
albedo: [0.5, 0, 0],
emissive: [1, 0.2, 0],
roughness: 0.1,
metallic: 1,
scattering: 0
};
return {
materialURL: "materialData",
materialData: JSON.stringify({
materialVersion: 1,
materials: materials
})
};
}
},
getEntityData: function() {
spawnerProperties = Entities.getEntityProperties(_this.entityID, ["position", "rotation", "userData", "parentID"]);
if (!spawnerProperties.userData || spawnerProperties.userData === "{}") {
print("spawner ", _this.entityID, " is missing user data.");
return;
}
try {
userData = JSON.parse(spawnerProperties.userData);
bankerID = userData.bankerID;
console.log("[MONEY TREE] CREATING POWER BUTTON, TREE is:", power, userData.power);
// verify that settings are legit
} catch (e) {
print("Error in retrieving entity Data");
return;
}
},
deleteOverlay: function() {
if (powerOverlay) {
Overlays.deleteOverlay(powerOverlay);
powerOverlay = null;
}
},
spawnPowerOverlay: function() {
if (MyAvatar.sessionUUID === bankerID){ //
console.log("SPAWNING POWER SYMBOL");
var position = { x: -17, y: -7.5, z: -10 };
powerOverlay = Overlays.addOverlay("model", {
name: "POWER OVERLAY",
url: modelURL,
dimensions: { x: 0.75, y: 0.05, z: 0.75 },
position: position,
rotation: Quat.fromPitchYawRollDegrees(-90, 90, 0 ),
isSolid: true,
grabbable: true
});
var powerMaterial = _this.powerMaterial(power);
materialID = Entities.addEntity({
type: "Material",
parentID: powerOverlay,
materialURL: "materialData",
priority: 1,
materialData: JSON.stringify({
materialVersion: 1,
materials: {
// Can only set albedo on a Shape entity.
// Value overrides entity's "color" property.
albedo: [0, 0, 0]
}
})
});
Entities.editEntity(materialID, powerMaterial);
}
},
mousePressOnOverlay: function(id, event) {
console.log("Event is:", JSON.stringify(event));
if (!clicked) {
clicked = true;
if (id === powerOverlay && !power) {
console.log("clicked on overlay", power);
power = true;
Messages.sendMessage(MONEY_TREE_CHANNEL, JSON.stringify({
type: "tree power",
state: true
}));
var material = _this.powerMaterial(power);
Entities.editEntity(materialID, material);
} else if (id === powerOverlay && power) {
console.log("clicked on overlay", power);
power = false;
Messages.sendMessage(MONEY_TREE_CHANNEL, JSON.stringify({
type: "tree power",
state: false
}));
var material = _this.powerMaterial(power);
Entities.editEntity(materialID, material);
}
}
Script.setTimeout(function(){
clicked = false;
}, 500);
},
unload: function(){
_this.deleteOverlay();
Messages.unsubscribe(MONEY_TREE_CHANNEL);
Messages.messageReceived.disconnect(_this.moneyListener);
}
};
Messages.subscribe(MONEY_TREE_CHANNEL);
return new MoneyTree;
});