'no use strict';//// activator-doppleganger.js//// Created by Alezia Kurdis on February 20th, 2022.// Copyright 2022-2023 Overte e.V.//// This script displays a doppleganger of the user when entering an entity.//// Distributed under the Apache License, Version 2.0.// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html// SPDX-License-Identifier: Apache-2.0//(function() { var isActive = false; var thisEntityID; var versioncall = Math.floor(Math.random()*50000); var DopplegangerClass = Script.require('https://more.overte.org/tutorial/doppleganger.js?version=' + versioncall); var doppleganger = new DopplegangerClass({ avatar: MyAvatar, mirrored: false, autoUpdate: true }); // V8TODO: does this need to be fixed? Right now it refers to global object in non-strict mode, // and in strict mode it's undefined this.preload = function(entityID) { thisEntityID = entityID; } function onDomainChanged() { if (doppleganger.active) { doppleganger.stop('domain_changed'); } } Window.domainChanged.connect(onDomainChanged); Window.domainConnectionRefused.connect(onDomainChanged); Script.scriptEnding.connect(function() { if (isActive) { doppleganger.stop(); isActive = false; } Window.domainChanged.disconnect(onDomainChanged); Window.domainConnectionRefused.disconnect(onDomainChanged); }); this.enterEntity = function(entityID) { print("ENTERING"); startDopplegangerShow(entityID); isActive = true; } this.leaveEntity = function(entityID) { print("LEAVING"); doppleganger.stop(); isActive = false; } function startDopplegangerShow(entityID) { var properties = Entities.getEntityProperties(entityID, ["position", "rotation"]); var avatarPosition = MyAvatar.feetPosition; var drawPosition = { "x": properties.position.x, "y": avatarPosition.y, "z": properties.position.z }; var param = { "position": drawPosition, "orientation": properties.rotation, "autoUpdate": true }; doppleganger.start(param); } MyAvatar.skeletonModelURLChanged.connect(function () { if (isActive) { print("CHANGED WHILE ACTIVE"); doppleganger.stop(); isActive = false; var timer = Script.setTimeout(function () { startDopplegangerShow(thisEntityID); isActive = true; }, 4000); } }); // alert the user if there was an error applying their skeletonModelURL doppleganger.addingEntity.connect(function(error, result) { if (doppleganger.active && error) { Window.alert('doppleganger | ' + error + '\n' + doppleganger.skeletonModelURL); } });})
'no use strict';
//
// activator-doppleganger.js
//
// Created by Alezia Kurdis on February 20th, 2022.
// Copyright 2022-2023 Overte e.V.
//
// This script displays a doppleganger of the user when entering an entity.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// SPDX-License-Identifier: Apache-2.0
//
(function() {
var isActive = false;
var thisEntityID;
var versioncall = Math.floor(Math.random()*50000);
var DopplegangerClass = Script.require('https://more.overte.org/tutorial/doppleganger.js?version=' + versioncall);
var doppleganger = new DopplegangerClass({
avatar: MyAvatar,
mirrored: false,
autoUpdate: true
});
// V8TODO: does this need to be fixed? Right now it refers to global object in non-strict mode,
// and in strict mode it's undefined
this.preload = function(entityID) {
thisEntityID = entityID;
}
function onDomainChanged() {
if (doppleganger.active) {
doppleganger.stop('domain_changed');
}
}
Window.domainChanged.connect(onDomainChanged);
Window.domainConnectionRefused.connect(onDomainChanged);
Script.scriptEnding.connect(function() {
if (isActive) {
doppleganger.stop();
isActive = false;
}
Window.domainChanged.disconnect(onDomainChanged);
Window.domainConnectionRefused.disconnect(onDomainChanged);
});
this.enterEntity = function(entityID) {
print("ENTERING");
startDopplegangerShow(entityID);
isActive = true;
}
this.leaveEntity = function(entityID) {
print("LEAVING");
doppleganger.stop();
isActive = false;
}
function startDopplegangerShow(entityID) {
var properties = Entities.getEntityProperties(entityID, ["position", "rotation"]);
var avatarPosition = MyAvatar.feetPosition;
var drawPosition = {
"x": properties.position.x,
"y": avatarPosition.y,
"z": properties.position.z
};
var param = {
"position": drawPosition,
"orientation": properties.rotation,
"autoUpdate": true
};
doppleganger.start(param);
}
MyAvatar.skeletonModelURLChanged.connect(function () {
if (isActive) {
print("CHANGED WHILE ACTIVE");
doppleganger.stop();
isActive = false;
var timer = Script.setTimeout(function () {
startDopplegangerShow(thisEntityID);
isActive = true;
}, 4000);
}
});
// alert the user if there was an error applying their skeletonModelURL
doppleganger.addingEntity.connect(function(error, result) {
if (doppleganger.active && error) {
Window.alert('doppleganger | ' + error + '\n' + doppleganger.skeletonModelURL);
}
});
})