Merge pull request #12570 from dback2/RC65

Redo entity scale handles to fix scaling into avatars causing undesirable physics/dimensions
This commit is contained in:
John Conklin II 2018-03-08 12:58:08 -08:00 committed by GitHub
commit c5514f5120
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -272,17 +272,19 @@ SelectionDisplay = (function() {
var STRETCH_SPHERE_OFFSET = 0.06; var STRETCH_SPHERE_OFFSET = 0.06;
var STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE = 0.01; var STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE = 0.01;
var STRETCH_MINIMUM_DIMENSION = 0.001; var STRETCH_MINIMUM_DIMENSION = 0.001;
var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 2; var STRETCH_ALL_MINIMUM_DIMENSION = 0.01;
var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 6;
var STRETCH_PANEL_WIDTH = 0.01; var STRETCH_PANEL_WIDTH = 0.01;
var SCALE_CUBE_OFFSET = 0.5; var SCALE_CUBE_OFFSET = 0.5;
var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.015; var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.015;
var SCALE_MINIMUM_DIMENSION = 0.02;
var CLONER_OFFSET = { x:0.9, y:-0.9, z:0.9 }; var CLONER_OFFSET = { x:0.9, y:-0.9, z:0.9 };
var CTRL_KEY_CODE = 16777249; var CTRL_KEY_CODE = 16777249;
var AVATAR_COLLISIONS_OPTION = "Enable Avatar Collisions";
var TRANSLATE_DIRECTION = { var TRANSLATE_DIRECTION = {
X : 0, X : 0,
Y : 1, Y : 1,
@ -336,6 +338,8 @@ SelectionDisplay = (function() {
var ctrlPressed = false; var ctrlPressed = false;
var handleStretchCollisionOverride = false;
var handlePropertiesTranslateArrowCones = { var handlePropertiesTranslateArrowCones = {
shape: "Cone", shape: "Cone",
solid: true, solid: true,
@ -458,12 +462,12 @@ SelectionDisplay = (function() {
borderSize: 1.4 borderSize: 1.4
}; };
var handleScaleLBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, -z) var handleScaleLBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, -z)
var handleScaleRBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, z) var handleScaleRBNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, -z)
var handleScaleLBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, -z) var handleScaleLBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, -y, z)
var handleScaleRBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, z) var handleScaleRBFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, -y, z)
var handleScaleLTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, -z) var handleScaleLTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, -z)
var handleScaleRTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, z) var handleScaleRTNCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, -z)
var handleScaleLTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, -z) var handleScaleLTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // (-x, y, z)
var handleScaleRTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, z) var handleScaleRTFCube = Overlays.addOverlay("cube", handlePropertiesScaleCubes); // ( x, y, z)
var handlePropertiesScaleEdge = { var handlePropertiesScaleEdge = {
@ -597,6 +601,11 @@ SelectionDisplay = (function() {
var activeTool = null; var activeTool = null;
var handleTools = {}; var handleTools = {};
that.shutdown = function() {
that.restoreAvatarCollisionsFromStretch();
}
Script.scriptEnding.connect(that.shutdown);
// We get mouseMoveEvents from the handControllers, via handControllerPointer. // We get mouseMoveEvents from the handControllers, via handControllerPointer.
// But we dont' get mousePressEvents. // But we dont' get mousePressEvents.
that.triggerMapping = Controller.newMapping(Script.resolvePath('') + '-click'); that.triggerMapping = Controller.newMapping(Script.resolvePath('') + '-click');
@ -1021,7 +1030,6 @@ SelectionDisplay = (function() {
return; return;
} }
if (SelectionManager.hasSelection()) { if (SelectionManager.hasSelection()) {
var position = SelectionManager.worldPosition; var position = SelectionManager.worldPosition;
var rotation = spaceMode === SPACE_LOCAL ? SelectionManager.localRotation : SelectionManager.worldRotation; var rotation = spaceMode === SPACE_LOCAL ? SelectionManager.localRotation : SelectionManager.worldRotation;
@ -1147,14 +1155,14 @@ SelectionDisplay = (function() {
rotation: scaleCubeRotation, rotation: scaleCubeRotation,
dimensions: scaleCubeDimensions dimensions: scaleCubeDimensions
}); });
var scaleRBNCubePosition = { x:-scaleCubeOffsetX, y:-scaleCubeOffsetY, z:scaleCubeOffsetZ }; var scaleRBNCubePosition = { x:scaleCubeOffsetX, y:-scaleCubeOffsetY, z:-scaleCubeOffsetZ };
scaleRBNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRBNCubePosition)); scaleRBNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRBNCubePosition));
Overlays.editOverlay(handleScaleRBNCube, { Overlays.editOverlay(handleScaleRBNCube, {
position: scaleRBNCubePosition, position: scaleRBNCubePosition,
rotation: scaleCubeRotation, rotation: scaleCubeRotation,
dimensions: scaleCubeDimensions dimensions: scaleCubeDimensions
}); });
var scaleLBFCubePosition = { x:scaleCubeOffsetX, y:-scaleCubeOffsetY, z:-scaleCubeOffsetZ }; var scaleLBFCubePosition = { x:-scaleCubeOffsetX, y:-scaleCubeOffsetY, z:scaleCubeOffsetZ };
scaleLBFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLBFCubePosition)); scaleLBFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLBFCubePosition));
Overlays.editOverlay(handleScaleLBFCube, { Overlays.editOverlay(handleScaleLBFCube, {
position: scaleLBFCubePosition, position: scaleLBFCubePosition,
@ -1175,14 +1183,14 @@ SelectionDisplay = (function() {
rotation: scaleCubeRotation, rotation: scaleCubeRotation,
dimensions: scaleCubeDimensions dimensions: scaleCubeDimensions
}); });
var scaleRTNCubePosition = { x:-scaleCubeOffsetX, y:scaleCubeOffsetY, z:scaleCubeOffsetZ }; var scaleRTNCubePosition = { x:scaleCubeOffsetX, y:scaleCubeOffsetY, z:-scaleCubeOffsetZ };
scaleRTNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRTNCubePosition)); scaleRTNCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleRTNCubePosition));
Overlays.editOverlay(handleScaleRTNCube, { Overlays.editOverlay(handleScaleRTNCube, {
position: scaleRTNCubePosition, position: scaleRTNCubePosition,
rotation: scaleCubeRotation, rotation: scaleCubeRotation,
dimensions: scaleCubeDimensions dimensions: scaleCubeDimensions
}); });
var scaleLTFCubePosition = { x:scaleCubeOffsetX, y:scaleCubeOffsetY, z:-scaleCubeOffsetZ }; var scaleLTFCubePosition = { x:-scaleCubeOffsetX, y:scaleCubeOffsetY, z:scaleCubeOffsetZ };
scaleLTFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLTFCubePosition)); scaleLTFCubePosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, scaleLTFCubePosition));
Overlays.editOverlay(handleScaleLTFCube, { Overlays.editOverlay(handleScaleLTFCube, {
position: scaleLTFCubePosition, position: scaleLTFCubePosition,
@ -1236,9 +1244,11 @@ SelectionDisplay = (function() {
}); });
// UPDATE STRETCH HIGHLIGHT PANELS // UPDATE STRETCH HIGHLIGHT PANELS
var scaleLTFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleLTFCubePosition);
var scaleRBFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBFCubePosition); var scaleRBFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBFCubePosition);
var stretchPanelXDimensions = Vec3.subtract(scaleLTFCubePositionRotated, scaleRBFCubePositionRotated); var scaleRTFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTFCubePosition);
var scaleLTNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleLTNCubePosition);
var scaleRTNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTNCubePosition);
var stretchPanelXDimensions = Vec3.subtract(scaleRTNCubePositionRotated, scaleRBFCubePositionRotated);
var tempY = Math.abs(stretchPanelXDimensions.y); var tempY = Math.abs(stretchPanelXDimensions.y);
stretchPanelXDimensions.x = STRETCH_PANEL_WIDTH; stretchPanelXDimensions.x = STRETCH_PANEL_WIDTH;
stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z); stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z);
@ -1249,8 +1259,6 @@ SelectionDisplay = (function() {
rotation: rotationZ, rotation: rotationZ,
dimensions: stretchPanelXDimensions dimensions: stretchPanelXDimensions
}); });
var scaleLTNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleLTNCubePosition);
var scaleRTFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTFCubePosition);
var stretchPanelYDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRTFCubePositionRotated); var stretchPanelYDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRTFCubePositionRotated);
var tempX = Math.abs(stretchPanelYDimensions.x); var tempX = Math.abs(stretchPanelYDimensions.x);
stretchPanelYDimensions.x = Math.abs(stretchPanelYDimensions.z); stretchPanelYDimensions.x = Math.abs(stretchPanelYDimensions.z);
@ -1262,9 +1270,7 @@ SelectionDisplay = (function() {
rotation: rotationY, rotation: rotationY,
dimensions: stretchPanelYDimensions dimensions: stretchPanelYDimensions
}); });
var scaleRTFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRTFCubePosition); var stretchPanelZDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRBFCubePositionRotated);
var scaleRBNCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBNCubePosition);
var stretchPanelZDimensions = Vec3.subtract(scaleRTFCubePositionRotated, scaleRBNCubePositionRotated);
var tempX = Math.abs(stretchPanelZDimensions.x); var tempX = Math.abs(stretchPanelZDimensions.x);
stretchPanelZDimensions.x = Math.abs(stretchPanelZDimensions.y); stretchPanelZDimensions.x = Math.abs(stretchPanelZDimensions.y);
stretchPanelZDimensions.y = tempX; stretchPanelZDimensions.y = tempX;
@ -1743,6 +1749,13 @@ SelectionDisplay = (function() {
}; };
}; };
that.restoreAvatarCollisionsFromStretch = function() {
if (handleStretchCollisionOverride) {
Menu.setIsOptionChecked(AVATAR_COLLISIONS_OPTION, true);
handleStretchCollisionOverride = false;
}
}
// TOOL DEFINITION: HANDLE STRETCH TOOL // TOOL DEFINITION: HANDLE STRETCH TOOL
function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset, stretchPanel, scaleHandle) { function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset, stretchPanel, scaleHandle) {
var directionFor3DStretch = directionVec; var directionFor3DStretch = directionVec;
@ -1945,6 +1958,10 @@ SelectionDisplay = (function() {
if (scaleHandle != null) { if (scaleHandle != null) {
Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE_SELECTED }); Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE_SELECTED });
} }
if (Menu.isOptionChecked(AVATAR_COLLISIONS_OPTION)) {
Menu.setIsOptionChecked(AVATAR_COLLISIONS_OPTION, false);
handleStretchCollisionOverride = true;
}
}; };
var onEnd = function(event, reason) { var onEnd = function(event, reason) {
@ -1954,11 +1971,12 @@ SelectionDisplay = (function() {
if (scaleHandle != null) { if (scaleHandle != null) {
Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE }); Overlays.editOverlay(scaleHandle, { color: COLOR_SCALE_CUBE });
} }
that.restoreAvatarCollisionsFromStretch();
pushCommandForSelections(); pushCommandForSelections();
}; };
var onMove = function(event) { var onMove = function(event) {
var proportional = (spaceMode === SPACE_WORLD) || event.isShifted || directionEnum === STRETCH_DIRECTION.ALL; var proportional = (spaceMode === SPACE_WORLD) || directionEnum === STRETCH_DIRECTION.ALL;
var position, dimensions, rotation; var position, dimensions, rotation;
if (spaceMode === SPACE_LOCAL) { if (spaceMode === SPACE_LOCAL) {
@ -2027,9 +2045,11 @@ SelectionDisplay = (function() {
newDimensions = Vec3.sum(initialDimensions, changeInDimensions); newDimensions = Vec3.sum(initialDimensions, changeInDimensions);
} }
newDimensions.x = Math.max(newDimensions.x, STRETCH_MINIMUM_DIMENSION); var minimumDimension = directionEnum === STRETCH_DIRECTION.ALL ? STRETCH_ALL_MINIMUM_DIMENSION :
newDimensions.y = Math.max(newDimensions.y, STRETCH_MINIMUM_DIMENSION); STRETCH_MINIMUM_DIMENSION;
newDimensions.z = Math.max(newDimensions.z, STRETCH_MINIMUM_DIMENSION); newDimensions.x = Math.max(newDimensions.x, minimumDimension);
newDimensions.y = Math.max(newDimensions.y, minimumDimension);
newDimensions.z = Math.max(newDimensions.z, minimumDimension);
var changeInPosition = Vec3.multiplyQbyV(rotation, vec3Mult(localDeltaPivot, changeInDimensions)); var changeInPosition = Vec3.multiplyQbyV(rotation, vec3Mult(localDeltaPivot, changeInDimensions));
if (directionEnum === STRETCH_DIRECTION.ALL) { if (directionEnum === STRETCH_DIRECTION.ALL) {
@ -2089,10 +2109,10 @@ SelectionDisplay = (function() {
directionVector = { x:1, y:1, z:1 }; directionVector = { x:1, y:1, z:1 };
selectedHandle = handleScaleLBNCube; selectedHandle = handleScaleLBNCube;
} else if (directionEnum === SCALE_DIRECTION.RBN) { } else if (directionEnum === SCALE_DIRECTION.RBN) {
directionVector = { x:1, y:1, z:-1 }; directionVector = { x:-1, y:1, z:1 };
selectedHandle = handleScaleRBNCube; selectedHandle = handleScaleRBNCube;
} else if (directionEnum === SCALE_DIRECTION.LBF) { } else if (directionEnum === SCALE_DIRECTION.LBF) {
directionVector = { x:-1, y:1, z:1 }; directionVector = { x:1, y:1, z:-1 };
selectedHandle = handleScaleLBFCube; selectedHandle = handleScaleLBFCube;
} else if (directionEnum === SCALE_DIRECTION.RBF) { } else if (directionEnum === SCALE_DIRECTION.RBF) {
directionVector = { x:-1, y:1, z:-1 }; directionVector = { x:-1, y:1, z:-1 };
@ -2101,10 +2121,10 @@ SelectionDisplay = (function() {
directionVector = { x:1, y:-1, z:1 }; directionVector = { x:1, y:-1, z:1 };
selectedHandle = handleScaleLTNCube; selectedHandle = handleScaleLTNCube;
} else if (directionEnum === SCALE_DIRECTION.RTN) { } else if (directionEnum === SCALE_DIRECTION.RTN) {
directionVector = { x:1, y:-1, z:-1 }; directionVector = { x:-1, y:-1, z:1 };
selectedHandle = handleScaleRTNCube; selectedHandle = handleScaleRTNCube;
} else if (directionEnum === SCALE_DIRECTION.LTF) { } else if (directionEnum === SCALE_DIRECTION.LTF) {
directionVector = { x:-1, y:-1, z:1 }; directionVector = { x:1, y:-1, z:-1 };
selectedHandle = handleScaleLTFCube; selectedHandle = handleScaleLTFCube;
} else if (directionEnum === SCALE_DIRECTION.RTF) { } else if (directionEnum === SCALE_DIRECTION.RTF) {
directionVector = { x:-1, y:-1, z:-1 }; directionVector = { x:-1, y:-1, z:-1 };