mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-24 23:01:47 -05:00

subrepo: subdir: "libultraship" merged: "a484cda98" upstream: origin: "https://github.com/HarbourMasters/libultraship.git" branch: "main" commit: "a484cda98" git-subrepo: version: "0.4.1" origin: "???" commit: "???"
96 lines
3.4 KiB
C++
96 lines
3.4 KiB
C++
#include "Controller.h"
|
|
#include "GlobalCtx2.h"
|
|
#include "stox.h"
|
|
#include <memory>
|
|
|
|
namespace Ship {
|
|
Controller::Controller(int32_t dwControllerNumber) : dwControllerNumber(dwControllerNumber) {
|
|
dwPressedButtons = 0;
|
|
wStickX = 0;
|
|
wStickY = 0;
|
|
wGyroX = 0;
|
|
wGyroY = 0;
|
|
Attachment = nullptr;
|
|
}
|
|
|
|
void Controller::Read(OSContPad* pad) {
|
|
ReadFromSource();
|
|
|
|
pad->button |= dwPressedButtons & 0xFFFF;
|
|
|
|
if (pad->stick_x == 0) {
|
|
if (dwPressedButtons & BTN_STICKLEFT) {
|
|
pad->stick_x = -128;
|
|
}
|
|
else if (dwPressedButtons & BTN_STICKRIGHT) {
|
|
pad->stick_x = 127;
|
|
}
|
|
else {
|
|
pad->stick_x = wStickX;
|
|
}
|
|
}
|
|
|
|
if (pad->stick_y == 0) {
|
|
if (dwPressedButtons & BTN_STICKDOWN) {
|
|
pad->stick_y = -128;
|
|
}
|
|
else if (dwPressedButtons & BTN_STICKUP) {
|
|
pad->stick_y = 127;
|
|
}
|
|
else {
|
|
pad->stick_y = wStickY;
|
|
}
|
|
}
|
|
|
|
pad->gyro_x = wGyroX;
|
|
pad->gyro_y = wGyroY;
|
|
}
|
|
|
|
void Controller::SetButtonMapping(const std::string& szButtonName, int32_t dwScancode) {
|
|
// Update the config value.
|
|
std::string ConfSection = GetBindingConfSection();
|
|
std::shared_ptr<ConfigFile> pConf = GlobalCtx2::GetInstance()->GetConfig();
|
|
ConfigFile& Conf = *pConf.get();
|
|
Conf[ConfSection][szButtonName] = dwScancode;
|
|
|
|
// Reload the button mapping from Config
|
|
LoadBinding();
|
|
}
|
|
|
|
void Controller::LoadBinding() {
|
|
std::string ConfSection = GetBindingConfSection();
|
|
std::shared_ptr<ConfigFile> pConf = GlobalCtx2::GetInstance()->GetConfig();
|
|
ConfigFile& Conf = *pConf.get();
|
|
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CRIGHT)])] = BTN_CRIGHT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CLEFT)])] = BTN_CLEFT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CDOWN)])] = BTN_CDOWN;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CUP)])] = BTN_CUP;
|
|
//ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CRIGHT + "_2")])] = BTN_CRIGHT;
|
|
//ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CLEFT + "_2")])] = BTN_CLEFT;
|
|
//ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CDOWN + "_2")])] = BTN_CDOWN;
|
|
//ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_CUP + "_2")])] = BTN_CUP;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_R)])] = BTN_R;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_L)])] = BTN_L;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_DRIGHT)])] = BTN_DRIGHT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_DLEFT)])] = BTN_DLEFT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_DDOWN)])] = BTN_DDOWN;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_DUP)])] = BTN_DUP;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_START)])] = BTN_START;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_Z)])] = BTN_Z;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_B)])] = BTN_B;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_A)])] = BTN_A;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_STICKRIGHT)])] = BTN_STICKRIGHT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_STICKLEFT)])] = BTN_STICKLEFT;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_STICKDOWN)])] = BTN_STICKDOWN;
|
|
ButtonMapping[Ship::stoi(Conf[ConfSection][STR(BTN_STICKUP)])] = BTN_STICKUP;
|
|
}
|
|
|
|
std::string Controller::GetConfSection() {
|
|
return GetControllerType() + " CONTROLLER " + std::to_string(GetControllerNumber() + 1);
|
|
}
|
|
|
|
std::string Controller::GetBindingConfSection() {
|
|
return GetControllerType() + " CONTROLLER BINDING " + std::to_string(GetControllerNumber() + 1);
|
|
}
|
|
} |