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