mirror of
https://github.com/overte-org/overte.git
synced 2025-04-27 08:36:34 +02:00
89 lines
3.7 KiB
JavaScript
89 lines
3.7 KiB
JavaScript
"use strict";
|
|
|
|
// highlightNearbyEntities.js
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
|
|
|
|
/* global Script, Controller, RIGHT_HAND, LEFT_HAND, MyAvatar, getGrabPointSphereOffset,
|
|
makeRunningValues, Entities, enableDispatcherModule, disableDispatcherModule, makeDispatcherModuleParameters,
|
|
PICK_MAX_DISTANCE, COLORS_GRAB_SEARCHING_HALF_SQUEEZE, COLORS_GRAB_SEARCHING_FULL_SQUEEZE, COLORS_GRAB_DISTANCE_HOLD,
|
|
DEFAULT_SEARCH_SPHERE_DISTANCE, getGrabbableData, makeLaserParams
|
|
*/
|
|
|
|
(function () {
|
|
Script.include("/~/system/libraries/controllerDispatcherUtils.js");
|
|
Script.include("/~/system/libraries/controllers.js");
|
|
var dispatcherUtils = Script.require("/~/system/libraries/controllerDispatcherUtils.js");
|
|
function HighlightNearbyEntities(hand) {
|
|
this.hand = hand;
|
|
this.highlightedEntities = [];
|
|
|
|
this.parameters = dispatcherUtils.makeDispatcherModuleParameters(
|
|
480,
|
|
this.hand === dispatcherUtils.RIGHT_HAND ? ["rightHand"] : ["leftHand"],
|
|
[],
|
|
100);
|
|
|
|
|
|
this.isGrabable = function(controllerData, props) {
|
|
if (dispatcherUtils.entityIsGrabbable(props) || dispatcherUtils.entityIsCloneable(props)) {
|
|
// if we've attempted to grab a child, roll up to the root of the tree
|
|
var groupRootProps = dispatcherUtils.findGroupParent(controllerData, props);
|
|
if (dispatcherUtils.entityIsGrabbable(groupRootProps)) {
|
|
return true;
|
|
}
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
this.hasHyperLink = function(props) {
|
|
return (props.href !== "" && props.href !== undefined);
|
|
};
|
|
|
|
this.highlightEntities = function(controllerData) {
|
|
if (this.highlightedEntities.length > 0) {
|
|
//print("-----> clearing
|
|
//dispatcherUtils.clearHighlightedEntities();
|
|
this.highlightedEntities = [];
|
|
}
|
|
|
|
var nearbyEntitiesProperties = controllerData.nearbyEntityProperties[this.hand];
|
|
var sensorScaleFactor = MyAvatar.sensorToWorldScale;
|
|
for (var i = 0; i < nearbyEntitiesProperties.length; i++) {
|
|
var props = nearbyEntitiesProperties[i];
|
|
if (props.distance > dispatcherUtils.NEAR_GRAB_RADIUS * sensorScaleFactor) {
|
|
continue;
|
|
}
|
|
if (this.isGrabable(controllerData, props) || this.hasHyperLink(props)) {
|
|
dispatcherUtils.highlightTargetEntity(props.id);
|
|
this.highlightedEntities.push(props.id);
|
|
}
|
|
}
|
|
};
|
|
|
|
this.isReady = function(controllerData) {
|
|
this.highlightEntities(controllerData);
|
|
return dispatcherUtils.makeRunningValues(false, [], []);
|
|
};
|
|
|
|
this.run = function(controllerData) {
|
|
return this.isReady(controllerData);
|
|
};
|
|
}
|
|
|
|
var leftHighlightNearbyEntities = new HighlightNearbyEntities(dispatcherUtils.LEFT_HAND);
|
|
var rightHighlightNearbyEntities = new HighlightNearbyEntities(dispatcherUtils.RIGHT_HAND);
|
|
|
|
dispatcherUtils.enableDispatcherModule("LeftHighlightNearbyEntities", leftHighlightNearbyEntities);
|
|
dispatcherUtils.enableDispatcherModule("RightHighlightNearbyEntities", rightHighlightNearbyEntities);
|
|
|
|
function cleanup() {
|
|
dispatcherUtils.disableDispatcherModule("LeftHighlightNearbyEntities");
|
|
dispatcherUtils.disableDispatcherModule("RightHighlightNearbyEntities");
|
|
}
|
|
|
|
Script.scriptEnding.connect(cleanup);
|
|
}());
|