mirror of
https://github.com/Armored-Dragon/overte.git
synced 2025-03-11 16:13:16 +01:00
near grab logic to uses sphere vs entity box
instead of sphere vs sphere. Adjusted debug drawing accordingly.
This commit is contained in:
parent
eabb8d08c0
commit
7bd553c09c
1 changed files with 47 additions and 23 deletions
|
@ -38,7 +38,7 @@ var HAND_HEAD_MIX_RATIO = 0.0; // 0 = only use hands for search/move. 1 = only
|
||||||
|
|
||||||
var PICK_WITH_HAND_RAY = true;
|
var PICK_WITH_HAND_RAY = true;
|
||||||
|
|
||||||
var DRAW_GRAB_SPHERES = false;
|
var DRAW_GRAB_BOXES = false;
|
||||||
var DRAW_HAND_SPHERES = false;
|
var DRAW_HAND_SPHERES = false;
|
||||||
var DROP_WITHOUT_SHAKE = false;
|
var DROP_WITHOUT_SHAKE = false;
|
||||||
|
|
||||||
|
@ -80,6 +80,8 @@ var EQUIP_RADIUS = 0.1; // radius used for palm vs equip-hotspot for equipping.
|
||||||
var NEAR_GRABBING_ACTION_TIMEFRAME = 0.05; // how quickly objects move to their new position
|
var NEAR_GRABBING_ACTION_TIMEFRAME = 0.05; // how quickly objects move to their new position
|
||||||
|
|
||||||
var NEAR_GRAB_RADIUS = 0.15; // radius used for palm vs object for near grabbing.
|
var NEAR_GRAB_RADIUS = 0.15; // radius used for palm vs object for near grabbing.
|
||||||
|
var NEAR_GRAB_MAX_DISTANCE = 1.0; // you cannot grab objects that are this far away from your hand
|
||||||
|
|
||||||
var NEAR_GRAB_PICK_RADIUS = 0.25; // radius used for search ray vs object for near grabbing.
|
var NEAR_GRAB_PICK_RADIUS = 0.25; // radius used for search ray vs object for near grabbing.
|
||||||
|
|
||||||
var PICK_BACKOFF_DISTANCE = 0.2; // helps when hand is intersecting the grabble object
|
var PICK_BACKOFF_DISTANCE = 0.2; // helps when hand is intersecting the grabble object
|
||||||
|
@ -870,26 +872,48 @@ function MyController(hand) {
|
||||||
this.createHotspots = function () {
|
this.createHotspots = function () {
|
||||||
var props, overlay;
|
var props, overlay;
|
||||||
|
|
||||||
var HAND_SPHERE_COLOR = { red: 90, green: 255, blue: 90 };
|
var HAND_EQUIP_SPHERE_COLOR = { red: 90, green: 255, blue: 90 };
|
||||||
var HAND_SPHERE_ALPHA = 0.7;
|
var HAND_EQUIP_SPHERE_ALPHA = 0.7;
|
||||||
var HAND_SPHERE_RADIUS = 0.01;
|
var HAND_EQUIP_SPHERE_RADIUS = 0.01;
|
||||||
|
|
||||||
|
var HAND_GRAB_SPHERE_COLOR = { red: 90, green: 90, blue: 255 };
|
||||||
|
var HAND_GRAB_SPHERE_ALPHA = 0.3;
|
||||||
|
var HAND_GRAB_SPHERE_RADIUS = NEAR_GRAB_RADIUS;
|
||||||
|
|
||||||
var EQUIP_SPHERE_COLOR = { red: 90, green: 255, blue: 90 };
|
var EQUIP_SPHERE_COLOR = { red: 90, green: 255, blue: 90 };
|
||||||
var EQUIP_SPHERE_ALPHA = 0.3;
|
var EQUIP_SPHERE_ALPHA = 0.3;
|
||||||
|
|
||||||
var NEAR_SPHERE_COLOR = { red: 90, green: 90, blue: 255 };
|
var GRAB_BOX_COLOR = { red: 90, green: 90, blue: 255 };
|
||||||
var NEAR_SPHERE_ALPHA = 0.1;
|
var GRAB_BOX_ALPHA = 0.1;
|
||||||
|
|
||||||
this.hotspotOverlays = [];
|
this.hotspotOverlays = [];
|
||||||
|
|
||||||
if (DRAW_HAND_SPHERES) {
|
if (DRAW_HAND_SPHERES) {
|
||||||
// add tiny spheres around the palm.
|
// add tiny green sphere around the palm.
|
||||||
var handPosition = this.getHandPosition();
|
var handPosition = this.getHandPosition();
|
||||||
overlay = Overlays.addOverlay("sphere", {
|
overlay = Overlays.addOverlay("sphere", {
|
||||||
position: handPosition,
|
position: handPosition,
|
||||||
size: HAND_SPHERE_RADIUS * 2,
|
size: HAND_EQUIP_SPHERE_RADIUS * 2,
|
||||||
color: HAND_SPHERE_COLOR,
|
color: HAND_EQUIP_SPHERE_COLOR,
|
||||||
alpha: HAND_SPHERE_ALPHA,
|
alpha: HAND_EQUIP_SPHERE_ALPHA,
|
||||||
|
solid: true,
|
||||||
|
visible: true,
|
||||||
|
ignoreRayIntersection: true,
|
||||||
|
drawInFront: false
|
||||||
|
});
|
||||||
|
|
||||||
|
this.hotspotOverlays.push({
|
||||||
|
entityID: undefined,
|
||||||
|
overlay: overlay,
|
||||||
|
type: "hand"
|
||||||
|
});
|
||||||
|
|
||||||
|
// add larger blue sphere around the palm.
|
||||||
|
overlay = Overlays.addOverlay("sphere", {
|
||||||
|
position: handPosition,
|
||||||
|
size: HAND_GRAB_SPHERE_RADIUS * 2,
|
||||||
|
color: HAND_GRAB_SPHERE_COLOR,
|
||||||
|
alpha: HAND_GRAB_SPHERE_ALPHA,
|
||||||
solid: true,
|
solid: true,
|
||||||
visible: true,
|
visible: true,
|
||||||
ignoreRayIntersection: true,
|
ignoreRayIntersection: true,
|
||||||
|
@ -931,15 +955,15 @@ function MyController(hand) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DRAW_GRAB_SPHERES && _this.entityIsGrabbable(entityID)) {
|
if (DRAW_GRAB_BOXES && _this.entityIsGrabbable(entityID)) {
|
||||||
props = _this.entityPropertyCache.getProps(entityID);
|
props = _this.entityPropertyCache.getProps(entityID);
|
||||||
|
|
||||||
overlay = Overlays.addOverlay("sphere", {
|
overlay = Overlays.addOverlay("cube", {
|
||||||
rotation: props.rotation,
|
rotation: props.rotation,
|
||||||
position: props.position,
|
position: props.position,
|
||||||
size: NEAR_GRAB_RADIUS * 2,
|
size: props.dimensions, //{x: props.dimensions.x, y: props.dimensions.y, z: props.dimensions.z},
|
||||||
color: NEAR_SPHERE_COLOR,
|
color: GRAB_BOX_COLOR,
|
||||||
alpha: NEAR_SPHERE_ALPHA,
|
alpha: GRAB_BOX_ALPHA,
|
||||||
solid: true,
|
solid: true,
|
||||||
visible: true,
|
visible: true,
|
||||||
ignoreRayIntersection: true,
|
ignoreRayIntersection: true,
|
||||||
|
@ -1254,7 +1278,7 @@ function MyController(hand) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var grabbableEntities = candidateEntities.filter(function (entity) {
|
var grabbableEntities = candidateEntities.filter(function (entity) {
|
||||||
return _this.entityIsNearGrabbable(entity, handPosition, NEAR_GRAB_RADIUS);
|
return _this.entityIsNearGrabbable(entity, handPosition, NEAR_GRAB_MAX_DISTANCE);
|
||||||
});
|
});
|
||||||
|
|
||||||
var rayPickInfo = this.calcRayPickInfo(this.hand);
|
var rayPickInfo = this.calcRayPickInfo(this.hand);
|
||||||
|
@ -1807,11 +1831,11 @@ function MyController(hand) {
|
||||||
this.lastUnequipCheckTime = now;
|
this.lastUnequipCheckTime = now;
|
||||||
|
|
||||||
if (props.parentID == MyAvatar.sessionUUID &&
|
if (props.parentID == MyAvatar.sessionUUID &&
|
||||||
Vec3.length(props.localPosition) > NEAR_GRAB_PICK_RADIUS * 2.0) {
|
Vec3.length(props.localPosition) > NEAR_GRAB_MAX_DISTANCE) {
|
||||||
var handPosition = this.getHandPosition();
|
var handPosition = this.getHandPosition();
|
||||||
// the center of the equipped object being far from the hand isn't enough to autoequip -- we also
|
// the center of the equipped object being far from the hand isn't enough to autoequip -- we also
|
||||||
// need to fail the findEntities test.
|
// need to fail the findEntities test.
|
||||||
var nearPickedCandidateEntities = Entities.findEntities(handPosition, EQUIP_RADIUS);
|
var nearPickedCandidateEntities = Entities.findEntities(handPosition, NEAR_GRAB_RADIUS);
|
||||||
if (nearPickedCandidateEntities.indexOf(this.grabbedEntity) == -1) {
|
if (nearPickedCandidateEntities.indexOf(this.grabbedEntity) == -1) {
|
||||||
// for whatever reason, the held/equipped entity has been pulled away. ungrab or unequip.
|
// for whatever reason, the held/equipped entity has been pulled away. ungrab or unequip.
|
||||||
print("handControllerGrab -- autoreleasing held or equipped item because it is far from hand." +
|
print("handControllerGrab -- autoreleasing held or equipped item because it is far from hand." +
|
||||||
|
@ -2270,18 +2294,18 @@ Menu.addMenuItem({
|
||||||
|
|
||||||
Menu.addMenuItem({
|
Menu.addMenuItem({
|
||||||
menuName: "Developer > Grab Script",
|
menuName: "Developer > Grab Script",
|
||||||
menuItemName: "Draw Grab Spheres",
|
menuItemName: "Draw Grab Boxes",
|
||||||
isCheckable: true,
|
isCheckable: true,
|
||||||
isChecked: DRAW_GRAB_SPHERES
|
isChecked: DRAW_GRAB_BOXES
|
||||||
});
|
});
|
||||||
|
|
||||||
function handleMenuItemEvent(menuItem) {
|
function handleMenuItemEvent(menuItem) {
|
||||||
if (menuItem === "Drop Without Shake") {
|
if (menuItem === "Drop Without Shake") {
|
||||||
DROP_WITHOUT_SHAKE = Menu.isOptionChecked("Drop Without Shake");
|
DROP_WITHOUT_SHAKE = Menu.isOptionChecked("Drop Without Shake");
|
||||||
}
|
}
|
||||||
if (menuItem === "Draw Grab Spheres") {
|
if (menuItem === "Draw Grab Boxes") {
|
||||||
DRAW_GRAB_SPHERES = Menu.isOptionChecked("Draw Grab Spheres");
|
DRAW_GRAB_BOXES = Menu.isOptionChecked("Draw Grab Boxes");
|
||||||
DRAW_HAND_SPHERES = DRAW_GRAB_SPHERES;
|
DRAW_HAND_SPHERES = DRAW_GRAB_BOXES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue