// // synchronizerEntityScript.js // examples/entityScripts // // Created by Alessandro Signa on 11/12/15. // Copyright 2015 High Fidelity, Inc. // // This script shows how to create a synchronized event between avatars trhough an entity. // It works using the entity's userData: the master change its value and every client checks it every frame // This entity prints a message when the event starts and when it ends. // The client running synchronizerMaster.js is the event master and it decides when the event starts/ends by pressing a button. // All the avatars in the area when the master presses the button will receive a message. // // 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 insideArea = false; var isJoiningTheEvent = false; var _this; function ParamsEntity() { _this = this; return; } ParamsEntity.prototype = { update: function(){ var userData = JSON.parse(Entities.getEntityProperties(_this.entityID, ["userData"]).userData); var valueToCheck = userData.myKey.valueToCheck; if(valueToCheck && !isJoiningTheEvent){ _this.sendMessage(); }else if((!valueToCheck && isJoiningTheEvent) || (isJoiningTheEvent && !insideArea)){ _this.stopMessage(); } }, preload: function(entityID) { print('entity loaded') this.entityID = entityID; Script.update.connect(_this.update); }, enterEntity: function(entityID) { print("enterEntity("+entityID+")"); var userData = JSON.parse(Entities.getEntityProperties(_this.entityID, ["userData"]).userData); var valueToCheck = userData.myKey.valueToCheck; if(!valueToCheck){ //i'm in the area in time (before the event starts) insideArea = true; } change(entityID); }, leaveEntity: function(entityID) { print("leaveEntity("+entityID+")"); Entities.editEntity(entityID, { color: { red: 255, green: 190, blue: 20} }); insideArea = false; }, sendMessage: function(myID){ if(insideArea && !isJoiningTheEvent){ print("The event started"); isJoiningTheEvent = true; } }, stopMessage: function(myID){ if(isJoiningTheEvent){ print("The event ended"); isJoiningTheEvent = false; } }, clean: function(entityID) { Script.update.disconnect(_this.update); } } function change(entityID) { Entities.editEntity(entityID, { color: { red: 255, green: 100, blue: 220} }); } return new ParamsEntity(); });