#include "trainjs.h" #include #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 joysticks = jsmanager->inputDevices(); qDebug()<<"loading joysticks number attached: "<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(new TrainJs(id, axis))); qDebug()<<"matched joystick: "<name<<" axis "<> TrainJs::getJsDevices() { return js_; } std::weak_ptr TrainJs::getItem() { return item_; } void TrainJs::setItem(std::weak_ptr 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 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; } } }