* add delay if interface not found

* adjust initialization behavior

* pushed for debugging reasons for concerned parties

* comment out simple recenter

* remove old style motion, some minor optimizations

* optimize default case check

* optimized default condition

* change manifest install behavior to trigger on desktop mode as well

* add desktop mode binding launch

* add tracker overlay option to utils

* commit to check status

* attempt to fix native LH issues with chaperone when exiting

* add desktop mode toggle and some cleanup

* remove adjust chaperone

* remove clang format from ci, increment version, cleanup

* update circle ci

* fix conversion warning

* add F13-19 to keyboard parser

* add additional logging around failure to initialize

* add unsaved changes

* update version 5.8.1

* fix some collisions in enum declaration

* add controller powers on steamvr, and no HMD to steamvr tab, increment version

* slightly alter drag movement, fix qml issue

* code cleanup

* fix logspam/attempt to delete non existant overlays

* increment version 5.8.3

* add zero-offset to true as potential edge case fix

* remove dead code in qml

* fix both brightness sliders to be uniform .05 minimum via set, and .2 minimum via slider

* attempt to fix recenter, and fix floor

* further space drag/recenter improvements

* get rid of old code

* increment version 5.8.6

* remove old commented code settings page

* update documentation

* re-add mistakenly removed line
This commit is contained in:
ykeara
2024-02-27 18:03:22 -06:00
committed by GitHub
parent cee78f2194
commit ec865f5127
15 changed files with 74 additions and 112 deletions
+6 -5
View File
@@ -358,13 +358,14 @@ These version are not stable and this should be considered for advanced users on
- **Enable Timing Overlay**: Enables a simple Timing overlay, locked to HMD currently.
- **Allow Multiple Drivers**: Allows multiple Drivers to be loaded allowing multi-device setups (i.e. rift with vive trackers).
- **Disable Notifications**: Disables Notifications (pop-ups) while in VR.
- **Require HMD**: When un-checked disables SteamVR's requirement for an HMD
- **Enable System Button Binding**: Allows System Button to be bound and used in any app. (you will probably want to change the bindings in "VR Compositor")
- **Controller Power Turns on SteamVR** Un-checking this will make it so if you turn on a controller or tracker SteamVR will not start
- **No Fade to Grid**: When app goes non-responsive, you will not fade to grid.
- **Camera** (all checkboxes require restart)
- **Enable Camera**: Enables Camera Features
- **Camera for Bounds**: Your camera view will replace your vr view as you near/exit chaperone
- **Camera for Dashboard**: You will have a small camera view attached to your controller when you have the dashboard active.
- **Camera for Room View**: You will have a Tron/Shadow version of the room when double-clicking system button.
- **Show Camera on bounds collision**: Your camera view will replace your vr view as you near/exit chaperone
- **Show Camera on controller**: Your camera view will pop up as an overlay on your controller
- **Binds**
- **Enable Per-App**: Enables Per App Binding Feature
- **Application**: Application to set Per app Bindings
@@ -552,6 +553,8 @@ Allows users to temporarily move and rotate the center of the playspace. This al
- **Media Control Keys:** Allows controlling a media player through the media keys. This is the same as having a keyboard with media keys and then pressing them. Should support most common media players.
- **Show Tracker Batteries** Shows an Overlay on Trackers depecting battery percentage
## - Statistics Page
<img src="docs/screenshots/StatisticsPage.png" width="600" alt="Statistics Page">
@@ -571,8 +574,6 @@ Allows users to temporarily move and rotate the center of the playspace. This al
<img src="docs/screenshots/SettingsPage.png" width="600" alt="Settings Page">
- **Autostart:** Allows you to enable/disable auto start.
- **Allow External App Chaperone Edits:** Incorporates changes to the chaperone and universe center made by other applications. These changes could come from anywhere, including apps with unpredictable interactions with Advanced Settings. Therefore, this option opens the potential for chaperone misalignment or corruption. However it also allows other chaperone tweaking tools to function in tandem with Advanced Settings. **This option should only be checked if required for compatibility with other apps.** *Note: Changes will only take effect when offsets and rotation are all zero.*
- **Old-Style Motion:** Uses the old system of writing the chaperone universe center and bounds to disk every frame. Use this option only if you experience issues with playspace motion such as snapping back to reset position after releasing a space-drag. This old mode is smooth on most systems but is in theory less performant than the normal method.
- **Universe-Centered Rotation:** Causes Rotation to be applied to Universe Center Rather than HMD (Disables offsets automatically compensating to pivot at the HMD).
- **Enable Automatic Crash Recovery of Chaperone Config:** This applies the last good autosaved chaperone profile when starting up after not shutting down properly.
- **Disable Notification of Newer Version Availability**: This turns off the on start-up check for a new version. (You can refresh this to do a manual check.)
+1 -1
View File
@@ -1 +1 @@
5.8.3-release
5.8.6-release
+4 -1
View File
@@ -3,6 +3,9 @@
## Capabilities
We provide two distinct types of functionality, `Keyboard Shortcut`'s [macros] and `Key Press`'s [individual key press]
### Limitations
We are not designed to provide a whole bunch of functionality here, if you need a whole bunch of keys instead of 1 or 2 you may want to use another utility such as [OpenVR2Key](https://github.com/BOLL7708/OpenVR2Key) by Boll7708 on Github (no affiliation)
### Keyboard Shortcuts
- Sends One or Many keys to the OS like a macro.
@@ -55,7 +58,7 @@
| A to Z | The letter in lowercase. `a`, `b`, `c`, ... |
| Number Row 0-9 | The number. `0`, `1`, `2`, ... |
| Function keys F1-F9 | Capital F followed by number. `F1`, `F2`, `F3`, ... |
| Function keys F10-F12 | Capital G followed by number. `G0` = F10, `G1` = F11, ... |
| Function keys F10-F19 | Capital G followed by number. `G0` = F10, `G1` = F11, ... |
| Backspace | `BACKSPACE` |
| Space | `SPACE` |
| Tab | `TAB` |
Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 75 KiB

+15 -2
View File
@@ -1249,8 +1249,12 @@ void OverlayController::mainEventLoop()
case vr::VREvent_SeatedZeroPoseReset:
{
m_moveCenterTabController.incomingSeatedReset();
LOG( INFO ) << "Game/SteamVR Triggered Seated Zero-Position Reset";
m_incomingReset = true;
}
break;
case vr::VREvent_StandingZeroPoseReset:
{
m_incomingReset = true;
}
break;
@@ -1300,6 +1304,13 @@ void OverlayController::mainEventLoop()
}
}
if ( m_incomingReset )
{
m_incomingReset = false;
m_moveCenterTabController.incomingSeatedReset();
LOG( INFO ) << "Incoming Reset";
}
vr::TrackedDevicePose_t devicePoses[vr::k_unMaxTrackedDeviceCount];
vr::VRSystem()->GetDeviceToAbsoluteTrackingPose(
vr::TrackingUniverseStanding,
@@ -1430,6 +1441,8 @@ void OverlayController::AddOffsetToUniverseCenter(
{
vr::VRChaperoneSetup()->CommitWorkingCopy(
vr::EChaperoneConfigFile_Live );
vr::VRChaperoneSetup()->ReloadFromDisk(
vr::EChaperoneConfigFile_Temp );
}
}
}
+1
View File
@@ -131,6 +131,7 @@ private:
QString m_updateMessage = "";
QString m_optionalMessage = "";
QString m_versionCheckText = "";
bool m_incomingReset = false;
QUrl m_runtimePathUrl;
-14
View File
@@ -100,14 +100,6 @@ MyStackViewPage {
}
}
MyToggleButton {
id: allowExternalEditsToggle
text: "Allow External App Chaperone Edits (Danger)"
onCheckedChanged: {
MoveCenterTabController.setAllowExternalEdits(checked, true)
}
}
MyToggleButton {
id: universeCenteredRotationToggle
text: "Universe-Centered Rotation (Disables HMD Centering)"
@@ -323,10 +315,7 @@ MyStackViewPage {
} // end column
Component.onCompleted: {
settingsAutoStartToggle.checked = SettingsTabController.autoStartEnabled
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
disableCrashRecoveryToggle.checked = !OverlayController.crashRecoveryDisabled
customTickRateText.text = OverlayController.customTickRateMs
vsyncDisabledToggle.checked = OverlayController.vsyncDisabled
@@ -362,9 +351,6 @@ MyStackViewPage {
Connections {
target: MoveCenterTabController
onAllowExternalEditsChanged: {
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
}
onUniverseCenteredRotationChanged: {
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
}
@@ -85,7 +85,7 @@ GroupBox {
if(!c1){
steamvrCameraBoundsToggle.enabled = false;
steamvrCameraRoomToggle.enabled = false;
steamvrCameraContToggle.enabled = false;
}
}
@@ -51,7 +51,7 @@ GroupBox {
MySlider {
id: brightnessSlider
from: 0.10
from: 0.2
to: 1.0
stepSize: 0.01
value: 1.0
@@ -73,8 +73,8 @@ GroupBox {
function onInputEvent(input) {
var val = parseFloat(input)
if (!isNaN(val)) {
if (val < 3.0) {
val = 3.0
if (val < 5.0) {
val = 5.0
} else if (val > 100.0) {
val = 100.0
}
@@ -52,7 +52,7 @@ GroupBox {
MySlider {
id: brightnessSlider
from: 0.01
from: 0.2
to: 1.0
stepSize: 0.01
value: 1.0
+34 -75
View File
@@ -821,23 +821,6 @@ void MoveCenterTabController::setShowLogMatricesButton( bool value,
}
}
bool MoveCenterTabController::allowExternalEdits() const
{
return settings::getSetting(
settings::BoolSetting::PLAYSPACE_allowExternalEdits );
}
void MoveCenterTabController::setAllowExternalEdits( bool value, bool notify )
{
settings::setSetting( settings::BoolSetting::PLAYSPACE_allowExternalEdits,
value );
if ( notify )
{
emit allowExternalEditsChanged( value );
}
}
bool MoveCenterTabController::universeCenteredRotation() const
{
return settings::getSetting(
@@ -904,38 +887,31 @@ void MoveCenterTabController::shutdown()
void MoveCenterTabController::incomingSeatedReset()
{
// if we didn't send the request from OVRAS, we need to send another
// ResetSeatedZeroPose(). It seems that only after this is sent from
// OVRAS does ReloadFromDisk return valid info on WMR.
if ( !m_selfRequestedSeatedRecenter )
// This really covers standing reset as well
updateChaperoneResetData();
if ( m_offsetY != 0 )
{
LOG( INFO ) << "steamvr center?";
m_selfRequestedSeatedRecenter = true;
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
m_offsetY = -m_offsetY;
updateSpace();
updateChaperoneResetData();
}
else
{
LOG( INFO ) << "not our receneter";
updateSeatedResetData();
}
// vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
zeroOffsets();
}
void MoveCenterTabController::reset()
{
// This is a weird hack for handling the reset properly don't ask me why
// reset plays better w/ a non 0 starting point
m_offsetY = 0.01f;
updateSpace();
if ( !m_chaperoneBasisAcquired )
{
LOG( WARNING ) << "WARNING: Attempted reset offsets before chaperone "
"basis is acquired!";
return;
}
if ( m_pendingSeatedRecenter )
{
vr::VRChaperoneSetup()->GetWorkingSeatedZeroPoseToRawTrackingPose(
&m_seatedCenterForReset );
m_pendingSeatedRecenter = false;
}
vr::VRChaperoneSetup()->HideWorkingSetPreview();
// vr::VRChaperoneSetup()->HideWorkingSetPreview();
m_heightToggle = false;
emit heightToggleChanged( m_heightToggle );
m_oldOffsetX = 0.0f;
@@ -951,7 +927,13 @@ void MoveCenterTabController::reset()
m_lastControllerPosition[2] = 0.0f;
m_lastMoveHand = vr::TrackedControllerRole_Invalid;
m_lastRotateHand = vr::TrackedControllerRole_Invalid;
applyChaperoneResetData();
// Option 1: Does not save
updateSpace( true );
updateChaperoneResetData();
// Option 2: on reset will recenter play area
// applyChaperoneResetData();
// For Center Marker
// Needs to happen after apply chaperone
@@ -1106,6 +1088,7 @@ void MoveCenterTabController::zeroOffsets()
// down properly.
parent->setPreviousShutdownSafe( false );
}
m_pendingZeroOffsets = true;
}
if ( m_roomSetupModeDetected )
{
@@ -1119,7 +1102,7 @@ void MoveCenterTabController::zeroOffsets()
void MoveCenterTabController::sendSeatedRecenter()
{
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
// vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseStanding );
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseStanding );
}
double MoveCenterTabController::getHmdYawTotal()
@@ -1162,10 +1145,6 @@ void MoveCenterTabController::updateSeatedResetData()
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
// done with this recenter, so set self request back to false for next
// time.
m_selfRequestedSeatedRecenter = false;
// set pending update here, will be processed on next instance of motion
// or running the reset() function.
m_pendingSeatedRecenter = true;
}
void MoveCenterTabController::updateChaperoneResetData()
@@ -1188,10 +1167,11 @@ void MoveCenterTabController::updateChaperoneResetData()
updateCollisionBoundsForOffset();
parent->m_chaperoneTabController.updateHeight( getBoundsBasisMaxY() );
unsigned checkQuadCount = 0;
vr::VRChaperoneSetup()->GetWorkingCollisionBoundsInfo( nullptr,
&checkQuadCount );
if ( checkQuadCount > 0 )
// unsigned checkQuadCount = 0;
// vr::VRChaperoneSetup()->GetWorkingCollisionBoundsInfo( nullptr,
// &checkQuadCount
// );
if ( currentQuadCount > 0 )
{
parent->chaperoneUtils().loadChaperoneData( false );
}
@@ -1233,17 +1213,19 @@ void MoveCenterTabController::updateCollisionBoundsForOffset()
void MoveCenterTabController::applyChaperoneResetData()
{
vr::VRChaperoneSetup()->HideWorkingSetPreview();
updateSpace( true );
vr::VRChaperoneSetup()->RevertWorkingCopy();
if ( m_collisionBoundsCountForReset > 0 )
{
vr::VRChaperoneSetup()->SetWorkingCollisionBoundsInfo(
m_collisionBoundsForReset, m_collisionBoundsCountForReset );
}
vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(
&m_universeCenterForReset );
vr::VRChaperoneSetup()->SetWorkingSeatedZeroPoseToRawTrackingPose(
&m_seatedCenterForReset );
// zeroOffsets();
// These commands set play area as centered which is un-desirable
// vr::VRChaperoneSetup()->SetWorkingStandingZeroPoseToRawTrackingPose(
// &m_universeCenterForReset );
// vr::VRChaperoneSetup()->SetWorkingSeatedZeroPoseToRawTrackingPose(
// &m_seatedCenterForReset );
vr::VRChaperoneSetup()->CommitWorkingCopy( vr::EChaperoneConfigFile_Live );
@@ -2495,29 +2477,6 @@ void MoveCenterTabController::updateSpace( bool forceUpdate )
return;
}
// reload from disk if we're at zero offsets and allow external edits
if ( allowExternalEdits()
&& ( abs( m_oldOffsetX ) + abs( m_oldOffsetY ) + abs( m_oldOffsetZ )
+ abs( static_cast<float>( m_oldRotation ) ) )
== 0 )
{
vr::VRChaperoneSetup()->ReloadFromDisk( vr::EChaperoneConfigFile_Live );
vr::VRChaperoneSetup()->CommitWorkingCopy(
vr::EChaperoneConfigFile_Live );
updateChaperoneResetData();
}
// do a late on-demand setting of seated center basis when we need it
// for motion. This gives the reload from disk a little more time to
// complete before we apply the new seated basis.
if ( m_pendingSeatedRecenter )
{
vr::VRChaperoneSetup()->GetWorkingSeatedZeroPoseToRawTrackingPose(
&m_seatedCenterForReset );
m_pendingSeatedRecenter = false;
}
vr::HmdMatrix34_t offsetUniverseCenter;
// set offsetUniverseCenter to the current angle
+6 -7
View File
@@ -126,8 +126,9 @@ class MoveCenterTabController : public QObject
Q_PROPERTY(
bool showLogMatricesButton READ showLogMatricesButton WRITE
setShowLogMatricesButton NOTIFY showLogMatricesButtonChanged )
Q_PROPERTY( bool allowExternalEdits READ allowExternalEdits WRITE
setAllowExternalEdits NOTIFY allowExternalEditsChanged )
// Q_PROPERTY( bool allowExternalEdits READ allowExternalEdits WRITE
// setAllowExternalEdits NOTIFY allowExternalEditsChanged
// )
Q_PROPERTY(
bool universeCenteredRotation READ universeCenteredRotation WRITE
setUniverseCenteredRotation NOTIFY universeCenteredRotationChanged )
@@ -190,8 +191,6 @@ private:
bool m_gravityActive = false;
bool m_gravityReversed = false;
bool m_pendingZeroOffsets = true;
bool m_pendingSeatedRecenter = false;
bool m_selfRequestedSeatedRecenter = false;
bool m_dashWasOpenPreviousFrame = false;
bool m_roomSetupModeDetected = false;
bool m_seatedModeDetected = false;
@@ -266,7 +265,7 @@ public:
bool lockYToggle() const;
bool lockZToggle() const;
bool showLogMatricesButton() const;
bool allowExternalEdits() const;
// bool allowExternalEdits() const;
bool universeCenteredRotation() const;
bool isInitComplete() const;
double getHmdYawTotal();
@@ -345,7 +344,7 @@ public slots:
void setLockY( bool value, bool notify = true );
void setLockZ( bool value, bool notify = true );
void setShowLogMatricesButton( bool value, bool notify = true );
void setAllowExternalEdits( bool value, bool notify = true );
// void setAllowExternalEdits( bool value, bool notify = true );
void setUniverseCenteredRotation( bool value, bool notify = true );
void shutdown();
@@ -388,7 +387,7 @@ signals:
void requireLockYChanged( bool value );
void requireLockZChanged( bool value );
void showLogMatricesButtonChanged( bool value );
void allowExternalEditsChanged( bool value );
// void allowExternalEditsChanged( bool value );
void universeCenteredRotationChanged( bool value );
void offsetProfilesUpdated();
};
+1 -1
View File
@@ -1 +1 @@
{ "major": 5, "minor": 7, "patch": 4, "updateMessage": "", "optionalMessage": "" }
{ "major": 5, "minor": 8, "patch": 6, "updateMessage": "", "optionalMessage": "" }