mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:18:05 +02:00
Merge pull request #9849 from hyperlogic/feature/can-touch-this
More accurate and responsive stylus and finger touching.
This commit is contained in:
commit
d7c6531d13
8 changed files with 630 additions and 404 deletions
|
@ -17,6 +17,7 @@ module.exports = {
|
||||||
"Clipboard": false,
|
"Clipboard": false,
|
||||||
"Controller": false,
|
"Controller": false,
|
||||||
"DialogsManager": false,
|
"DialogsManager": false,
|
||||||
|
"DebugDraw": false,
|
||||||
"Entities": false,
|
"Entities": false,
|
||||||
"FaceTracker": false,
|
"FaceTracker": false,
|
||||||
"GlobalServices": false,
|
"GlobalServices": false,
|
||||||
|
|
|
@ -609,6 +609,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure the debug draw singleton is initialized on the main thread.
|
||||||
|
DebugDraw::getInstance().removeMarker("");
|
||||||
|
|
||||||
_runningMarker.startRunningMarker();
|
_runningMarker.startRunningMarker();
|
||||||
|
|
||||||
|
|
|
@ -346,7 +346,9 @@ void AnimDebugDraw::update() {
|
||||||
numVerts += (int)markerMap.size() * VERTICES_PER_BONE;
|
numVerts += (int)markerMap.size() * VERTICES_PER_BONE;
|
||||||
auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap();
|
auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap();
|
||||||
numVerts += (int)myAvatarMarkerMap.size() * VERTICES_PER_BONE;
|
numVerts += (int)myAvatarMarkerMap.size() * VERTICES_PER_BONE;
|
||||||
numVerts += (int)DebugDraw::getInstance().getRays().size() * VERTICES_PER_RAY;
|
auto rays = DebugDraw::getInstance().getRays();
|
||||||
|
DebugDraw::getInstance().clearRays();
|
||||||
|
numVerts += (int)rays.size() * VERTICES_PER_RAY;
|
||||||
|
|
||||||
// allocate verts!
|
// allocate verts!
|
||||||
std::vector<AnimDebugDrawData::Vertex> vertices;
|
std::vector<AnimDebugDrawData::Vertex> vertices;
|
||||||
|
@ -398,10 +400,9 @@ void AnimDebugDraw::update() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw rays from shared DebugDraw singleton
|
// draw rays from shared DebugDraw singleton
|
||||||
for (auto& iter : DebugDraw::getInstance().getRays()) {
|
for (auto& iter : rays) {
|
||||||
addLine(std::get<0>(iter), std::get<1>(iter), std::get<2>(iter), v);
|
addLine(std::get<0>(iter), std::get<1>(iter), std::get<2>(iter), v);
|
||||||
}
|
}
|
||||||
DebugDraw::getInstance().clearRays();
|
|
||||||
|
|
||||||
data._vertexBuffer->resize(sizeof(AnimDebugDrawData::Vertex) * numVerts);
|
data._vertexBuffer->resize(sizeof(AnimDebugDrawData::Vertex) * numVerts);
|
||||||
data._vertexBuffer->setSubData<AnimDebugDrawData::Vertex>(0, vertices);
|
data._vertexBuffer->setSubData<AnimDebugDrawData::Vertex>(0, vertices);
|
||||||
|
|
|
@ -27,10 +27,10 @@ var DEFAULT_SCRIPTS = [
|
||||||
"system/tablet-users.js",
|
"system/tablet-users.js",
|
||||||
"system/selectAudioDevice.js",
|
"system/selectAudioDevice.js",
|
||||||
"system/notifications.js",
|
"system/notifications.js",
|
||||||
|
"system/controllers/squeezeHands.js",
|
||||||
"system/controllers/controllerDisplayManager.js",
|
"system/controllers/controllerDisplayManager.js",
|
||||||
"system/controllers/handControllerGrab.js",
|
"system/controllers/handControllerGrab.js",
|
||||||
"system/controllers/handControllerPointer.js",
|
"system/controllers/handControllerPointer.js",
|
||||||
"system/controllers/squeezeHands.js",
|
|
||||||
"system/controllers/grab.js",
|
"system/controllers/grab.js",
|
||||||
"system/controllers/teleport.js",
|
"system/controllers/teleport.js",
|
||||||
"system/controllers/toggleAdvancedMovementForHandControllers.js",
|
"system/controllers/toggleAdvancedMovementForHandControllers.js",
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -11,6 +11,7 @@
|
||||||
// Distributed under the Apache License, Version 2.0.
|
// Distributed under the Apache License, Version 2.0.
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */
|
||||||
|
|
||||||
(function() { // BEGIN LOCAL_SCOPE
|
(function() { // BEGIN LOCAL_SCOPE
|
||||||
|
|
||||||
|
@ -25,7 +26,11 @@ var OVERLAY_RAMP_RATE = 8.0;
|
||||||
|
|
||||||
var animStateHandlerID;
|
var animStateHandlerID;
|
||||||
|
|
||||||
var isBothIndexesPointing = false;
|
var leftIndexPointingOverride = 0;
|
||||||
|
var rightIndexPointingOverride = 0;
|
||||||
|
var leftThumbRaisedOverride = 0;
|
||||||
|
var rightThumbRaisedOverride = 0;
|
||||||
|
|
||||||
var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index";
|
var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index";
|
||||||
|
|
||||||
var isLeftIndexPointing = false;
|
var isLeftIndexPointing = false;
|
||||||
|
@ -53,7 +58,7 @@ function init() {
|
||||||
"leftHandOverlayAlpha", "leftHandGraspAlpha",
|
"leftHandOverlayAlpha", "leftHandGraspAlpha",
|
||||||
"rightHandOverlayAlpha", "rightHandGraspAlpha",
|
"rightHandOverlayAlpha", "rightHandGraspAlpha",
|
||||||
"isLeftHandGrasp", "isLeftIndexPoint", "isLeftThumbRaise", "isLeftIndexPointAndThumbRaise",
|
"isLeftHandGrasp", "isLeftIndexPoint", "isLeftThumbRaise", "isLeftIndexPointAndThumbRaise",
|
||||||
"isRightHandGrasp", "isRightIndexPoint", "isRightThumbRaise", "isRightIndexPointAndThumbRaise",
|
"isRightHandGrasp", "isRightIndexPoint", "isRightThumbRaise", "isRightIndexPointAndThumbRaise"
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL);
|
Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL);
|
||||||
|
@ -66,21 +71,23 @@ function animStateHandler(props) {
|
||||||
leftHandGraspAlpha: lastLeftTrigger,
|
leftHandGraspAlpha: lastLeftTrigger,
|
||||||
rightHandOverlayAlpha: rightHandOverlayAlpha,
|
rightHandOverlayAlpha: rightHandOverlayAlpha,
|
||||||
rightHandGraspAlpha: lastRightTrigger,
|
rightHandGraspAlpha: lastRightTrigger,
|
||||||
isLeftHandGrasp: !isBothIndexesPointing && !isLeftIndexPointing && !isLeftThumbRaised,
|
|
||||||
isLeftIndexPoint: (isBothIndexesPointing || isLeftIndexPointing) && !isLeftThumbRaised,
|
isLeftHandGrasp: !isLeftIndexPointing && !isLeftThumbRaised,
|
||||||
isLeftThumbRaise: !isBothIndexesPointing && !isLeftIndexPointing && isLeftThumbRaised,
|
isLeftIndexPoint: isLeftIndexPointing && !isLeftThumbRaised,
|
||||||
isLeftIndexPointAndThumbRaise: (isBothIndexesPointing || isLeftIndexPointing) && isLeftThumbRaised,
|
isLeftThumbRaise: !isLeftIndexPointing && isLeftThumbRaised,
|
||||||
isRightHandGrasp: !isBothIndexesPointing && !isRightIndexPointing && !isRightThumbRaised,
|
isLeftIndexPointAndThumbRaise: isLeftIndexPointing && isLeftThumbRaised,
|
||||||
isRightIndexPoint: (isBothIndexesPointing || isRightIndexPointing) && !isRightThumbRaised,
|
|
||||||
isRightThumbRaise: !isBothIndexesPointing && !isRightIndexPointing && isRightThumbRaised,
|
isRightHandGrasp: !isRightIndexPointing && !isRightThumbRaised,
|
||||||
isRightIndexPointAndThumbRaise: (isBothIndexesPointing || isRightIndexPointing) && isRightThumbRaised
|
isRightIndexPoint: isRightIndexPointing && !isRightThumbRaised,
|
||||||
|
isRightThumbRaise: !isRightIndexPointing && isRightThumbRaised,
|
||||||
|
isRightIndexPointAndThumbRaise: isRightIndexPointing && isRightThumbRaised
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function update(dt) {
|
function update(dt) {
|
||||||
var leftTrigger = clamp(Controller.getValue(Controller.Standard.LT) + Controller.getValue(Controller.Standard.LeftGrip), 0, 1);
|
var leftTrigger = clamp(Controller.getValue(Controller.Standard.LT) + Controller.getValue(Controller.Standard.LeftGrip), 0, 1);
|
||||||
var rightTrigger = clamp(Controller.getValue(Controller.Standard.RT) + Controller.getValue(Controller.Standard.RightGrip), 0, 1);
|
var rightTrigger = clamp(Controller.getValue(Controller.Standard.RT) + Controller.getValue(Controller.Standard.RightGrip), 0, 1);
|
||||||
|
|
||||||
// Average last few trigger values together for a bit of smoothing
|
// Average last few trigger values together for a bit of smoothing
|
||||||
var tau = clamp(dt / TRIGGER_SMOOTH_TIMESCALE, 0, 1);
|
var tau = clamp(dt / TRIGGER_SMOOTH_TIMESCALE, 0, 1);
|
||||||
lastLeftTrigger = lerp(leftTrigger, lastLeftTrigger, tau);
|
lastLeftTrigger = lerp(leftTrigger, lastLeftTrigger, tau);
|
||||||
|
@ -103,18 +110,61 @@ function update(dt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pointing index fingers and raising thumbs
|
// Pointing index fingers and raising thumbs
|
||||||
isLeftIndexPointing = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1;
|
isLeftIndexPointing = (leftIndexPointingOverride > 0) || (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1);
|
||||||
isRightIndexPointing = rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1;
|
isRightIndexPointing = (rightIndexPointingOverride > 0) || (rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1);
|
||||||
isLeftThumbRaised = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1;
|
isLeftThumbRaised = (leftThumbRaisedOverride > 0) || (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1);
|
||||||
isRightThumbRaised = rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1;
|
isRightThumbRaised = (rightThumbRaisedOverride > 0) || (rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleMessages(channel, message, sender) {
|
function handleMessages(channel, message, sender) {
|
||||||
if (sender === MyAvatar.sessionUUID && channel === HIFI_POINT_INDEX_MESSAGE_CHANNEL) {
|
if (sender === MyAvatar.sessionUUID && channel === HIFI_POINT_INDEX_MESSAGE_CHANNEL) {
|
||||||
var data = JSON.parse(message);
|
var data = JSON.parse(message);
|
||||||
|
|
||||||
if (data.pointIndex !== undefined) {
|
if (data.pointIndex !== undefined) {
|
||||||
print("pointIndex: " + data.pointIndex);
|
if (data.pointIndex) {
|
||||||
isBothIndexesPointing = data.pointIndex;
|
leftIndexPointingOverride++;
|
||||||
|
rightIndexPointingOverride++;
|
||||||
|
} else {
|
||||||
|
leftIndexPointingOverride--;
|
||||||
|
rightIndexPointingOverride--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.pointLeftIndex !== undefined) {
|
||||||
|
if (data.pointLeftIndex) {
|
||||||
|
leftIndexPointingOverride++;
|
||||||
|
} else {
|
||||||
|
leftIndexPointingOverride--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.pointRightIndex !== undefined) {
|
||||||
|
if (data.pointRightIndex) {
|
||||||
|
rightIndexPointingOverride++;
|
||||||
|
} else {
|
||||||
|
rightIndexPointingOverride--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.raiseThumbs !== undefined) {
|
||||||
|
if (data.raiseThumbs) {
|
||||||
|
leftThumbRaisedOverride++;
|
||||||
|
rightThumbRaisedOverride++;
|
||||||
|
} else {
|
||||||
|
leftThumbRaisedOverride--;
|
||||||
|
rightThumbRaisedOverride--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.raiseLeftThumb !== undefined) {
|
||||||
|
if (data.raiseLeftThumb) {
|
||||||
|
leftThumbRaisedOverride++;
|
||||||
|
} else {
|
||||||
|
leftThumbRaisedOverride--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data.raiseRightThumb !== undefined) {
|
||||||
|
if (data.raiseRightThumb) {
|
||||||
|
rightThumbRaisedOverride++;
|
||||||
|
} else {
|
||||||
|
rightThumbRaisedOverride--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
button,
|
button,
|
||||||
BUTTON_NAME = "PAINT",
|
BUTTON_NAME = "PAINT",
|
||||||
isFingerPainting = false,
|
isFingerPainting = false,
|
||||||
|
shouldPointFingers = false,
|
||||||
leftHand = null,
|
leftHand = null,
|
||||||
rightHand = null,
|
rightHand = null,
|
||||||
leftBrush = null,
|
leftBrush = null,
|
||||||
|
@ -308,9 +309,14 @@
|
||||||
Messages.sendMessage(HIFI_POINTER_DISABLE_MESSAGE_CHANNEL, JSON.stringify({
|
Messages.sendMessage(HIFI_POINTER_DISABLE_MESSAGE_CHANNEL, JSON.stringify({
|
||||||
pointerEnabled: enabled
|
pointerEnabled: enabled
|
||||||
}), true);
|
}), true);
|
||||||
Messages.sendMessage(HIFI_POINT_INDEX_MESSAGE_CHANNEL, JSON.stringify({
|
|
||||||
pointIndex: !enabled
|
var newShouldPointFingers = !enabled;
|
||||||
}), true);
|
if (newShouldPointFingers !== shouldPointFingers) {
|
||||||
|
Messages.sendMessage(HIFI_POINT_INDEX_MESSAGE_CHANNEL, JSON.stringify({
|
||||||
|
pointIndex: newShouldPointFingers
|
||||||
|
}), true);
|
||||||
|
shouldPointFingers = newShouldPointFingers;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function enableProcessing() {
|
function enableProcessing() {
|
||||||
|
@ -430,4 +436,4 @@
|
||||||
|
|
||||||
setUp();
|
setUp();
|
||||||
Script.scriptEnding.connect(tearDown);
|
Script.scriptEnding.connect(tearDown);
|
||||||
}());
|
}());
|
||||||
|
|
|
@ -175,11 +175,11 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location) {
|
||||||
isAA: HMD.active
|
isAA: HMD.active
|
||||||
});
|
});
|
||||||
|
|
||||||
var HOME_BUTTON_Y_OFFSET = (this.height / 2) - 0.009;
|
var HOME_BUTTON_Y_OFFSET = (this.height / 2) - (this.height / 20);
|
||||||
this.homeButtonID = Overlays.addOverlay("sphere", {
|
this.homeButtonID = Overlays.addOverlay("sphere", {
|
||||||
name: "homeButton",
|
name: "homeButton",
|
||||||
localPosition: {x: -0.001, y: -HOME_BUTTON_Y_OFFSET, z: 0.0},
|
localPosition: {x: -0.001, y: -HOME_BUTTON_Y_OFFSET, z: 0.0},
|
||||||
localRotation: Quat.angleAxis(0, Y_AXIS),
|
localRotation: {x: 0, y: 1, z: 0, w: 0},
|
||||||
dimensions: { x: 4 * tabletScaleFactor, y: 4 * tabletScaleFactor, z: 4 * tabletScaleFactor},
|
dimensions: { x: 4 * tabletScaleFactor, y: 4 * tabletScaleFactor, z: 4 * tabletScaleFactor},
|
||||||
alpha: 0.0,
|
alpha: 0.0,
|
||||||
visible: true,
|
visible: true,
|
||||||
|
|
Loading…
Reference in a new issue