TrainControllerUi/src/trainjs.cpp

99 lines
1.9 KiB
C++

#include "trainjs.h"
#include <QDebug>
#include "items/train.h"
TrainJs::TrainJs(int id, int axis): id_(id), axis_(axis)
{
QJoysticks* jsmanager = QJoysticks::getInstance();
connect(jsmanager, &QJoysticks::axisChanged, this, &TrainJs::axisChanged);
connect(jsmanager, &QJoysticks::buttonChanged, this, &TrainJs::buttonChanged);
}
TrainJs::~TrainJs()
{
}
void TrainJs::init()
{
QJoysticks* jsmanager = QJoysticks::getInstance();
jsmanager->updateInterfaces();
const QList<QJoystickDevice*> joysticks = jsmanager->inputDevices();
qDebug()<<"loading joysticks number attached: "<<jsmanager->count();
for(int id = 0; id < joysticks.count(); ++id)
{
QJoystickDevice *joystick = joysticks[id];
if(joystick->name == JOYSTICK_NAME)
{
for(int axis = 0; axis < joystick->axes.count(); ++axis)
{
js_.push_back(std::shared_ptr<TrainJs>(new TrainJs(id, axis)));
qDebug()<<"matched joystick: "<<joystick->name<<" axis "<<axis;
}
}
}
}
std::vector<std::shared_ptr<TrainJs>> TrainJs::getJsDevices()
{
return js_;
}
std::weak_ptr<Item> TrainJs::getItem()
{
return item_;
}
void TrainJs::setItem(std::weak_ptr<Item> item)
{
item_ = item;
wantsNewItem = false;
inhibitUntillZero = true;
}
bool TrainJs::itemIsSet()
{
return !item_.expired();
}
void TrainJs::axisChanged(const int id, const int axis, const qreal value)
{
if(id == id_ && axis == axis_)
{
if(std::shared_ptr<Item> workitem = item_.lock())
{
int8_t newValue = value*14;
if(newValue == 0)
inhibitUntillZero = false;
if(newValue != workitem->getValue() && !inhibitUntillZero)
workitem->setValue(newValue);
}
else
{
wantsNewItem = true;
reqNewItem();
}
}
}
void TrainJs::buttonChanged(const int id, const int button, const bool pressed)
{
if(id == id_ && button == axis_)
{
if(pressed)
{
handleRelease = true;
}
else if(handleRelease)
{
wantsNewItem = true;
reqNewItem();
handleRelease = false;
}
}
}