Skip to content

Commit

Permalink
5.8.6 (#661)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
ykeara authored Feb 28, 2024
1 parent cee78f2 commit ec865f5
Show file tree
Hide file tree
Showing 15 changed files with 74 additions and 112 deletions.
11 changes: 6 additions & 5 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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">
Expand All @@ -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.)
Expand Down
2 changes: 1 addition & 1 deletion build_scripts/compile_version_string.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.8.3-release
5.8.6-release
7 changes: 5 additions & 2 deletions docs/keyboard_input_guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

## 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.
Expand Down Expand Up @@ -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` |
Expand Down
Binary file modified docs/screenshots/SettingsPage.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/screenshots/SteamVRPage.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/screenshots/UtilitiesPage.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
17 changes: 15 additions & 2 deletions src/overlaycontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -1430,6 +1441,8 @@ void OverlayController::AddOffsetToUniverseCenter(
{
vr::VRChaperoneSetup()->CommitWorkingCopy(
vr::EChaperoneConfigFile_Live );
vr::VRChaperoneSetup()->ReloadFromDisk(
vr::EChaperoneConfigFile_Temp );
}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/overlaycontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ class OverlayController : public QObject
QString m_updateMessage = "";
QString m_optionalMessage = "";
QString m_versionCheckText = "";
bool m_incomingReset = false;

QUrl m_runtimePathUrl;

Expand Down
14 changes: 0 additions & 14 deletions src/res/qml/SettingsPage.qml
Original file line number Diff line number Diff line change
Expand Up @@ -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)"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -362,9 +351,6 @@ MyStackViewPage {

Connections {
target: MoveCenterTabController
onAllowExternalEditsChanged: {
allowExternalEditsToggle.checked = MoveCenterTabController.allowExternalEdits
}
onUniverseCenteredRotationChanged: {
universeCenteredRotationToggle.checked = MoveCenterTabController.universeCenteredRotation
}
Expand Down
2 changes: 1 addition & 1 deletion src/res/qml/steamvr_page/camera/CameraGroupBox.qml
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ GroupBox {
if(!c1){

steamvrCameraBoundsToggle.enabled = false;
steamvrCameraRoomToggle.enabled = false;
steamvrCameraContToggle.enabled = false;
}

}
Expand Down
6 changes: 3 additions & 3 deletions src/res/qml/video_page/brightness/BrightnessGroupBox.qml
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ GroupBox {

MySlider {
id: brightnessSlider
from: 0.10
from: 0.2
to: 1.0
stepSize: 0.01
value: 1.0
Expand All @@ -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
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ GroupBox {

MySlider {
id: brightnessSlider
from: 0.01
from: 0.2
to: 1.0
stepSize: 0.01
value: 1.0
Expand Down
109 changes: 34 additions & 75 deletions src/tabcontrollers/MoveCenterTabController.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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 )
{
LOG( INFO ) << "steamvr center?";
m_selfRequestedSeatedRecenter = true;
vr::VRChaperone()->ResetZeroPose( vr::TrackingUniverseSeated );
}
else
// This really covers standing reset as well
updateChaperoneResetData();
if ( m_offsetY != 0 )
{
LOG( INFO ) << "not our receneter";
updateSeatedResetData();
m_offsetY = -m_offsetY;
updateSpace();
updateChaperoneResetData();
}
// 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;
Expand All @@ -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
Expand Down Expand Up @@ -1106,6 +1088,7 @@ void MoveCenterTabController::zeroOffsets()
// down properly.
parent->setPreviousShutdownSafe( false );
}
m_pendingZeroOffsets = true;
}
if ( m_roomSetupModeDetected )
{
Expand All @@ -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()
Expand Down Expand Up @@ -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()
Expand All @@ -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 );
}
Expand Down Expand Up @@ -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 );

Expand Down Expand Up @@ -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
Expand Down
Loading

0 comments on commit ec865f5

Please sign in to comment.