mirror of
https://github.com/AleziaKurdis/Overte-community-apps.git
synced 2025-04-06 01:53:45 +02:00
Revert formatting.
Signed-off-by: Armored Dragon <publicmail@armoreddragon.com>
This commit is contained in:
parent
417a151e34
commit
2a1d6c9b46
1 changed files with 137 additions and 137 deletions
|
@ -6,162 +6,162 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
"use strict";
|
"use strict";
|
||||||
let user_nametags = {};
|
let user_nametags = {};
|
||||||
let visible = Settings.getValue("Nametags_toggle", true);
|
let visible = Settings.getValue("Nametags_toggle", true);
|
||||||
let maximum_name_length = 50;
|
let maximum_name_length = 50;
|
||||||
let last_camera_mode = Camera.mode;
|
let last_camera_mode = Camera.mode;
|
||||||
|
|
||||||
_updateList();
|
_updateList();
|
||||||
|
|
||||||
AvatarManager.avatarAddedEvent.connect(_addUser); // New user connected
|
AvatarManager.avatarAddedEvent.connect(_addUser); // New user connected
|
||||||
AvatarManager.avatarRemovedEvent.connect(_removeUser); // User disconnected
|
AvatarManager.avatarRemovedEvent.connect(_removeUser); // User disconnected
|
||||||
Script.update.connect(_adjustNametags); // Delta time
|
Script.update.connect(_adjustNametags); // Delta time
|
||||||
|
|
||||||
Script.scriptEnding.connect(_scriptEnding); // Script was uninstalled
|
Script.scriptEnding.connect(_scriptEnding); // Script was uninstalled
|
||||||
Menu.menuItemEvent.connect(_toggleState); // Toggle the nametag
|
Menu.menuItemEvent.connect(_toggleState); // Toggle the nametag
|
||||||
|
|
||||||
// Toolbar icon
|
// Toolbar icon
|
||||||
let tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
let tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system");
|
||||||
let tabletButton = tablet.addButton({
|
let tabletButton = tablet.addButton({
|
||||||
icon: Script.resolvePath("./assets/nametags-i.svg"),
|
icon: Script.resolvePath("./assets/nametags-i.svg"),
|
||||||
activeIcon: Script.resolvePath("./assets/nametags-a.svg"),
|
activeIcon: Script.resolvePath("./assets/nametags-a.svg"),
|
||||||
text: "NAMETAGS",
|
text: "NAMETAGS",
|
||||||
isActive: visible,
|
isActive: visible,
|
||||||
});
|
});
|
||||||
tabletButton.clicked.connect(_toggleState);
|
tabletButton.clicked.connect(_toggleState);
|
||||||
|
|
||||||
// Menu item
|
// Menu item
|
||||||
Menu.addMenuItem({
|
Menu.addMenuItem({
|
||||||
menuName: "View",
|
menuName: "View",
|
||||||
menuItemName: "Nametags",
|
menuItemName: "Nametags",
|
||||||
shortcutKey: "CTRL+N",
|
shortcutKey: "CTRL+N",
|
||||||
isCheckable: true,
|
isCheckable: true,
|
||||||
isChecked: visible,
|
isChecked: visible,
|
||||||
});
|
});
|
||||||
|
|
||||||
function _updateList() {
|
function _updateList() {
|
||||||
const include_self = !HMD.active && !Camera.mode.includes("first person");
|
const include_self = !HMD.active && !Camera.mode.includes("first person");
|
||||||
var user_list = AvatarList.getAvatarIdentifiers();
|
var user_list = AvatarList.getAvatarIdentifiers();
|
||||||
if (include_self) user_list.push(MyAvatar.sessionUUID);
|
if (include_self) user_list.push(MyAvatar.sessionUUID);
|
||||||
|
|
||||||
// Filter undefined values out
|
// Filter undefined values out
|
||||||
user_list = user_list.filter((uuid) => uuid);
|
user_list = user_list.filter((uuid) => uuid);
|
||||||
|
|
||||||
user_list.forEach(_addUser);
|
user_list.forEach(_addUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add a user to the user list
|
// Add a user to the user list
|
||||||
function _addUser(user_uuid) {
|
function _addUser(user_uuid) {
|
||||||
if (!visible) return;
|
if (!visible) return;
|
||||||
if (user_nametags[user_uuid]) return;
|
if (user_nametags[user_uuid]) return;
|
||||||
|
|
||||||
const user = AvatarList.getAvatar(user_uuid);
|
const user = AvatarList.getAvatar(user_uuid);
|
||||||
const display_name = user.displayName ? user.displayName.substring(0, maximum_name_length) : "Anonymous";
|
const display_name = user.displayName ? user.displayName.substring(0, maximum_name_length) : "Anonymous";
|
||||||
const headJointIndex = user.getJointIndex("Head");
|
const headJointIndex = user.getJointIndex("Head");
|
||||||
const jointInObjectFrame = user.getAbsoluteJointTranslationInObjectFrame(headJointIndex);
|
const jointInObjectFrame = user.getAbsoluteJointTranslationInObjectFrame(headJointIndex);
|
||||||
|
|
||||||
console.log(`Registering ${display_name} (${user_uuid}) nametag`);
|
console.log(`Registering ${display_name} (${user_uuid}) nametag`);
|
||||||
|
|
||||||
user_nametags[user_uuid] = { text: {}, background: {} };
|
user_nametags[user_uuid] = { text: {}, background: {} };
|
||||||
|
|
||||||
user_nametags[user_uuid].text = Entities.addEntity(
|
user_nametags[user_uuid].text = Entities.addEntity(
|
||||||
{
|
{
|
||||||
type: "Text",
|
type: "Text",
|
||||||
text: display_name,
|
text: display_name,
|
||||||
backgroundAlpha: 0.0,
|
backgroundAlpha: 0.0,
|
||||||
billboardMode: "full",
|
billboardMode: "full",
|
||||||
unlit: true,
|
unlit: true,
|
||||||
parentID: user_uuid,
|
parentID: user_uuid,
|
||||||
position: Vec3.sum(user.position, { x: 0, y: 0.4 + jointInObjectFrame.y, z: 0 }),
|
position: Vec3.sum(user.position, { x: 0, y: 0.4 + jointInObjectFrame.y, z: 0 }),
|
||||||
visible: true,
|
visible: true,
|
||||||
isSolid: false,
|
isSolid: false,
|
||||||
topMargin: 0.025,
|
topMargin: 0.025,
|
||||||
alignment: "center",
|
alignment: "center",
|
||||||
lineHeight: 0.1,
|
lineHeight: 0.1,
|
||||||
canCastShadow: false,
|
canCastShadow: false,
|
||||||
grab: {
|
grab: {
|
||||||
grabbable: false,
|
grabbable: false
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
"local"
|
"local"
|
||||||
);
|
);
|
||||||
user_nametags[user_uuid].background = Entities.addEntity(
|
user_nametags[user_uuid].background = Entities.addEntity(
|
||||||
{
|
{
|
||||||
type: "Image",
|
type: "Image",
|
||||||
dimensions: { x: 0.8, y: 0.2, z: 0.1 },
|
dimensions: { x: 0.8, y: 0.2, z: 0.1 },
|
||||||
emissive: true,
|
emissive: true,
|
||||||
alpha: 0.8,
|
alpha: 0.8,
|
||||||
keepAspectRatio: false,
|
keepAspectRatio: false,
|
||||||
position: Vec3.sum(user.position, { x: 0, y: 0.4 + jointInObjectFrame.y, z: 0 }),
|
position: Vec3.sum(user.position, { x: 0, y: 0.4 + jointInObjectFrame.y, z: 0 }),
|
||||||
parentID: user_nametags[user_uuid].text,
|
parentID: user_nametags[user_uuid].text,
|
||||||
billboardMode: "full",
|
billboardMode: "full",
|
||||||
imageURL: Script.resolvePath("./assets/badge.svg"),
|
imageURL: Script.resolvePath("./assets/badge.svg"),
|
||||||
canCastShadow: false,
|
canCastShadow: false,
|
||||||
grab: {
|
grab: {
|
||||||
grabbable: false,
|
grabbable: false
|
||||||
},
|
}
|
||||||
},
|
},
|
||||||
"local"
|
"local"
|
||||||
);
|
);
|
||||||
|
|
||||||
// We need to have this on a timeout because "textSize" can not be determined instantly after the entity was created.
|
// We need to have this on a timeout because "textSize" can not be determined instantly after the entity was created.
|
||||||
// https://apidocs.overte.org/Entities.html#.textSize
|
// https://apidocs.overte.org/Entities.html#.textSize
|
||||||
Script.setTimeout(() => {
|
Script.setTimeout(() => {
|
||||||
let textSize = Entities.textSize(user_nametags[user_uuid].text, display_name);
|
let textSize = Entities.textSize(user_nametags[user_uuid].text, display_name);
|
||||||
Entities.editEntity(user_nametags[user_uuid].text, { dimensions: { x: textSize.width + 0.25, y: textSize.height - 0.05, z: 0.1 } });
|
Entities.editEntity(user_nametags[user_uuid].text, { dimensions: { x: textSize.width + 0.25, y: textSize.height - 0.05, z: 0.1 } });
|
||||||
Entities.editEntity(user_nametags[user_uuid].background, {
|
Entities.editEntity(user_nametags[user_uuid].background, {
|
||||||
dimensions: { x: Math.max(textSize.width + 0.25, 0.6), y: textSize.height - 0.05, z: 0.1 },
|
dimensions: { x: Math.max(textSize.width + 0.25, 0.6), y: textSize.height - 0.05, z: 0.1 },
|
||||||
});
|
});
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove a user from the user list
|
// Remove a user from the user list
|
||||||
function _removeUser(user_uuid) {
|
function _removeUser(user_uuid) {
|
||||||
console.log(`Deleting ${user_uuid} nametag`);
|
console.log(`Deleting ${user_uuid} nametag`);
|
||||||
Entities.deleteEntity(user_nametags[user_uuid].text);
|
Entities.deleteEntity(user_nametags[user_uuid].text);
|
||||||
Entities.deleteEntity(user_nametags[user_uuid].background);
|
Entities.deleteEntity(user_nametags[user_uuid].background);
|
||||||
delete user_nametags[user_uuid];
|
delete user_nametags[user_uuid];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Updates positions of existing nametags
|
// Updates positions of existing nametags
|
||||||
function _adjustNametags() {
|
function _adjustNametags() {
|
||||||
if (last_camera_mode !== Camera.mode) {
|
if (last_camera_mode !== Camera.mode) {
|
||||||
if (Camera.mode.includes("first person")) _removeUser(MyAvatar.sessionUUID);
|
if (Camera.mode.includes("first person")) _removeUser(MyAvatar.sessionUUID);
|
||||||
else _addUser(MyAvatar.sessionUUID);
|
else _addUser(MyAvatar.sessionUUID);
|
||||||
last_camera_mode = Camera.mode;
|
last_camera_mode = Camera.mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
Object.keys(user_nametags).forEach((user_uuid) => {
|
Object.keys(user_nametags).forEach((user_uuid) => {
|
||||||
const user = AvatarList.getAvatar(user_uuid);
|
const user = AvatarList.getAvatar(user_uuid);
|
||||||
const display_name = user.displayName ? user.displayName.substring(0, maximum_name_length) : "Anonymous";
|
const display_name = user.displayName ? user.displayName.substring(0, maximum_name_length) : "Anonymous";
|
||||||
const headJointIndex = user.getJointIndex("Head");
|
const headJointIndex = user.getJointIndex("Head");
|
||||||
const jointInObjectFrame = user.getAbsoluteJointTranslationInObjectFrame(headJointIndex);
|
const jointInObjectFrame = user.getAbsoluteJointTranslationInObjectFrame(headJointIndex);
|
||||||
Entities.editEntity(user_nametags[user_uuid].text, {
|
Entities.editEntity(user_nametags[user_uuid].text, {
|
||||||
position: Vec3.sum(user.position, { x: 0, y: jointInObjectFrame.y + Math.abs(user.scale - 1) + 0.4, z: 0 }),
|
position: Vec3.sum(user.position, { x: 0, y: jointInObjectFrame.y + Math.abs(user.scale - 1) + 0.4, z: 0 }),
|
||||||
text: display_name,
|
text: display_name,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable or disable nametags
|
// Enable or disable nametags
|
||||||
function _toggleState() {
|
function _toggleState() {
|
||||||
visible = !visible;
|
visible = !visible;
|
||||||
tabletButton.editProperties({ isActive: visible });
|
tabletButton.editProperties({ isActive: visible });
|
||||||
Settings.setValue("Nametags_toggle", visible);
|
Settings.setValue("Nametags_toggle", visible);
|
||||||
|
|
||||||
if (!visible) Object.keys(user_nametags).forEach(_removeUser);
|
if (!visible) Object.keys(user_nametags).forEach(_removeUser);
|
||||||
if (visible) _updateList();
|
if (visible) _updateList();
|
||||||
}
|
}
|
||||||
|
|
||||||
function _scriptEnding() {
|
function _scriptEnding() {
|
||||||
tablet.removeButton(tabletButton);
|
tablet.removeButton(tabletButton);
|
||||||
Menu.removeMenuItem("View", "Nametags");
|
Menu.removeMenuItem("View", "Nametags");
|
||||||
|
|
||||||
for (let i = 0; Object.keys(user_nametags).length > i; i++) {
|
for (let i = 0; Object.keys(user_nametags).length > i; i++) {
|
||||||
Entities.deleteEntity(user_nametags[Object.keys(user_nametags)[i]].text);
|
Entities.deleteEntity(user_nametags[Object.keys(user_nametags)[i]].text);
|
||||||
Entities.deleteEntity(user_nametags[Object.keys(user_nametags)[i]].background);
|
Entities.deleteEntity(user_nametags[Object.keys(user_nametags)[i]].background);
|
||||||
}
|
}
|
||||||
user_nametags = {};
|
user_nametags = {};
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue