mirror of
https://github.com/RetroPortingToolKit/psxrecomp
synced 2026-10-26 02:11:36 -04:00
689f3b348e
Co-authored-by: Yves <calibratedbeats@gmail.com>
29 lines
1.2 KiB
C
29 lines
1.2 KiB
C
#pragma once
|
|
|
|
/* Observe an inverted relative head pose for diagnostics only. A sustained
|
|
* roll is valid user motion and must never trigger an automatic recenter. */
|
|
static inline unsigned xr_origin_observe_inversion(unsigned streak, int valid,
|
|
const double origin[4],
|
|
const double pose[4],
|
|
double *up_dot) {
|
|
if (!valid) {
|
|
if (up_dot) *up_dot = 1.0;
|
|
return 0;
|
|
}
|
|
double rx = origin[3]*pose[0] - origin[0]*pose[3] -
|
|
origin[1]*pose[2] + origin[2]*pose[1];
|
|
double rz = origin[3]*pose[2] - origin[0]*pose[1] +
|
|
origin[1]*pose[0] - origin[2]*pose[3];
|
|
double up = 1.0 - 2.0*(rx*rx + rz*rz);
|
|
if (up_dot) *up_dot = up;
|
|
if (up >= -0.5) return 0;
|
|
return streak < 10u ? streak + 1u : streak;
|
|
}
|
|
|
|
/* Only the runtime's reference-space change event authorizes an origin reset. */
|
|
static inline int xr_origin_reference_reset_due(int pending,
|
|
long long change_time,
|
|
long long now) {
|
|
return pending && now >= change_time;
|
|
}
|