#pragma once #include #include class QQuickWindow; // application namespace namespace advsettings { // forward declaration class OverlayController; class FixFloorTabController : public QObject { Q_OBJECT Q_PROPERTY(bool canUndo READ canUndo WRITE setCanUndo NOTIFY canUndoChanged) private: OverlayController* parent; QQuickWindow* widget; float controllerUpOffsetCorrection = 0.062f; // Controller touchpad facing upwards float controllerDownOffsetCorrection = 0.006f; // Controller touchpad facing downwards int state = 0; // 0 .. idle, 1 .. floor fix in progress, 2 .. recenter in progress vr::TrackedDeviceIndex_t referenceController = vr::k_unTrackedDeviceIndexInvalid; unsigned measurementCount = 0; double tempOffsetX = 0.0; double tempOffsetY = 0.0; double tempOffsetZ = 0.0; double tempRoll = 0.0; float floorOffsetX = 0.0f; float floorOffsetY = 0.0f; float floorOffsetZ = 0.0f; QString statusMessage = ""; float statusMessageTimeout = 0.0f; bool m_canUndo = false; public: void initStage1(); void initStage2(OverlayController* parent, QQuickWindow* widget); void eventLoopTick(vr::TrackedDevicePose_t* devicePoses); Q_INVOKABLE QString currentStatusMessage(); Q_INVOKABLE float currentStatusMessageTimeout(); bool canUndo() const; public slots: void fixFloorClicked(); void recenterClicked(); void undoFixFloorClicked(); void setCanUndo(bool value, bool notify = true); signals: void statusMessageSignal(); void measureStartSignal(); void measureEndSignal(); void canUndoChanged(bool value); }; } // namespace advsettings