mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
create nameTag.js script
Running the script creates a text entity that will hover over the users head showing their display name.
This commit is contained in:
parent
04d5173328
commit
f159d4c91d
1 changed files with 98 additions and 0 deletions
98
scripts/system/nameTag.js
Normal file
98
scripts/system/nameTag.js
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/*jslint vars: true, plusplus: true*/
|
||||||
|
/*global Entities, Script, Quat, Vec3, MyAvatar, print*/
|
||||||
|
// nameTag.js
|
||||||
|
//
|
||||||
|
// Created by Triplelexx on 17/01/31
|
||||||
|
// Copyright 2017 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
|
||||||
|
|
||||||
|
const NAMETAG_DIMENSIONS = {
|
||||||
|
x: 1.0,
|
||||||
|
y: 0.2,
|
||||||
|
z: 1.0
|
||||||
|
}
|
||||||
|
|
||||||
|
const CLIENTONLY = false;
|
||||||
|
const NULL_UUID = "{00000000-0000-0000-0000-000000000000}";
|
||||||
|
const ENTITY_CHECK_INTERVAL = 5000; // ms = 5 seconds
|
||||||
|
const STARTUP_DELAY = 2000; // ms = 2 second
|
||||||
|
const OLD_AGE = 3500; // we recreate the entity if older than this time in seconds
|
||||||
|
const TTL = 2; // time to live in seconds if script is not running
|
||||||
|
const HEIGHT_ABOVE_HEAD = 0.2;
|
||||||
|
const HEAD_OFFSET = -0.025;
|
||||||
|
|
||||||
|
var nametagEntityID = NULL_UUID;
|
||||||
|
var lastCheckForEntity = 0;
|
||||||
|
|
||||||
|
// create the name tag entity after a brief delay
|
||||||
|
Script.setTimeout(function() {
|
||||||
|
addNameTag();
|
||||||
|
}, STARTUP_DELAY);
|
||||||
|
|
||||||
|
function addNameTag() {
|
||||||
|
var nametagPosition = Vec3.sum(MyAvatar.getHeadPosition(), Vec3.multiply(HEAD_OFFSET, Quat.getFront(MyAvatar.orientation)));
|
||||||
|
nametagPosition.y += HEIGHT_ABOVE_HEAD;
|
||||||
|
var modelNameTagProperties = {
|
||||||
|
type: 'Text',
|
||||||
|
text: MyAvatar.displayName,
|
||||||
|
parentID: MyAvatar.sessionUUID,
|
||||||
|
dimensions: NAMETAG_DIMENSIONS,
|
||||||
|
position: nametagPosition
|
||||||
|
}
|
||||||
|
nametagEntityID = Entities.addEntity(modelNameTagProperties, CLIENTONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteNameTag() {
|
||||||
|
if(nametagEntityID !== NULL_UUID) {
|
||||||
|
Entities.deleteEntity(nametagEntityID);
|
||||||
|
nametagEntityID = NULL_UUID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// cleanup on ending
|
||||||
|
Script.scriptEnding.connect(cleanup);
|
||||||
|
function cleanup() {
|
||||||
|
deleteNameTag();
|
||||||
|
}
|
||||||
|
|
||||||
|
Script.update.connect(update);
|
||||||
|
function update() {
|
||||||
|
// bail if no entity
|
||||||
|
if(nametagEntityID == NULL_UUID) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(Date.now() - lastCheckForEntity > ENTITY_CHECK_INTERVAL) {
|
||||||
|
checkForEntity();
|
||||||
|
lastCheckForEntity = Date.now();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkForEntity() {
|
||||||
|
var nametagProps = Entities.getEntityProperties(nametagEntityID);
|
||||||
|
|
||||||
|
// it is possible for the age to not be a valid number, we check for this and bail accordingly
|
||||||
|
if(nametagProps.age < 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// it's too old make a new one, otherwise update
|
||||||
|
if(nametagProps.age > OLD_AGE || nametagProps.age == undefined) {
|
||||||
|
deleteNameTag();
|
||||||
|
addNameTag();
|
||||||
|
} else {
|
||||||
|
var nametagPosition = Vec3.sum(MyAvatar.getHeadPosition(), Vec3.multiply(HEAD_OFFSET, Quat.getFront(MyAvatar.orientation)));
|
||||||
|
nametagPosition.y += HEIGHT_ABOVE_HEAD;
|
||||||
|
Entities.editEntity(nametagEntityID, {
|
||||||
|
position: nametagPosition,
|
||||||
|
// lifetime is in seconds we add TTL on top of the next poll time
|
||||||
|
lifetime: Math.round(nametagProps.age) + (ENTITY_CHECK_INTERVAL / 1000) + TTL,
|
||||||
|
text: MyAvatar.displayName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue