295 lines
11 KiB
C++
295 lines
11 KiB
C++
|
|
#pragma once
|
|
|
|
#include <QObject>
|
|
#include <memory>
|
|
#include <chrono>
|
|
#include <thread>
|
|
#include <openvr.h>
|
|
|
|
class QQuickWindow;
|
|
// application namespace
|
|
namespace advsettings
|
|
{
|
|
// forward declaration
|
|
class OverlayController;
|
|
|
|
struct ChaperoneProfile
|
|
{
|
|
std::string profileName;
|
|
|
|
bool includesChaperoneGeometry = false;
|
|
unsigned chaperoneGeometryQuadCount = 0;
|
|
std::unique_ptr<vr::HmdQuad_t> chaperoneGeometryQuads = nullptr;
|
|
vr::HmdMatrix34_t standingCenter;
|
|
float playSpaceAreaX = 0.0f;
|
|
float playSpaceAreaZ = 0.0f;
|
|
|
|
bool includesVisibility = false;
|
|
float visibility = 0.6f;
|
|
|
|
bool includesFadeDistance = false;
|
|
float fadeDistance = 0.7f;
|
|
|
|
bool includesCenterMarker = false;
|
|
bool centerMarker = false;
|
|
|
|
bool includesPlaySpaceMarker = false;
|
|
bool playSpaceMarker = false;
|
|
|
|
bool includesFloorBoundsMarker = false;
|
|
bool floorBoundsMarker = false;
|
|
|
|
bool includesBoundsColor = false;
|
|
int boundsColor[3] = { 0, 0, 0 };
|
|
|
|
bool includesChaperoneStyle = false;
|
|
int chaperoneStyle = 0;
|
|
|
|
bool includesForceBounds = false;
|
|
bool forceBounds = false;
|
|
|
|
bool includesProximityWarningSettings = false;
|
|
bool enableChaperoneSwitchToBeginner = false;
|
|
float chaperoneSwitchToBeginnerDistance = 0.0f;
|
|
bool enableChaperoneHapticFeedback = false;
|
|
float chaperoneHapticFeedbackDistance = 0.0f;
|
|
bool enableChaperoneAlarmSound = false;
|
|
bool chaperoneAlarmSoundLooping = true;
|
|
bool chaperoneAlarmSoundAdjustVolume = false;
|
|
float chaperoneAlarmSoundDistance = 0.0f;
|
|
bool enableChaperoneShowDashboard = false;
|
|
float chaperoneShowDashboardDistance = 0.0f;
|
|
bool enableChaperoneVelocityModifier = false;
|
|
float chaperoneVelocityModifier = 0.0f;
|
|
};
|
|
|
|
class ChaperoneTabController : public QObject
|
|
{
|
|
Q_OBJECT
|
|
Q_PROPERTY( float boundsVisibility READ boundsVisibility WRITE
|
|
setBoundsVisibility NOTIFY boundsVisibilityChanged )
|
|
Q_PROPERTY( float fadeDistance READ fadeDistance WRITE setFadeDistance
|
|
NOTIFY fadeDistanceChanged )
|
|
Q_PROPERTY( float height READ height WRITE setHeight NOTIFY heightChanged )
|
|
Q_PROPERTY( bool centerMarker READ centerMarker WRITE setCenterMarker NOTIFY
|
|
centerMarkerChanged )
|
|
Q_PROPERTY( bool playSpaceMarker READ playSpaceMarker WRITE
|
|
setPlaySpaceMarker NOTIFY playSpaceMarkerChanged )
|
|
Q_PROPERTY( bool forceBounds READ forceBounds WRITE setForceBounds NOTIFY
|
|
forceBoundsChanged )
|
|
|
|
Q_PROPERTY( bool chaperoneSwitchToBeginnerEnabled READ
|
|
isChaperoneSwitchToBeginnerEnabled WRITE
|
|
setChaperoneSwitchToBeginnerEnabled NOTIFY
|
|
chaperoneSwitchToBeginnerEnabledChanged )
|
|
Q_PROPERTY( float chaperoneSwitchToBeginnerDistance READ
|
|
chaperoneSwitchToBeginnerDistance WRITE
|
|
setChaperoneSwitchToBeginnerDistance NOTIFY
|
|
chaperoneSwitchToBeginnerDistanceChanged )
|
|
|
|
Q_PROPERTY( bool chaperoneHapticFeedbackEnabled READ
|
|
isChaperoneHapticFeedbackEnabled WRITE
|
|
setChaperoneHapticFeedbackEnabled NOTIFY
|
|
chaperoneHapticFeedbackEnabledChanged )
|
|
Q_PROPERTY( float chaperoneHapticFeedbackDistance READ
|
|
chaperoneHapticFeedbackDistance WRITE
|
|
setChaperoneHapticFeedbackDistance NOTIFY
|
|
chaperoneHapticFeedbackDistanceChanged )
|
|
|
|
Q_PROPERTY(
|
|
bool chaperoneAlarmSoundEnabled READ isChaperoneAlarmSoundEnabled WRITE
|
|
setChaperoneAlarmSoundEnabled NOTIFY
|
|
chaperoneAlarmSoundEnabledChanged )
|
|
Q_PROPERTY(
|
|
bool chaperoneAlarmSoundLooping READ isChaperoneAlarmSoundLooping WRITE
|
|
setChaperoneAlarmSoundLooping NOTIFY
|
|
chaperoneAlarmSoundLoopingChanged )
|
|
Q_PROPERTY( bool chaperoneAlarmSoundAdjustVolume READ
|
|
isChaperoneAlarmSoundAdjustVolume WRITE
|
|
setChaperoneAlarmSoundAdjustVolume NOTIFY
|
|
chaperoneAlarmSoundAdjustVolumeChanged )
|
|
Q_PROPERTY(
|
|
float chaperoneAlarmSoundDistance READ chaperoneAlarmSoundDistance WRITE
|
|
setChaperoneAlarmSoundDistance NOTIFY
|
|
chaperoneAlarmSoundDistanceChanged )
|
|
|
|
Q_PROPERTY(
|
|
bool chaperoneShowDashboardEnabled READ isChaperoneShowDashboardEnabled
|
|
WRITE setChaperoneShowDashboardEnabled NOTIFY
|
|
chaperoneShowDashboardEnabledChanged )
|
|
Q_PROPERTY(
|
|
float chaperoneShowDashboardDistance READ chaperoneShowDashboardDistance
|
|
WRITE setChaperoneShowDashboardDistance NOTIFY
|
|
chaperoneShowDashboardDistanceChanged )
|
|
|
|
Q_PROPERTY( bool chaperoneVelocityModifierEnabled READ
|
|
isChaperoneVelocityModifierEnabled WRITE
|
|
setChaperoneVelocityModifierEnabled NOTIFY
|
|
chaperoneVelocityModifierEnabledChanged )
|
|
Q_PROPERTY( float chaperoneVelocityModifier READ chaperoneVelocityModifier
|
|
WRITE setChaperoneVelocityModifier NOTIFY
|
|
chaperoneVelocityModifierChanged )
|
|
|
|
private:
|
|
OverlayController* parent;
|
|
QQuickWindow* widget;
|
|
|
|
float m_visibility = 0.6f;
|
|
float m_fadeDistance = 0.7f;
|
|
float m_fadeDistanceModified = 0.7f;
|
|
float m_height = 2.0f;
|
|
bool m_centerMarker = false;
|
|
bool m_playSpaceMarker = false;
|
|
bool m_forceBounds = false;
|
|
|
|
bool m_enableChaperoneSwitchToBeginner = false;
|
|
float m_chaperoneSwitchToBeginnerDistance = 0.5f;
|
|
bool m_chaperoneSwitchToBeginnerActive = false;
|
|
int32_t m_chaperoneSwitchToBeginnerLastStyle = 0;
|
|
|
|
bool m_enableChaperoneHapticFeedback = true;
|
|
float m_chaperoneHapticFeedbackDistance = 0.5f;
|
|
bool m_chaperoneHapticFeedbackActive = false;
|
|
std::thread m_chaperoneHapticFeedbackThread;
|
|
|
|
bool m_enableChaperoneAlarmSound = false;
|
|
bool m_chaperoneAlarmSoundLooping = true;
|
|
bool m_chaperoneAlarmSoundAdjustVolume = false;
|
|
float m_chaperoneAlarmSoundDistance = 0.5f;
|
|
bool m_chaperoneAlarmSoundActive = false;
|
|
|
|
bool m_enableChaperoneShowDashboard = false;
|
|
float m_chaperoneShowDashboardDistance = 0.5f;
|
|
bool m_chaperoneShowDashboardActive = false;
|
|
|
|
bool m_enableChaperoneVelocityModifier = false;
|
|
float m_chaperoneVelocityModifier = 0.0f;
|
|
float m_chaperoneVelocityModifierCurrent = 1.0f;
|
|
|
|
unsigned settingsUpdateCounter = 0;
|
|
|
|
std::vector<ChaperoneProfile> chaperoneProfiles;
|
|
|
|
public:
|
|
~ChaperoneTabController();
|
|
|
|
void initStage1();
|
|
void initStage2( OverlayController* parent, QQuickWindow* widget );
|
|
|
|
void eventLoopTick( vr::TrackedDevicePose_t* devicePoses,
|
|
float leftSpeed,
|
|
float rightSpeed,
|
|
float hmdSpeed );
|
|
void handleChaperoneWarnings( float distance );
|
|
|
|
float boundsVisibility() const;
|
|
float fadeDistance() const;
|
|
float height() const;
|
|
bool centerMarker() const;
|
|
bool playSpaceMarker() const;
|
|
bool forceBounds() const;
|
|
|
|
bool isChaperoneSwitchToBeginnerEnabled() const;
|
|
float chaperoneSwitchToBeginnerDistance() const;
|
|
|
|
bool isChaperoneHapticFeedbackEnabled() const;
|
|
float chaperoneHapticFeedbackDistance() const;
|
|
|
|
bool isChaperoneAlarmSoundEnabled() const;
|
|
bool isChaperoneAlarmSoundLooping() const;
|
|
bool isChaperoneAlarmSoundAdjustVolume() const;
|
|
float chaperoneAlarmSoundDistance() const;
|
|
|
|
bool isChaperoneShowDashboardEnabled() const;
|
|
float chaperoneShowDashboardDistance() const;
|
|
|
|
bool isChaperoneVelocityModifierEnabled() const;
|
|
float chaperoneVelocityModifier() const;
|
|
|
|
void reloadChaperoneProfiles();
|
|
void saveChaperoneProfiles();
|
|
|
|
Q_INVOKABLE unsigned getChaperoneProfileCount();
|
|
Q_INVOKABLE QString getChaperoneProfileName( unsigned index );
|
|
|
|
float getBoundsMaxY();
|
|
|
|
public slots:
|
|
void setBoundsVisibility( float value, bool notify = true );
|
|
void setFadeDistance( float value, bool notify = true );
|
|
void setHeight( float value, bool notify = true );
|
|
void updateHeight( float value, bool notify = true );
|
|
void setCenterMarker( bool value, bool notify = true );
|
|
void setPlaySpaceMarker( bool value, bool notify = true );
|
|
void setForceBounds( bool value, bool notify = true );
|
|
|
|
void setChaperoneSwitchToBeginnerEnabled( bool value, bool notify = true );
|
|
void setChaperoneSwitchToBeginnerDistance( float value,
|
|
bool notify = true );
|
|
|
|
void setChaperoneHapticFeedbackEnabled( bool value, bool notify = true );
|
|
void setChaperoneHapticFeedbackDistance( float value, bool notify = true );
|
|
|
|
void setChaperoneAlarmSoundEnabled( bool value, bool notify = true );
|
|
void setChaperoneAlarmSoundLooping( bool value, bool notify = true );
|
|
void setChaperoneAlarmSoundAdjustVolume( bool value, bool notify = true );
|
|
void setChaperoneAlarmSoundDistance( float value, bool notify = true );
|
|
|
|
void setChaperoneShowDashboardEnabled( bool value, bool notify = true );
|
|
void setChaperoneShowDashboardDistance( float value, bool notify = true );
|
|
|
|
void setChaperoneVelocityModifierEnabled( bool value, bool notify = true );
|
|
void setChaperoneVelocityModifier( float value, bool notify = true );
|
|
|
|
void flipOrientation();
|
|
void reloadFromDisk();
|
|
|
|
void addChaperoneProfile( QString name,
|
|
bool includeGeometry,
|
|
bool includeVisbility,
|
|
bool includeFadeDistance,
|
|
bool includeCenterMarker,
|
|
bool includePlaySpaceMarker,
|
|
bool includeFloorBounds,
|
|
bool includeBoundsColor,
|
|
bool includeChaperoneStyle,
|
|
bool includeForceBounds,
|
|
bool includesProximityWarningSettings );
|
|
void applyChaperoneProfile( unsigned index );
|
|
void deleteChaperoneProfile( unsigned index );
|
|
|
|
void reset();
|
|
|
|
void shutdown();
|
|
|
|
signals:
|
|
void boundsVisibilityChanged( float value );
|
|
void fadeDistanceChanged( float value );
|
|
void heightChanged( float value );
|
|
void centerMarkerChanged( bool value );
|
|
void playSpaceMarkerChanged( bool value );
|
|
void forceBoundsChanged( bool value );
|
|
|
|
void chaperoneSwitchToBeginnerEnabledChanged( bool value );
|
|
void chaperoneSwitchToBeginnerDistanceChanged( float value );
|
|
|
|
void chaperoneHapticFeedbackEnabledChanged( bool value );
|
|
void chaperoneHapticFeedbackDistanceChanged( float value );
|
|
|
|
void chaperoneAlarmSoundEnabledChanged( bool value );
|
|
void chaperoneAlarmSoundLoopingChanged( bool value );
|
|
void chaperoneAlarmSoundAdjustVolumeChanged( bool value );
|
|
void chaperoneAlarmSoundDistanceChanged( float value );
|
|
|
|
void chaperoneShowDashboardEnabledChanged( bool value );
|
|
void chaperoneShowDashboardDistanceChanged( float value );
|
|
|
|
void chaperoneVelocityModifierEnabledChanged( bool value );
|
|
void chaperoneVelocityModifierChanged( float value );
|
|
|
|
void chaperoneProfilesUpdated();
|
|
};
|
|
|
|
} // namespace advsettings
|