mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-09 02:42:19 +02:00
Merge pull request #15792 from MiladNazeri/nametagFixes
Bugz-504: more stable nametag updates
This commit is contained in:
commit
3d72370d1a
2 changed files with 71 additions and 44 deletions
|
@ -9,16 +9,17 @@
|
|||
//
|
||||
// Helps manage the list of avatars added to the nametag list
|
||||
//
|
||||
|
||||
var EntityMaker = Script.require('./entityMaker.js?' + Date.now());
|
||||
var entityProps = Script.require('./defaultLocalEntityProps.js?' + Date.now());
|
||||
var textHelper = new (Script.require('./textHelper.js?' + Date.now()));
|
||||
var EntityMaker = Script.require('./entityMaker.js');
|
||||
var entityProps = Script.require('./defaultLocalEntityProps.js');
|
||||
var textHelper = new (Script.require('./textHelper.js'));
|
||||
var X = 0;
|
||||
var Y = 1;
|
||||
var Z = 2;
|
||||
var HALF = 0.5;
|
||||
var CLEAR_ENTITY_EDIT_PROPS = true;
|
||||
var MILISECONDS_IN_SECOND = 1000;
|
||||
var SECONDS_IN_MINUTE = 60;
|
||||
var ALWAYS_ON_MAX_LIFETIME_IN_SECONDS = 20 * SECONDS_IN_MINUTE; // Delete after 20 minutes in case a nametag is hanging around in on mode
|
||||
|
||||
// *************************************
|
||||
// START UTILTY
|
||||
|
@ -58,8 +59,6 @@ var distanceScaler = DISTANCE_SCALER_ON;
|
|||
var userScaler = 1.0;
|
||||
var DEFAULT_LINE_HEIGHT = entityProps.lineHeight;
|
||||
function calculateInitialProperties(uuid) {
|
||||
var avatar = _this.avatars[uuid];
|
||||
|
||||
var adjustedScaler = null;
|
||||
var distance = null;
|
||||
var dimensions = null;
|
||||
|
@ -97,19 +96,6 @@ function calculateInitialProperties(uuid) {
|
|||
}
|
||||
|
||||
|
||||
// Used in alwaysOn mode to show or hide if they reached the max radius
|
||||
function showHide(uuid, type) {
|
||||
var avatar = _this.avatars[uuid];
|
||||
var nametag = avatar.nametag;
|
||||
|
||||
if (type === "show") {
|
||||
nametag.show();
|
||||
} else {
|
||||
nametag.hide();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Go through the selected avatar list and see if any of the avatars need a redraw
|
||||
function checkAllSelectedForRedraw() {
|
||||
for (var avatar in _this.selectedAvatars) {
|
||||
|
@ -168,6 +154,18 @@ function getDistance(uuid, checkAvatar, shouldSave) {
|
|||
}
|
||||
|
||||
|
||||
// Quick check for distance from avatar
|
||||
function quickDistanceCheckForNonSelectedAvatars(uuid) {
|
||||
var source = MyAvatar.position;
|
||||
|
||||
var target = AvatarManager.getAvatar(uuid).position;
|
||||
|
||||
var avatarDistance = Vec3.distance(target, source);
|
||||
|
||||
return avatarDistance;
|
||||
}
|
||||
|
||||
|
||||
// Check to see if we need to toggle our interval check because we went to 0 avatars
|
||||
// or if we got our first avatar in the select list
|
||||
function shouldToggleInterval() {
|
||||
|
@ -197,7 +195,9 @@ function toggleInterval() {
|
|||
}
|
||||
|
||||
|
||||
// handle turning the peristenet mode on
|
||||
// Handle checking to see if we should add or delete nametags in persistent mode
|
||||
var alwaysOnAvatarDistanceCheck = false;
|
||||
var DISTANCE_CHECK_INTERVAL_MS = 1000;
|
||||
function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) {
|
||||
_this.reset();
|
||||
if (shouldTurnOnAlwaysOnMode) {
|
||||
|
@ -205,9 +205,23 @@ function handleAlwaysOnMode(shouldTurnOnAlwaysOnMode) {
|
|||
.getAvatarIdentifiers()
|
||||
.forEach(function (avatar) {
|
||||
if (avatar) {
|
||||
add(avatar);
|
||||
var avatarDistance = quickDistanceCheckForNonSelectedAvatars(avatar);
|
||||
if (avatarDistance < MAX_RADIUS_IGNORE_METERS) {
|
||||
add(avatar);
|
||||
}
|
||||
}
|
||||
});
|
||||
maybeClearAlwaysOnAvatarDistanceCheck();
|
||||
alwaysOnAvatarDistanceCheck = Script.setInterval(maybeAddOrRemoveIntervalCheck, DISTANCE_CHECK_INTERVAL_MS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check to see if we need to clear the distance check in persistent mode
|
||||
function maybeClearAlwaysOnAvatarDistanceCheck() {
|
||||
if (alwaysOnAvatarDistanceCheck) {
|
||||
Script.clearInterval(alwaysOnAvatarDistanceCheck);
|
||||
alwaysOnAvatarDistanceCheck = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -313,12 +327,6 @@ function makeNameTag(uuid) {
|
|||
var nameTagPosition = jointInObjectFrame.y + scaledDimenionsYHalf + ABOVE_HEAD_OFFSET;
|
||||
var localPosition = [0, nameTagPosition, 0];
|
||||
|
||||
var visible = true;
|
||||
if (avatarNametagMode === "alwaysOn") {
|
||||
var currentDistance = getDistance(uuid, CHECK_AVATAR, false);
|
||||
visible = currentDistance > MAX_RADIUS_IGNORE_METERS ? false : true;
|
||||
}
|
||||
|
||||
nametag
|
||||
.add("leftMargin", lineHeight * LEFT_MARGIN_SCALER)
|
||||
.add("rightMargin", lineHeight * RIGHT_MARGIN_SCALER)
|
||||
|
@ -328,7 +336,6 @@ function makeNameTag(uuid) {
|
|||
.add("dimensions", scaledDimensions)
|
||||
.add("parentID", parentID)
|
||||
.add("localPosition", localPosition)
|
||||
.add("visible", visible)
|
||||
.create(CLEAR_ENTITY_EDIT_PROPS);
|
||||
|
||||
Script.setTimeout(function () {
|
||||
|
@ -341,33 +348,45 @@ function makeNameTag(uuid) {
|
|||
var MAX_RADIUS_IGNORE_METERS = 22;
|
||||
var MAX_ON_MODE_DISTANCE = 35;
|
||||
var CHECK_AVATAR = true;
|
||||
var MIN_DISTANCE = 0.2;
|
||||
var MIN_DISTANCE_FOR_REDRAW_METERS = 0.1;
|
||||
function maybeRedraw(uuid) {
|
||||
var avatar = _this.avatars[uuid];
|
||||
getAvatarData(uuid);
|
||||
|
||||
getDistance(uuid);
|
||||
var avatarDistance = getDistance(uuid, CHECK_AVATAR, false);
|
||||
if (avatarNametagMode === "alwaysOn" && avatarDistance > MAX_RADIUS_IGNORE_METERS) {
|
||||
showHide(uuid, "hide");
|
||||
}
|
||||
|
||||
if (avatarNametagMode === "alwaysOn" && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
|
||||
showHide(uuid, "show");
|
||||
}
|
||||
var distanceDelta = Math.abs(avatar.currentDistance - avatar.previousDistance);
|
||||
|
||||
var name = getCorrectName(uuid);
|
||||
|
||||
if (avatar.previousName !== name) {
|
||||
updateName(uuid, name);
|
||||
} else {
|
||||
} else if (distanceDelta > MIN_DISTANCE_FOR_REDRAW_METERS) {
|
||||
redraw(uuid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Check to see if we need to add or remove this avatar during always on mode
|
||||
function maybeAddOrRemoveIntervalCheck() {
|
||||
AvatarManager
|
||||
.getAvatarIdentifiers()
|
||||
.forEach(function (avatar) {
|
||||
if (avatar) {
|
||||
var avatarDistance = quickDistanceCheckForNonSelectedAvatars(avatar);
|
||||
if (avatar && avatarNametagMode === "alwaysOn" && !(avatar in _this.avatars) && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
|
||||
add(avatar);
|
||||
return;
|
||||
}
|
||||
if (avatarDistance > MAX_RADIUS_IGNORE_METERS) {
|
||||
maybeRemove(avatar);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// Handle redrawing if needed
|
||||
var MIN_DISTANCE = 0.1;
|
||||
function redraw(uuid) {
|
||||
var avatar = _this.avatars[uuid];
|
||||
|
||||
|
@ -447,7 +466,7 @@ function add(uuid) {
|
|||
|
||||
_this.selectedAvatars[uuid] = true;
|
||||
if (avatarNametagMode === "alwaysOn") {
|
||||
entityProps.lifetime = -1;
|
||||
entityProps.lifetime = ALWAYS_ON_MAX_LIFETIME_IN_SECONDS;
|
||||
} else {
|
||||
entityProps.lifetime = DEFAULT_LIFETIME;
|
||||
}
|
||||
|
@ -521,16 +540,20 @@ function removeNametag(uuid) {
|
|||
// #region API
|
||||
|
||||
|
||||
// Create the manager and hook up username signal
|
||||
// Create the manager.
|
||||
function create() {
|
||||
if (avatarNametagMode === "alwaysOn") {
|
||||
handleAvatarNametagMode("alwaysOn");
|
||||
}
|
||||
|
||||
return _this;
|
||||
}
|
||||
|
||||
|
||||
// Destory the manager and disconnect from username signal
|
||||
// Destroy the manager
|
||||
function destroy() {
|
||||
_this.reset();
|
||||
|
||||
return _this;
|
||||
}
|
||||
|
||||
|
@ -601,7 +624,9 @@ function maybeRemove(uuid) {
|
|||
|
||||
// Check to see if we need to add this user to our list
|
||||
function maybeAdd(uuid) {
|
||||
if (uuid && avatarNametagMode === "alwaysOn" && !(uuid in _this.avatars)) {
|
||||
var avatarDistance = quickDistanceCheckForNonSelectedAvatars(uuid);
|
||||
|
||||
if (uuid && avatarNametagMode === "alwaysOn" && !(uuid in _this.avatars) && avatarDistance < MAX_RADIUS_IGNORE_METERS) {
|
||||
add(uuid);
|
||||
}
|
||||
}
|
||||
|
@ -628,6 +653,7 @@ function reset() {
|
|||
removeAllNametags();
|
||||
_this.avatars = {};
|
||||
shouldToggleInterval();
|
||||
maybeClearAlwaysOnAvatarDistanceCheck();
|
||||
|
||||
return _this;
|
||||
}
|
||||
|
|
|
@ -8,8 +8,8 @@
|
|||
//
|
||||
// Click on someone to get a nametag for them
|
||||
//
|
||||
var PickRayController = Script.require('./resources/modules/pickRayController.js?' + Date.now());
|
||||
var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js?' + Date.now());
|
||||
var PickRayController = Script.require('./resources/modules/pickRayController.js');
|
||||
var NameTagListManager = Script.require('./resources/modules/nameTagListManager.js');
|
||||
var pickRayController = new PickRayController();
|
||||
var nameTagListManager = new NameTagListManager();
|
||||
|
||||
|
@ -31,6 +31,7 @@ function selectAvatar(uuid, intersection) {
|
|||
// Handles reset of list if you change domains
|
||||
function onDomainChange() {
|
||||
nameTagListManager.reset();
|
||||
nameTagListManager.handleAvatarNametagMode(avatarNametagMode);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue