content/hifi-content/Experiences/Releases/usefulUtilities/smartBoard/v1.2-debug/scripts/boardButtonClient.js
2022-02-13 23:16:46 +01:00

115 lines
No EOL
4 KiB
JavaScript

'use strict';
// boardButtonClient.js
//
// Created by Milad Nazeri and Zach Fox 10/30/2019
// Copyright 2019 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 Screenshare */
(function() {
var DEBUG = true;
// ENTITY SIGNALS
function preload(entityID) {
if (DEBUG) {
console.log("boardButtonClient.js: " + entityID + ": `preload()`.");
}
_this.entityID = entityID;
var props = Entities.getEntityProperties(entityID, ["parentID"]);
var children = Entities.getChildrenIDs(props.parentID);
for (var i = 0; i < children.length; i++) {
var name = Entities.getEntityProperties(children[i], 'name').name;
if (name && name === "Smartboard Zone") {
_this.screenshareZoneID = children[i];
break;
}
}
Entities.callEntityMethod(_this.screenshareZoneID, "buttonPreloadComplete");
}
// Check to see what the button should display based on if there is an active sharer.
var ACTIVE_SCREENSHARE_MODEL_URL = Script.resolvePath("../resources/models/button-stop-screen-share.fbx");
var INACTIVE_SCREENSHARE_MODEL_URL = Script.resolvePath("../resources/models/button-start-screen-share.fbx");
function updateModelURL() {
var newModelURL = !_this.activePresenterUUID ? INACTIVE_SCREENSHARE_MODEL_URL : ACTIVE_SCREENSHARE_MODEL_URL;
if (DEBUG) {
console.log("boardButtonClient.js: " + _this.entityID + "`updateModelURL()`." +
"\n`newModelURL`: " + newModelURL + "\n`_this.activePresenterUUID`: " + _this.activePresenterUUID);
}
Entities.editEntity(_this.entityID, {
modelURL: newModelURL,
visible: true
});
}
// UI
// When the zone client sends who is the current presenter,
// call updateModelURL to update the start/stop screenshare button with the new state
function setActivePresenterUUID(id, args) {
_this.currentBoardState = args[0];
_this.activePresenterUUID = args[1];
if (_this.currentBoardState === "whiteboard") {
_this.activePresenterUUID = "";
}
if (DEBUG) {
console.log("args:", args, "\nboardButtonClient.js: " + _this.entityID + "`setActivePresenterUUID()`." +
"\n`_this.activePresenterUUID`: " + _this.activePresenterUUID);
}
updateModelURL();
}
// When the button is pressed, call the Smartboard zone server script to update the
// current board state and send in the requested presenter if there is one
function mousePressOnEntity() {
if (DEBUG) {
console.log("boardButtonClient.js: " + _this.entityID + ": `mousePressOnEntity()`." +
"\n`_this.activePresenterUUID`: " + _this.activePresenterUUID + "\n");
}
if (_this.activePresenterUUID && _this.activePresenterUUID !== MyAvatar.sessionUUID) {
return;
}
var newState = _this.currentBoardState === "screenshare" ? "whiteboard": "screenshare";
if (newState === "whiteboard") {
Screenshare.stopScreenshare();
} else {
Entities.callEntityServerMethod(_this.screenshareZoneID,
"updateCurrentBoardState", [newState, MyAvatar.sessionUUID]);
}
}
// SMARTBOARD BUTTON OBJECT
var _this;
function SmartboardButtonClient() {
_this = this;
this.currentBoardState = "whiteboard";
this.activePresenterUUID = "";
this.screenshareZoneID;
this.entityID;
this.remotelyCallable = [
"setActivePresenterUUID"
];
}
SmartboardButtonClient.prototype = {
preload: preload,
mousePressOnEntity: mousePressOnEntity,
updateModelURL: updateModelURL,
setActivePresenterUUID: setActivePresenterUUID
};
return new SmartboardButtonClient();
});