mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 16:58:09 +02:00
some tweaks to auto-hide
This commit is contained in:
parent
bd80ecd4dc
commit
dc4c4e8c94
1 changed files with 30 additions and 4 deletions
|
@ -22,11 +22,18 @@ var NON_LINEAR_DIVISOR = 2;
|
||||||
var MINIMUM_SEEK_DISTANCE = 0.01;
|
var MINIMUM_SEEK_DISTANCE = 0.01;
|
||||||
|
|
||||||
var lastMouseMove = Date.now();
|
var lastMouseMove = Date.now();
|
||||||
|
var lastMouseX = Reticle.position.x;
|
||||||
|
var lastMouseY = Reticle.position.y;
|
||||||
var HIDE_STATIC_MOUSE_AFTER = 3000; // 3 seconds
|
var HIDE_STATIC_MOUSE_AFTER = 3000; // 3 seconds
|
||||||
var shouldSeekToLookAt = false;
|
var shouldSeekToLookAt = false;
|
||||||
|
var fastMouseMoves = 0;
|
||||||
|
var averageMouseVelocity = 0;
|
||||||
|
var WEIGHTING = 1/20; // simple moving average over last 20 samples
|
||||||
|
var ONE_MINUS_WEIGHTING = 1 - WEIGHTING;
|
||||||
|
var AVERAGE_MOUSE_VELOCITY_FOR_SEEK_TO = 50;
|
||||||
|
|
||||||
Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
||||||
lastMouseMove = Date.now();
|
var now = Date.now();
|
||||||
|
|
||||||
// if the reticle is hidden, show it...
|
// if the reticle is hidden, show it...
|
||||||
if (!Reticle.visible) {
|
if (!Reticle.visible) {
|
||||||
|
@ -34,12 +41,30 @@ Controller.mouseMoveEvent.connect(function(mouseEvent) {
|
||||||
if (HMD.active) {
|
if (HMD.active) {
|
||||||
shouldSeekToLookAt = true;
|
shouldSeekToLookAt = true;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// even if the reticle is visible, if we're in HMD mode, and the person is moving their mouse quickly (shaking it)
|
||||||
|
// then they are probably looking for it, and we should move into seekToLookAt mode
|
||||||
|
if (HMD.active && !shouldSeekToLookAt) {
|
||||||
|
var dx = Reticle.position.x - lastMouseX;
|
||||||
|
var dy = Reticle.position.y - lastMouseY;
|
||||||
|
var dt = Math.max(1, (now - lastMouseMove)); // mSecs since last mouse move
|
||||||
|
var mouseMoveDistance = Math.sqrt((dx*dx) + (dy*dy));
|
||||||
|
var mouseVelocity = mouseMoveDistance / dt;
|
||||||
|
averageMouseVelocity = (ONE_MINUS_WEIGHTING * averageMouseVelocity) + (WEIGHTING * mouseVelocity);
|
||||||
|
if (averageMouseVelocity > AVERAGE_MOUSE_VELOCITY_FOR_SEEK_TO) {
|
||||||
|
shouldSeekToLookAt = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
lastMouseMove = now;
|
||||||
|
lastMouseX = mouseEvent.x;
|
||||||
|
lastMouseY = mouseEvent.y;
|
||||||
});
|
});
|
||||||
|
|
||||||
function seekToLookAt() {
|
function seekToLookAt() {
|
||||||
// if we're currently seeking the lookAt move the mouse toward the lookat
|
// if we're currently seeking the lookAt move the mouse toward the lookat
|
||||||
if (shouldSeekToLookAt) {
|
if (shouldSeekToLookAt) {
|
||||||
|
averageMouseVelocity = 0; // reset this, these never count for movement...
|
||||||
var lookAt2D = HMD.getHUDLookAtPosition2D();
|
var lookAt2D = HMD.getHUDLookAtPosition2D();
|
||||||
var currentReticlePosition = Reticle.position;
|
var currentReticlePosition = Reticle.position;
|
||||||
var distanceBetweenX = lookAt2D.x - Reticle.position.x;
|
var distanceBetweenX = lookAt2D.x - Reticle.position.x;
|
||||||
|
@ -57,16 +82,17 @@ function seekToLookAt() {
|
||||||
newPosition.y = lookAt2D.y;
|
newPosition.y = lookAt2D.y;
|
||||||
closeEnoughY = true;
|
closeEnoughY = true;
|
||||||
}
|
}
|
||||||
|
Reticle.position = newPosition;
|
||||||
if (closeEnoughX && closeEnoughY) {
|
if (closeEnoughX && closeEnoughY) {
|
||||||
shouldSeekToLookAt = false;
|
shouldSeekToLookAt = false;
|
||||||
}
|
}
|
||||||
Reticle.position = newPosition;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function autoHideReticle() {
|
function autoHideReticle() {
|
||||||
// if we haven't moved in a long period of time, hide the reticle
|
// if we haven't moved in a long period of time, and we're not pointing at some
|
||||||
if (Reticle.visible) {
|
// system overlay (like a window), then hide the reticle
|
||||||
|
if (Reticle.visible && !Reticle.pointingAtSystemOverlay) {
|
||||||
var now = Date.now();
|
var now = Date.now();
|
||||||
var timeSinceLastMouseMove = now - lastMouseMove;
|
var timeSinceLastMouseMove = now - lastMouseMove;
|
||||||
if (timeSinceLastMouseMove > HIDE_STATIC_MOUSE_AFTER) {
|
if (timeSinceLastMouseMove > HIDE_STATIC_MOUSE_AFTER) {
|
||||||
|
|
Loading…
Reference in a new issue