mirror of
https://github.com/lubosz/overte.git
synced 2025-08-08 03:48:38 +02:00
auto-show reticle on mouse click
This commit is contained in:
parent
ae596d79f1
commit
082bb8c4b8
1 changed files with 12 additions and 4 deletions
|
@ -21,7 +21,7 @@ var MINIMUM_DEPTH_ADJUST = 0.01;
|
||||||
var NON_LINEAR_DIVISOR = 2;
|
var NON_LINEAR_DIVISOR = 2;
|
||||||
var MINIMUM_SEEK_DISTANCE = 0.01;
|
var MINIMUM_SEEK_DISTANCE = 0.01;
|
||||||
|
|
||||||
var lastMouseMove = Date.now();
|
var lastMouseMoveOrClick = Date.now();
|
||||||
var lastMouseX = Reticle.position.x;
|
var lastMouseX = Reticle.position.x;
|
||||||
var lastMouseY = Reticle.position.y;
|
var lastMouseY = Reticle.position.y;
|
||||||
var HIDE_STATIC_MOUSE_AFTER = 3000; // 3 seconds
|
var HIDE_STATIC_MOUSE_AFTER = 3000; // 3 seconds
|
||||||
|
@ -32,6 +32,14 @@ var WEIGHTING = 1/20; // simple moving average over last 20 samples
|
||||||
var ONE_MINUS_WEIGHTING = 1 - WEIGHTING;
|
var ONE_MINUS_WEIGHTING = 1 - WEIGHTING;
|
||||||
var AVERAGE_MOUSE_VELOCITY_FOR_SEEK_TO = 50;
|
var AVERAGE_MOUSE_VELOCITY_FOR_SEEK_TO = 50;
|
||||||
|
|
||||||
|
function showReticleOnMouseClick() {
|
||||||
|
Reticle.visible = true;
|
||||||
|
lastMouseMoveOrClick = Date.now(); // move or click
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.mousePressEvent.connect(showReticleOnMouseClick);
|
||||||
|
Controller.mouseDoublePressEvent.connect(showReticleOnMouseClick);
|
||||||
|
|
||||||
Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
|
|
||||||
|
@ -47,7 +55,7 @@ Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
||||||
if (HMD.active && !shouldSeekToLookAt && Reticle.allowMouseCapture) {
|
if (HMD.active && !shouldSeekToLookAt && Reticle.allowMouseCapture) {
|
||||||
var dx = Reticle.position.x - lastMouseX;
|
var dx = Reticle.position.x - lastMouseX;
|
||||||
var dy = Reticle.position.y - lastMouseY;
|
var dy = Reticle.position.y - lastMouseY;
|
||||||
var dt = Math.max(1, (now - lastMouseMove)); // mSecs since last mouse move
|
var dt = Math.max(1, (now - lastMouseMoveOrClick)); // mSecs since last mouse move
|
||||||
var mouseMoveDistance = Math.sqrt((dx*dx) + (dy*dy));
|
var mouseMoveDistance = Math.sqrt((dx*dx) + (dy*dy));
|
||||||
var mouseVelocity = mouseMoveDistance / dt;
|
var mouseVelocity = mouseMoveDistance / dt;
|
||||||
averageMouseVelocity = (ONE_MINUS_WEIGHTING * averageMouseVelocity) + (WEIGHTING * mouseVelocity);
|
averageMouseVelocity = (ONE_MINUS_WEIGHTING * averageMouseVelocity) + (WEIGHTING * mouseVelocity);
|
||||||
|
@ -56,7 +64,7 @@ Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastMouseMove = now;
|
lastMouseMoveOrClick = now;
|
||||||
lastMouseX = mouseEvent.x;
|
lastMouseX = mouseEvent.x;
|
||||||
lastMouseY = mouseEvent.y;
|
lastMouseY = mouseEvent.y;
|
||||||
});
|
});
|
||||||
|
@ -94,7 +102,7 @@ function autoHideReticle() {
|
||||||
// system overlay (like a window), then hide the reticle
|
// system overlay (like a window), then hide the reticle
|
||||||
if (Reticle.visible && !Reticle.pointingAtSystemOverlay) {
|
if (Reticle.visible && !Reticle.pointingAtSystemOverlay) {
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
var timeSinceLastMouseMove = now - lastMouseMove;
|
var timeSinceLastMouseMove = now - lastMouseMoveOrClick;
|
||||||
if (timeSinceLastMouseMove > HIDE_STATIC_MOUSE_AFTER) {
|
if (timeSinceLastMouseMove > HIDE_STATIC_MOUSE_AFTER) {
|
||||||
Reticle.visible = false;
|
Reticle.visible = false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue