From dfb4c7cf89c524f767d0e38fdc6de37bfedbc27d Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 01:41:19 +0100 Subject: [PATCH 1/8] avatarFinderBeacon --- scripts/system/avatarFinderBeacon.js | 87 ++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 scripts/system/avatarFinderBeacon.js diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js new file mode 100644 index 0000000000..ca13f417e3 --- /dev/null +++ b/scripts/system/avatarFinderBeacon.js @@ -0,0 +1,87 @@ +// avatarFinderBeacon.js +// +// Created by Thijs Wenker on 12/7/16 +// Copyright 2016 High Fidelity, Inc. +// +// Shows 2km long red beams for each avatar outside of the 10 meter radius of your avatar, tries to ignore AC Agents. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html + +var MIN_DISPLAY_DISTANCE = 10.0; // meters +var BEAM_COLOR = {red: 255, green: 0, blue: 0}; +var SHOW_THROUGH_WALLS = false; +var BEACON_LENGTH = 2000.0; // meters +var TRY_TO_IGNORE_AC_AGENTS = true; + +var HALF_BEACON_LENGTH = BEACON_LENGTH / 2.0; + +var beacons = {}; + +// List of .fst files used by AC scripts, that should be ignored in the script in case TRY_TO_IGNORE_AC_AGENTS is enabled +var POSSIBLE_AC_AVATARS = [ + 'http://hifi-content.s3.amazonaws.com/ozan/dev/avatars/invisible_avatar/invisible_avatar.fst' +]; + +AvatarFinderBeacon = function(avatar) { + var visible = false; + this.overlay = Overlays.addOverlay('line3d', { + color: BEAM_COLOR, + dashed: false, + start: Vec3.sum(avatar.position, {x: 0, y: -HALF_BEACON_LENGTH, z: 0}), + end: Vec3.sum(avatar.position, {x: 0, y: HALF_BEACON_LENGTH, z: 0}), + rotation: {x: 0, y: 0, z: 0, w: 1}, + visible: visible, + drawInFront: SHOW_THROUGH_WALLS, + ignoreRayIntersection: true, + parentID: avatar.sessionUUID, + parentJointIndex: -2 + }); + this.cleanup = function() { + Overlays.deleteOverlay(this.overlay); + }; + this.shouldShow = function() { + return (Vec3.distance(MyAvatar.position, avatar.position) >= MIN_DISPLAY_DISTANCE); + }; + this.update = function() { + avatar = AvatarList.getAvatar(avatar.sessionUUID); + Overlays.editOverlay(this.overlay, { + visible: this.shouldShow() + }); + }; +}; + +function updateBeacon(avatarSessionUUID) { + if (!(avatarSessionUUID in beacons)) { + var avatar = AvatarList.getAvatar(avatarSessionUUID); + if (TRY_TO_IGNORE_AC_AGENTS && (POSSIBLE_AC_AVATARS.indexOf(avatar.skeletonModelURL) !== -1 || + Vec3.length(avatar.position) === 0.0)) { + return; + } + beacons[avatarSessionUUID] = new AvatarFinderBeacon(avatar); + return; + } + beacons[avatarSessionUUID].update(); +} + +Script.update.connect(function() { + AvatarList.getAvatarIdentifiers().forEach(function(avatarSessionUUID) { + updateBeacon(avatarSessionUUID); + }); +}); + +AvatarList.avatarRemovedEvent.connect(function(avatarSessionUUID) { + if (avatarSessionUUID in beacons) { + beacons[avatarSessionUUID].clear(); + delete beacons[avatarSessionUUID]; + } +}); + +Script.scriptEnding.connect(function() { + for (var sessionUUID in beacons) { + if (!beacons.hasOwnProperty(sessionUUID)) { + return; + } + beacons[sessionUUID].cleanup(); + } +}); From 387f73b349defd2c3b8ba83c80d297fbf165ebf8 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 02:11:05 +0100 Subject: [PATCH 2/8] reset avatar beacons on domain change --- scripts/system/avatarFinderBeacon.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index ca13f417e3..9005e69a5e 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -64,6 +64,10 @@ function updateBeacon(avatarSessionUUID) { beacons[avatarSessionUUID].update(); } +Window.domainChanged.connect(function () { + beacons = {}; +}); + Script.update.connect(function() { AvatarList.getAvatarIdentifiers().forEach(function(avatarSessionUUID) { updateBeacon(avatarSessionUUID); From 28e8bb69ec8d45c910e1b6dc52bb539fa794ac44 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 02:29:21 +0100 Subject: [PATCH 3/8] ignore camera man --- scripts/system/avatarFinderBeacon.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index 9005e69a5e..b81415d1bf 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -20,7 +20,8 @@ var beacons = {}; // List of .fst files used by AC scripts, that should be ignored in the script in case TRY_TO_IGNORE_AC_AGENTS is enabled var POSSIBLE_AC_AVATARS = [ - 'http://hifi-content.s3.amazonaws.com/ozan/dev/avatars/invisible_avatar/invisible_avatar.fst' + 'http://hifi-content.s3.amazonaws.com/ozan/dev/avatars/invisible_avatar/invisible_avatar.fst', + 'http://hifi-content.s3.amazonaws.com/ozan/dev/avatars/camera_man/pod/_latest/camera_man_pod.fst' ]; AvatarFinderBeacon = function(avatar) { From 3ceac7d07148300a61ff37a4c5f0fca3d0ac5944 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 02:44:43 +0100 Subject: [PATCH 4/8] Fix for "cannot access member `sessionUUID' of deleted QObject" error --- scripts/system/avatarFinderBeacon.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index b81415d1bf..8076fd4a67 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -26,6 +26,7 @@ var POSSIBLE_AC_AVATARS = [ AvatarFinderBeacon = function(avatar) { var visible = false; + var avatarSessionUUID = avatar.sessionUUID; this.overlay = Overlays.addOverlay('line3d', { color: BEAM_COLOR, dashed: false, @@ -35,7 +36,7 @@ AvatarFinderBeacon = function(avatar) { visible: visible, drawInFront: SHOW_THROUGH_WALLS, ignoreRayIntersection: true, - parentID: avatar.sessionUUID, + parentID: avatarSessionUUID, parentJointIndex: -2 }); this.cleanup = function() { @@ -45,7 +46,7 @@ AvatarFinderBeacon = function(avatar) { return (Vec3.distance(MyAvatar.position, avatar.position) >= MIN_DISPLAY_DISTANCE); }; this.update = function() { - avatar = AvatarList.getAvatar(avatar.sessionUUID); + avatar = AvatarList.getAvatar(avatarSessionUUID); Overlays.editOverlay(this.overlay, { visible: this.shouldShow() }); From 9397108b3b2e460a212402e8d69eb5dca5c28038 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 03:14:05 +0100 Subject: [PATCH 5/8] clear -> cleanup typo --- scripts/system/avatarFinderBeacon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index 8076fd4a67..ff8c975779 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -78,7 +78,7 @@ Script.update.connect(function() { AvatarList.avatarRemovedEvent.connect(function(avatarSessionUUID) { if (avatarSessionUUID in beacons) { - beacons[avatarSessionUUID].clear(); + beacons[avatarSessionUUID].cleanup(); delete beacons[avatarSessionUUID]; } }); From 3f9aa00fd60175db49e45f36c5a212e19ebed402 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 19:39:48 +0100 Subject: [PATCH 6/8] Increased show-radius to 20 meters --- scripts/system/avatarFinderBeacon.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index ff8c975779..05147683fd 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -3,12 +3,12 @@ // Created by Thijs Wenker on 12/7/16 // Copyright 2016 High Fidelity, Inc. // -// Shows 2km long red beams for each avatar outside of the 10 meter radius of your avatar, tries to ignore AC Agents. +// Shows 2km long red beams for each avatar outside of the 20 meter radius of your avatar, tries to ignore AC Agents. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -var MIN_DISPLAY_DISTANCE = 10.0; // meters +var MIN_DISPLAY_DISTANCE = 20.0; // meters var BEAM_COLOR = {red: 255, green: 0, blue: 0}; var SHOW_THROUGH_WALLS = false; var BEACON_LENGTH = 2000.0; // meters From 4d467deb5e7d12af236b959dbe052eff9b611f79 Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Fri, 9 Dec 2016 21:26:59 +0100 Subject: [PATCH 7/8] Fix if statement to match style rule 4.2.8 --- scripts/system/avatarFinderBeacon.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index 05147683fd..9594abd840 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -56,8 +56,8 @@ AvatarFinderBeacon = function(avatar) { function updateBeacon(avatarSessionUUID) { if (!(avatarSessionUUID in beacons)) { var avatar = AvatarList.getAvatar(avatarSessionUUID); - if (TRY_TO_IGNORE_AC_AGENTS && (POSSIBLE_AC_AVATARS.indexOf(avatar.skeletonModelURL) !== -1 || - Vec3.length(avatar.position) === 0.0)) { + if (TRY_TO_IGNORE_AC_AGENTS + && (POSSIBLE_AC_AVATARS.indexOf(avatar.skeletonModelURL) !== -1 || Vec3.length(avatar.position) === 0.0)) { return; } beacons[avatarSessionUUID] = new AvatarFinderBeacon(avatar); From 3ec06b1a6e03889788c8dd8f761304ef18ddf39b Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Sat, 10 Dec 2016 00:21:20 +0100 Subject: [PATCH 8/8] Remove redundant parentheses --- scripts/system/avatarFinderBeacon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/avatarFinderBeacon.js b/scripts/system/avatarFinderBeacon.js index 9594abd840..00f3d15fbb 100644 --- a/scripts/system/avatarFinderBeacon.js +++ b/scripts/system/avatarFinderBeacon.js @@ -43,7 +43,7 @@ AvatarFinderBeacon = function(avatar) { Overlays.deleteOverlay(this.overlay); }; this.shouldShow = function() { - return (Vec3.distance(MyAvatar.position, avatar.position) >= MIN_DISPLAY_DISTANCE); + return Vec3.distance(MyAvatar.position, avatar.position) >= MIN_DISPLAY_DISTANCE; }; this.update = function() { avatar = AvatarList.getAvatar(avatarSessionUUID);