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"});
static vr::IVRSystem *openvrSystem;
std::mutex openvrMutex;
std::condition_variable openvrCV;
static std::mutex openvrMutex;
static std::condition_variable openvrCV;
void processOpenVREvents()
static void processOpenVREvents()
{
std::unique_lock<std::mutex> lock(openvrMutex);
vr::VREvent_t event;
@ -33,7 +33,7 @@ void processOpenVREvents()
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);
if (openvrSystem) {
@ -48,7 +48,7 @@ struct TrackingData {
bool valid = false;
};
TrackingData getOpenVRPos(vr::EVRInitError &err)
static TrackingData getOpenVRPos(vr::EVRInitError &err)
{
TrackingData data;
std::unique_lock<std::mutex> lock(openvrMutex);
@ -87,41 +87,51 @@ bool MacroConditionOpenVR::CheckCondition()
bool MacroConditionOpenVR::Save(obs_data_t *obj) const
{
MacroCondition::Save(obj);
obs_data_set_double(obj, "minX", _minX);
obs_data_set_double(obj, "minY", _minY);
obs_data_set_double(obj, "minZ", _minZ);
obs_data_set_double(obj, "maxX", _maxX);
obs_data_set_double(obj, "maxY", _maxY);
obs_data_set_double(obj, "maxZ", _maxZ);
_minX.Save(obj, "minX");
_minY.Save(obj, "minY");
_minZ.Save(obj, "minZ");
_maxX.Save(obj, "maxX");
_maxY.Save(obj, "maxY");
_maxZ.Save(obj, "maxZ");
obs_data_set_int(obj, "version", 1);
return true;
}
bool MacroConditionOpenVR::Load(obs_data_t *obj)
{
MacroCondition::Load(obj);
_minX = obs_data_get_double(obj, "minX");
_minY = obs_data_get_double(obj, "minY");
_minZ = obs_data_get_double(obj, "minZ");
_maxX = obs_data_get_double(obj, "maxX");
_maxY = obs_data_get_double(obj, "maxY");
_maxZ = obs_data_get_double(obj, "maxZ");
if (!obs_data_has_user_value(obj, "version")) {
_minX = obs_data_get_double(obj, "minX");
_minY = obs_data_get_double(obj, "minY");
_minZ = obs_data_get_double(obj, "minZ");
_maxX = obs_data_get_double(obj, "maxX");
_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;
}
MacroConditionOpenVREdit::MacroConditionOpenVREdit(
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);
_minX->setPrefix("Min X: ");
@ -145,18 +155,30 @@ MacroConditionOpenVREdit::MacroConditionOpenVREdit(
_maxY->setMaximum(99);
_maxZ->setMaximum(99);
QWidget::connect(_minX, SIGNAL(valueChanged(double)), this,
SLOT(MinXChanged(double)));
QWidget::connect(_minY, SIGNAL(valueChanged(double)), this,
SLOT(MinYChanged(double)));
QWidget::connect(_minZ, SIGNAL(valueChanged(double)), this,
SLOT(MinZChanged(double)));
QWidget::connect(_maxX, SIGNAL(valueChanged(double)), this,
SLOT(MaxXChanged(double)));
QWidget::connect(_maxY, SIGNAL(valueChanged(double)), this,
SLOT(MaxYChanged(double)));
QWidget::connect(_maxZ, SIGNAL(valueChanged(double)), this,
SLOT(MaxZChanged(double)));
QWidget::connect(
_minX,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(MinXChanged(const NumberVariable<double> &)));
QWidget::connect(
_minY,
SIGNAL(NumberVariableChanged(const NumberVariable<double> &)),
this, SLOT(MinYChanged(const NumberVariable<double> &)));
QWidget::connect(
_minZ,
SIGNAL(NumberVariableChanged(const NumberVariable<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;
controlsLayout->addWidget(_minX, 0, 0);
@ -206,7 +228,7 @@ MacroConditionOpenVREdit::MacroConditionOpenVREdit(
_loading = false;
}
void MacroConditionOpenVREdit::MinXChanged(double pos)
void MacroConditionOpenVREdit::MinXChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -216,7 +238,7 @@ void MacroConditionOpenVREdit::MinXChanged(double pos)
_entryData->_minX = pos;
}
void MacroConditionOpenVREdit::MinYChanged(double pos)
void MacroConditionOpenVREdit::MinYChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -226,7 +248,7 @@ void MacroConditionOpenVREdit::MinYChanged(double pos)
_entryData->_minY = pos;
}
void MacroConditionOpenVREdit::MinZChanged(double pos)
void MacroConditionOpenVREdit::MinZChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -236,7 +258,7 @@ void MacroConditionOpenVREdit::MinZChanged(double pos)
_entryData->_minZ = pos;
}
void MacroConditionOpenVREdit::MaxXChanged(double pos)
void MacroConditionOpenVREdit::MaxXChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -246,7 +268,7 @@ void MacroConditionOpenVREdit::MaxXChanged(double pos)
_entryData->_maxX = pos;
}
void MacroConditionOpenVREdit::MaxYChanged(double pos)
void MacroConditionOpenVREdit::MaxYChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -256,7 +278,7 @@ void MacroConditionOpenVREdit::MaxYChanged(double pos)
_entryData->_maxY = pos;
}
void MacroConditionOpenVREdit::MaxZChanged(double pos)
void MacroConditionOpenVREdit::MaxZChanged(const NumberVariable<double> &pos)
{
if (_loading || !_entryData) {
return;
@ -293,8 +315,10 @@ void MacroConditionOpenVREdit::UpdateEntryData()
return;
}
_minX->setValue(_entryData->_minX);
_minY->setValue(_entryData->_minY);
_maxX->setValue(_entryData->_maxX);
_maxY->setValue(_entryData->_maxY);
_minX->SetValue(_entryData->_minX);
_minY->SetValue(_entryData->_minY);
_minZ->SetValue(_entryData->_minZ);
_maxX->SetValue(_entryData->_maxX);
_maxY->SetValue(_entryData->_maxY);
_maxZ->SetValue(_entryData->_maxZ);
}

View File

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