Grabber Tool Move up, remove billboard on grabbermoveupoverlay

This commit is contained in:
Daniela 2017-10-19 18:05:51 +01:00
parent e9f3dd6e44
commit a02ee5b7d5

View file

@ -3,7 +3,7 @@
// examples // examples
// //
// Created by Brad hefta-Gaub on 10/1/14. // Created by Brad hefta-Gaub on 10/1/14.
// Modified by Daniela Fontes @DanielaFifo and Tiago Andrade @TagoWill on 4/7/2017 // Modified by Daniela Fontes * @DanielaFifo and Tiago Andrade @TagoWill on 4/7/2017
// Copyright 2014 High Fidelity, Inc. // Copyright 2014 High Fidelity, Inc.
// //
// This script implements a class useful for building tools for editing entities. // This script implements a class useful for building tools for editing entities.
@ -71,44 +71,16 @@ SelectionManager = (function() {
that.selections = []; that.selections = [];
var listeners = []; var listeners = [];
that.localRotation = Quat.fromPitchYawRollDegrees(0, 0, 0); that.localRotation = Quat.IDENTITY;
that.localPosition = { that.localPosition = Vec3.ZERO;
x: 0, that.localDimensions = Vec3.ZERO;
y: 0, that.localRegistrationPoint = Vec3.HALF;
z: 0
};
that.localDimensions = {
x: 0,
y: 0,
z: 0
};
that.localRegistrationPoint = {
x: 0.5,
y: 0.5,
z: 0.5
};
that.worldRotation = Quat.fromPitchYawRollDegrees(0, 0, 0); that.worldRotation = Quat.IDENTITY;
that.worldPosition = { that.worldPosition = Vec3.ZERO;
x: 0, that.worldDimensions = Vec3.ZERO;
y: 0, that.worldRegistrationPoint = Vec3.HALF;
z: 0 that.centerPosition = Vec3.ZERO;
};
that.worldDimensions = {
x: 0,
y: 0,
z: 0
};
that.worldRegistrationPoint = {
x: 0.5,
y: 0.5,
z: 0.5
};
that.centerPosition = {
x: 0,
y: 0,
z: 0
};
that.saveProperties = function() { that.saveProperties = function() {
that.savedProperties = {}; that.savedProperties = {};
@ -231,6 +203,14 @@ SelectionManager = (function() {
print("ERROR: entitySelectionTool.update got exception: " + JSON.stringify(e)); print("ERROR: entitySelectionTool.update got exception: " + JSON.stringify(e));
} }
} }
//update overlay to face Avatar
if ((!activeTool) || isActiveTool(grabberMoveUp)) {
Overlays.editOverlay(grabberMoveUp, {
rotation: Quat.lookAt(grabberMoveUpPosition, Camera.position, Quat.getUp(MyAvatar.orientation))
});
}
}; };
return that; return that;
@ -350,11 +330,7 @@ SelectionDisplay = (function() {
}; };
var grabberLineWidth = 0.5; var grabberLineWidth = 0.5;
var grabberSolid = true; var grabberSolid = true;
var grabberMoveUpPosition = { var grabberMoveUpPosition = Vec3.ZERO;
x: 0,
y: 0,
z: 0
};
var lightOverlayColor = { var lightOverlayColor = {
red: 255, red: 255,
@ -363,11 +339,7 @@ SelectionDisplay = (function() {
}; };
var grabberPropertiesCorner = { var grabberPropertiesCorner = {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: grabberSizeCorner, size: grabberSizeCorner,
color: grabberColorCorner, color: grabberColorCorner,
alpha: 1, alpha: 1,
@ -380,11 +352,7 @@ SelectionDisplay = (function() {
}; };
var grabberPropertiesEdge = { var grabberPropertiesEdge = {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: grabberSizeEdge, size: grabberSizeEdge,
color: grabberColorEdge, color: grabberColorEdge,
alpha: 1, alpha: 1,
@ -397,11 +365,7 @@ SelectionDisplay = (function() {
}; };
var grabberPropertiesFace = { var grabberPropertiesFace = {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: grabberSizeFace, size: grabberSizeFace,
color: grabberColorFace, color: grabberColorFace,
alpha: 1, alpha: 1,
@ -414,11 +378,7 @@ SelectionDisplay = (function() {
}; };
var grabberPropertiesCloner = { var grabberPropertiesCloner = {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: grabberSizeCorner, size: grabberSizeCorner,
color: grabberColorCloner, color: grabberColorCloner,
alpha: 1, alpha: 1,
@ -436,11 +396,7 @@ SelectionDisplay = (function() {
}; };
var highlightBox = Overlays.addOverlay("cube", { var highlightBox = Overlays.addOverlay("cube", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: 1, size: 1,
color: { color: {
red: 90, red: 90,
@ -457,11 +413,7 @@ SelectionDisplay = (function() {
}); });
var selectionBox = Overlays.addOverlay("cube", { var selectionBox = Overlays.addOverlay("cube", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: 1, size: 1,
color: { color: {
red: 255, red: 255,
@ -478,11 +430,7 @@ SelectionDisplay = (function() {
var selectionBoxes = []; var selectionBoxes = [];
var rotationDegreesDisplay = Overlays.addOverlay("text3d", { var rotationDegreesDisplay = Overlays.addOverlay("text3d", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
text: "", text: "",
color: { color: {
red: 0, red: 0,
@ -513,17 +461,12 @@ SelectionDisplay = (function() {
var grabberMoveUp = Overlays.addOverlay("image3d", { var grabberMoveUp = Overlays.addOverlay("image3d", {
url: HIFI_PUBLIC_BUCKET + "images/up-arrow.svg", url: HIFI_PUBLIC_BUCKET + "images/up-arrow.svg",
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
color: handleColor, color: handleColor,
alpha: handleAlpha, alpha: handleAlpha,
visible: false, visible: false,
size: 0.1, size: 0.1,
scale: 0.1, scale: 0.1,
isFacingAvatar: true,
drawInFront: true drawInFront: true
}); });
@ -720,16 +663,8 @@ SelectionDisplay = (function() {
var xRailOverlay = Overlays.addOverlay("line3d", { var xRailOverlay = Overlays.addOverlay("line3d", {
visible: false, visible: false,
lineWidth: 1.0, lineWidth: 1.0,
start: { start: Vec3.ZERO,
x: 0, end: Vec3.ZERO,
y: 0,
z: 0
},
end: {
x: 0,
y: 0,
z: 0
},
color: { color: {
red: 255, red: 255,
green: 0, green: 0,
@ -740,16 +675,8 @@ SelectionDisplay = (function() {
var yRailOverlay = Overlays.addOverlay("line3d", { var yRailOverlay = Overlays.addOverlay("line3d", {
visible: false, visible: false,
lineWidth: 1.0, lineWidth: 1.0,
start: { start: Vec3.ZERO,
x: 0, end: Vec3.ZERO,
y: 0,
z: 0
},
end: {
x: 0,
y: 0,
z: 0
},
color: { color: {
red: 0, red: 0,
green: 255, green: 255,
@ -760,16 +687,8 @@ SelectionDisplay = (function() {
var zRailOverlay = Overlays.addOverlay("line3d", { var zRailOverlay = Overlays.addOverlay("line3d", {
visible: false, visible: false,
lineWidth: 1.0, lineWidth: 1.0,
start: { start: Vec3.ZERO,
x: 0, end: Vec3.ZERO,
y: 0,
z: 0
},
end: {
x: 0,
y: 0,
z: 0
},
color: { color: {
red: 0, red: 0,
green: 0, green: 0,
@ -781,16 +700,8 @@ SelectionDisplay = (function() {
var rotateZeroOverlay = Overlays.addOverlay("line3d", { var rotateZeroOverlay = Overlays.addOverlay("line3d", {
visible: false, visible: false,
lineWidth: 2.0, lineWidth: 2.0,
start: { start: Vec3.ZERO,
x: 0, end: Vec3.ZERO,
y: 0,
z: 0
},
end: {
x: 0,
y: 0,
z: 0
},
color: { color: {
red: 255, red: 255,
green: 0, green: 0,
@ -802,16 +713,8 @@ SelectionDisplay = (function() {
var rotateCurrentOverlay = Overlays.addOverlay("line3d", { var rotateCurrentOverlay = Overlays.addOverlay("line3d", {
visible: false, visible: false,
lineWidth: 2.0, lineWidth: 2.0,
start: { start: Vec3.ZERO,
x: 0, end: Vec3.ZERO,
y: 0,
z: 0
},
end: {
x: 0,
y: 0,
z: 0
},
color: { color: {
red: 0, red: 0,
green: 0, green: 0,
@ -822,11 +725,7 @@ SelectionDisplay = (function() {
var rotateOverlayInner = Overlays.addOverlay("circle3d", { var rotateOverlayInner = Overlays.addOverlay("circle3d", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: 1, size: 1,
color: { color: {
red: 51, red: 51,
@ -856,11 +755,7 @@ SelectionDisplay = (function() {
}); });
var rotateOverlayOuter = Overlays.addOverlay("circle3d", { var rotateOverlayOuter = Overlays.addOverlay("circle3d", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: 1, size: 1,
color: { color: {
red: 51, red: 51,
@ -891,11 +786,7 @@ SelectionDisplay = (function() {
}); });
var rotateOverlayCurrent = Overlays.addOverlay("circle3d", { var rotateOverlayCurrent = Overlays.addOverlay("circle3d", {
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
size: 1, size: 1,
color: { color: {
red: 224, red: 224,
@ -922,11 +813,7 @@ SelectionDisplay = (function() {
var yawHandle = Overlays.addOverlay("image3d", { var yawHandle = Overlays.addOverlay("image3d", {
url: ROTATE_ARROW_WEST_NORTH_URL, url: ROTATE_ARROW_WEST_NORTH_URL,
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
color: handleColor, color: handleColor,
alpha: handleAlpha, alpha: handleAlpha,
visible: false, visible: false,
@ -939,11 +826,7 @@ SelectionDisplay = (function() {
var pitchHandle = Overlays.addOverlay("image3d", { var pitchHandle = Overlays.addOverlay("image3d", {
url: ROTATE_ARROW_WEST_NORTH_URL, url: ROTATE_ARROW_WEST_NORTH_URL,
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
color: handleColor, color: handleColor,
alpha: handleAlpha, alpha: handleAlpha,
visible: false, visible: false,
@ -956,11 +839,7 @@ SelectionDisplay = (function() {
var rollHandle = Overlays.addOverlay("image3d", { var rollHandle = Overlays.addOverlay("image3d", {
url: ROTATE_ARROW_WEST_NORTH_URL, url: ROTATE_ARROW_WEST_NORTH_URL,
position: { position: Vec3.ZERO,
x: 0,
y: 0,
z: 0
},
color: handleColor, color: handleColor,
alpha: handleAlpha, alpha: handleAlpha,
visible: false, visible: false,
@ -1550,11 +1429,11 @@ SelectionDisplay = (function() {
Overlays.editOverlay(rollHandle, { Overlays.editOverlay(rollHandle, {
scale: handleSize scale: handleSize
}); });
var pos = Vec3.sum(grabberMoveUpPosition, { var upDiff = Vec3.multiply((
x: 0, Vec3.length(diff) * GRABBER_DISTANCE_TO_SIZE_RATIO * 3),
y: Vec3.length(diff) * GRABBER_DISTANCE_TO_SIZE_RATIO * 3, Quat.getUp(MyAvatar.orientation)
z: 0 );
}); var pos = Vec3.sum(grabberMoveUpPosition, upDiff);
Overlays.editOverlay(grabberMoveUp, { Overlays.editOverlay(grabberMoveUp, {
position: pos, position: pos,
scale: handleSize / 1.25 scale: handleSize / 1.25
@ -1636,7 +1515,7 @@ SelectionDisplay = (function() {
position = SelectionManager.localPosition; position = SelectionManager.localPosition;
registrationPoint = SelectionManager.localRegistrationPoint; registrationPoint = SelectionManager.localRegistrationPoint;
} else { } else {
rotation = Quat.fromPitchYawRollDegrees(0, 0, 0); rotation = Quat.IDENTITY;
dimensions = SelectionManager.worldDimensions; dimensions = SelectionManager.worldDimensions;
position = SelectionManager.worldPosition; position = SelectionManager.worldPosition;
registrationPoint = SelectionManager.worldRegistrationPoint; registrationPoint = SelectionManager.worldRegistrationPoint;
@ -2227,13 +2106,15 @@ SelectionDisplay = (function() {
}); });
var grabberMoveUpOffset = 0.1; var grabberMoveUpOffset = 0.1;
var upVec = Quat.getUp(MyAvatar.orientation);
grabberMoveUpPosition = { grabberMoveUpPosition = {
x: position.x, x: position.x + (grabberMoveUpOffset + worldTop) * upVec.x ,
y: position.y + worldTop + grabberMoveUpOffset, y: position.y+ (grabberMoveUpOffset + worldTop) * upVec.y,
z: position.z z: position.z + (grabberMoveUpOffset + worldTop) * upVec.z
}; };
Overlays.editOverlay(grabberMoveUp, { Overlays.editOverlay(grabberMoveUp, {
visible: (!activeTool) || isActiveTool(grabberMoveUp) visible: (!activeTool) || isActiveTool(grabberMoveUp),
rotation: Quat.lookAt(grabberMoveUpPosition, Camera.position, upVec)
}); });
Overlays.editOverlay(baseOfEntityProjectionOverlay, { Overlays.editOverlay(baseOfEntityProjectionOverlay, {
@ -2544,9 +2425,6 @@ SelectionDisplay = (function() {
mode: "TRANSLATE_UP_DOWN", mode: "TRANSLATE_UP_DOWN",
onBegin: function(event, pickRay, pickResult) { onBegin: function(event, pickRay, pickResult) {
upDownPickNormal = Quat.getForward(lastCameraOrientation); upDownPickNormal = Quat.getForward(lastCameraOrientation);
// Remove y component so the y-axis lies along the plane we're picking on - this will
// give movements that follow the mouse.
upDownPickNormal.y = 0;
lastXYPick = rayPlaneIntersection(pickRay, SelectionManager.worldPosition, upDownPickNormal); lastXYPick = rayPlaneIntersection(pickRay, SelectionManager.worldPosition, upDownPickNormal);
SelectionManager.saveProperties(); SelectionManager.saveProperties();
@ -2583,11 +2461,17 @@ SelectionDisplay = (function() {
var newIntersection = rayPlaneIntersection(pickRay, SelectionManager.worldPosition, upDownPickNormal); var newIntersection = rayPlaneIntersection(pickRay, SelectionManager.worldPosition, upDownPickNormal);
var vector = Vec3.subtract(newIntersection, lastXYPick); var vector = Vec3.subtract(newIntersection, lastXYPick);
// project vector onto avatar up vector
// we want the avatar referential not the camera.
var avatarUpVector = Quat.getUp(MyAvatar.orientation);
var dotVectorUp = Vec3.dot(vector, avatarUpVector);
vector = Vec3.multiply(dotVectorUp, avatarUpVector);
vector = grid.snapToGrid(vector); vector = grid.snapToGrid(vector);
// we only care about the Y axis
vector.x = 0;
vector.z = 0;
var wantDebug = false; var wantDebug = false;
if (wantDebug) { if (wantDebug) {
@ -2692,7 +2576,7 @@ SelectionDisplay = (function() {
var onBegin = function(event, pickRay, pickResult) { var onBegin = function(event, pickRay, pickResult) {
var properties = Entities.getEntityProperties(SelectionManager.selections[0]); var properties = Entities.getEntityProperties(SelectionManager.selections[0]);
initialProperties = properties; initialProperties = properties;
rotation = (spaceMode === SPACE_LOCAL) ? properties.rotation : Quat.fromPitchYawRollDegrees(0, 0, 0); rotation = (spaceMode === SPACE_LOCAL) ? properties.rotation : Quat.IDENTITY;
if (spaceMode === SPACE_LOCAL) { if (spaceMode === SPACE_LOCAL) {
rotation = SelectionManager.localRotation; rotation = SelectionManager.localRotation;