Add variable support to OpenVR condition

This commit is contained in:
WarmUpTill 2023-03-15 18:54:10 +01:00 committed by WarmUpTill
parent dff599df4c
commit b607940c8c
2 changed files with 89 additions and 64 deletions

View File

@ -13,10 +13,10 @@ bool MacroConditionOpenVR::_registered = MacroConditionFactory::Register(
"AdvSceneSwitcher.condition.openvr"}); "AdvSceneSwitcher.condition.openvr"});
static vr::IVRSystem *openvrSystem; static vr::IVRSystem *openvrSystem;
std::mutex openvrMutex; static std::mutex openvrMutex;
std::condition_variable openvrCV; static std::condition_variable openvrCV;
void processOpenVREvents() static void processOpenVREvents()
{ {
std::unique_lock<std::mutex> lock(openvrMutex); std::unique_lock<std::mutex> lock(openvrMutex);
vr::VREvent_t event; vr::VREvent_t event;
@ -33,7 +33,7 @@ void processOpenVREvents()
blog(LOG_INFO, "stop handling openVR events"); blog(LOG_INFO, "stop handling openVR events");
} }
void initOpenVR(vr::EVRInitError &err) static void initOpenVR(vr::EVRInitError &err)
{ {
openvrSystem = vr::VR_Init(&err, vr::VRApplication_Background); openvrSystem = vr::VR_Init(&err, vr::VRApplication_Background);
if (openvrSystem) { if (openvrSystem) {
@ -48,7 +48,7 @@ struct TrackingData {
bool valid = false; bool valid = false;
}; };
TrackingData getOpenVRPos(vr::EVRInitError &err) static TrackingData getOpenVRPos(vr::EVRInitError &err)
{ {
TrackingData data; TrackingData data;
std::unique_lock<std::mutex> lock(openvrMutex); std::unique_lock<std::mutex> lock(openvrMutex);
@ -87,41 +87,51 @@ bool MacroConditionOpenVR::CheckCondition()
bool MacroConditionOpenVR::Save(obs_data_t *obj) const bool MacroConditionOpenVR::Save(obs_data_t *obj) const
{ {
MacroCondition::Save(obj); MacroCondition::Save(obj);
obs_data_set_double(obj, "minX", _minX); _minX.Save(obj, "minX");
obs_data_set_double(obj, "minY", _minY); _minY.Save(obj, "minY");
obs_data_set_double(obj, "minZ", _minZ); _minZ.Save(obj, "minZ");
obs_data_set_double(obj, "maxX", _maxX); _maxX.Save(obj, "maxX");
obs_data_set_double(obj, "maxY", _maxY); _maxY.Save(obj, "maxY");
obs_data_set_double(obj, "maxZ", _maxZ); _maxZ.Save(obj, "maxZ");
obs_data_set_int(obj, "version", 1);
return true; return true;
} }
bool MacroConditionOpenVR::Load(obs_data_t *obj) bool MacroConditionOpenVR::Load(obs_data_t *obj)
{ {
MacroCondition::Load(obj); MacroCondition::Load(obj);
_minX = obs_data_get_double(obj, "minX"); if (!obs_data_has_user_value(obj, "version")) {
_minY = obs_data_get_double(obj, "minY"); _minX = obs_data_get_double(obj, "minX");
_minZ = obs_data_get_double(obj, "minZ"); _minY = obs_data_get_double(obj, "minY");
_maxX = obs_data_get_double(obj, "maxX"); _minZ = obs_data_get_double(obj, "minZ");
_maxY = obs_data_get_double(obj, "maxY"); _maxX = obs_data_get_double(obj, "maxX");
_maxZ = obs_data_get_double(obj, "maxZ"); _maxY = obs_data_get_double(obj, "maxY");
_maxZ = obs_data_get_double(obj, "maxZ");
} else {
_minX.Load(obj, "minX");
_minY.Load(obj, "minY");
_minZ.Load(obj, "minZ");
_maxX.Load(obj, "maxX");
_maxY.Load(obj, "maxY");
_maxZ.Load(obj, "maxZ");
}
return true; return true;
} }
MacroConditionOpenVREdit::MacroConditionOpenVREdit( MacroConditionOpenVREdit::MacroConditionOpenVREdit(
QWidget *parent, std::shared_ptr<MacroConditionOpenVR> entryData) QWidget *parent, std::shared_ptr<MacroConditionOpenVR> entryData)
: QWidget(parent) : QWidget(parent),
_minX(new VariableDoubleSpinBox()),
_minY(new VariableDoubleSpinBox()),
_minZ(new VariableDoubleSpinBox()),
_maxX(new VariableDoubleSpinBox()),
_maxY(new VariableDoubleSpinBox()),
_maxZ(new VariableDoubleSpinBox()),
_xPos(new QLabel("-")),
_yPos(new QLabel("-")),
_zPos(new QLabel("-")),
_errLabel(new QLabel())
{ {
_minX = new QDoubleSpinBox();
_minY = new QDoubleSpinBox();
_minZ = new QDoubleSpinBox();
_maxX = new QDoubleSpinBox();
_maxY = new QDoubleSpinBox();
_maxZ = new QDoubleSpinBox();
_xPos = new QLabel("-");
_yPos = new QLabel("-");
_zPos = new QLabel("-");
_errLabel = new QLabel();
_errLabel->setVisible(false); _errLabel->setVisible(false);
_minX->setPrefix("Min X: "); _minX->setPrefix("Min X: ");
@ -145,18 +155,30 @@ MacroConditionOpenVREdit::MacroConditionOpenVREdit(
_maxY->setMaximum(99); _maxY->setMaximum(99);
_maxZ->setMaximum(99); _maxZ->setMaximum(99);
QWidget::connect(_minX, SIGNAL(valueChanged(double)), this, QWidget::connect(
SLOT(MinXChanged(double))); _minX,
QWidget::connect(_minY, SIGNAL(valueChanged(double)), this, SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
SLOT(MinYChanged(double))); this, SLOT(MinXChanged(const NumberVariable<double> &)));
QWidget::connect(_minZ, SIGNAL(valueChanged(double)), this, QWidget::connect(
SLOT(MinZChanged(double))); _minY,
QWidget::connect(_maxX, SIGNAL(valueChanged(double)), this, SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
SLOT(MaxXChanged(double))); this, SLOT(MinYChanged(const NumberVariable<double> &)));
QWidget::connect(_maxY, SIGNAL(valueChanged(double)), this, QWidget::connect(
SLOT(MaxYChanged(double))); _minZ,
QWidget::connect(_maxZ, SIGNAL(valueChanged(double)), this, SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
SLOT(MaxZChanged(double))); this, SLOT(MinZChanged(const NumberVariable<double> &)));
QWidget::connect(
_maxX,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(MaxXChanged(const NumberVariable<double> &)));
QWidget::connect(
_maxY,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(MaxYChanged(const NumberVariable<double> &)));
QWidget::connect(
_maxZ,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(MaxZChanged(const NumberVariable<double> &)));
QGridLayout *controlsLayout = new QGridLayout; QGridLayout *controlsLayout = new QGridLayout;
controlsLayout->addWidget(_minX, 0, 0); controlsLayout->addWidget(_minX, 0, 0);
@ -206,7 +228,7 @@ MacroConditionOpenVREdit::MacroConditionOpenVREdit(
_loading = false; _loading = false;
} }
void MacroConditionOpenVREdit::MinXChanged(double pos) void MacroConditionOpenVREdit::MinXChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -216,7 +238,7 @@ void MacroConditionOpenVREdit::MinXChanged(double pos)
_entryData->_minX = pos; _entryData->_minX = pos;
} }
void MacroConditionOpenVREdit::MinYChanged(double pos) void MacroConditionOpenVREdit::MinYChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -226,7 +248,7 @@ void MacroConditionOpenVREdit::MinYChanged(double pos)
_entryData->_minY = pos; _entryData->_minY = pos;
} }
void MacroConditionOpenVREdit::MinZChanged(double pos) void MacroConditionOpenVREdit::MinZChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -236,7 +258,7 @@ void MacroConditionOpenVREdit::MinZChanged(double pos)
_entryData->_minZ = pos; _entryData->_minZ = pos;
} }
void MacroConditionOpenVREdit::MaxXChanged(double pos) void MacroConditionOpenVREdit::MaxXChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -246,7 +268,7 @@ void MacroConditionOpenVREdit::MaxXChanged(double pos)
_entryData->_maxX = pos; _entryData->_maxX = pos;
} }
void MacroConditionOpenVREdit::MaxYChanged(double pos) void MacroConditionOpenVREdit::MaxYChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -256,7 +278,7 @@ void MacroConditionOpenVREdit::MaxYChanged(double pos)
_entryData->_maxY = pos; _entryData->_maxY = pos;
} }
void MacroConditionOpenVREdit::MaxZChanged(double pos) void MacroConditionOpenVREdit::MaxZChanged(const NumberVariable<double> &pos)
{ {
if (_loading || !_entryData) { if (_loading || !_entryData) {
return; return;
@ -293,8 +315,10 @@ void MacroConditionOpenVREdit::UpdateEntryData()
return; return;
} }
_minX->setValue(_entryData->_minX); _minX->SetValue(_entryData->_minX);
_minY->setValue(_entryData->_minY); _minY->SetValue(_entryData->_minY);
_maxX->setValue(_entryData->_maxX); _minZ->SetValue(_entryData->_minZ);
_maxY->setValue(_entryData->_maxY); _maxX->SetValue(_entryData->_maxX);
_maxY->SetValue(_entryData->_maxY);
_maxZ->SetValue(_entryData->_maxZ);
} }

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
#include <macro.hpp> #include <macro.hpp>
#include <variable-spinbox.hpp>
#include <QDoubleSpinBox>
#include <QComboBox> #include <QComboBox>
#include <QPushButton> #include <QPushButton>
#include <QTimer> #include <QTimer>
@ -18,7 +18,8 @@ public:
return std::make_shared<MacroConditionOpenVR>(m); return std::make_shared<MacroConditionOpenVR>(m);
} }
double _minX = 0, _minY = 0, _minZ = 0, _maxX = 0, _maxY = 0, _maxZ = 0; NumberVariable<double> _minX = 0.0, _minY = 0.0, _minZ = 0.0,
_maxX = 0.0, _maxY = 0.0, _maxZ = 0.0;
private: private:
static bool _registered; static bool _registered;
@ -42,21 +43,21 @@ public:
} }
private slots: private slots:
void MinXChanged(double pos); void MinXChanged(const NumberVariable<double> &pos);
void MinYChanged(double pos); void MinYChanged(const NumberVariable<double> &pos);
void MinZChanged(double pos); void MinZChanged(const NumberVariable<double> &pos);
void MaxXChanged(double pos); void MaxXChanged(const NumberVariable<double> &pos);
void MaxYChanged(double pos); void MaxYChanged(const NumberVariable<double> &pos);
void MaxZChanged(double pos); void MaxZChanged(const NumberVariable<double> &pos);
void UpdateOpenVRPos(); void UpdateOpenVRPos();
protected: protected:
QDoubleSpinBox *_minX; VariableDoubleSpinBox *_minX;
QDoubleSpinBox *_minY; VariableDoubleSpinBox *_minY;
QDoubleSpinBox *_minZ; VariableDoubleSpinBox *_minZ;
QDoubleSpinBox *_maxX; VariableDoubleSpinBox *_maxX;
QDoubleSpinBox *_maxY; VariableDoubleSpinBox *_maxY;
QDoubleSpinBox *_maxZ; VariableDoubleSpinBox *_maxZ;
QLabel *_xPos; QLabel *_xPos;
QLabel *_yPos; QLabel *_yPos;
QLabel *_zPos; QLabel *_zPos;