Paddle: make raw interface to return values in [-1,1] to ease transformations.

Signed-off-by: Andrea Odetti <mariofutire@gmail.com>
This commit is contained in:
Andrea Odetti 2020-10-15 16:24:20 +01:00
parent e8972aa824
commit d314546b11
8 changed files with 24 additions and 16 deletions

View file

@ -90,14 +90,14 @@ bool EvDevPaddle::getButton(int i) const
return value != 0;
}
int EvDevPaddle::getAxis(int i) const
double EvDevPaddle::getAxis(int i) const
{
if (myDev)
{
int value = 0;
int rc = libevdev_fetch_event_value(myDev.get(), EV_ABS, myAxisCodes[i], &value);
int pdl = 255 * (value - myAxisMins[i]) / (myAxisMaxs[i] - myAxisMins[i]);
return pdl;
const double axis = 2.0 * (value - myAxisMins[i]) / (myAxisMaxs[i] - myAxisMins[i]) - 1.0;
return axis;
}
else
{

View file

@ -18,7 +18,7 @@ public:
const std::string & getName() const;
virtual bool getButton(int i) const;
virtual int getAxis(int i) const;
virtual double getAxis(int i) const;
private:
int myFD;

View file

@ -43,7 +43,7 @@ bool GamepadPaddle::getButton(int i) const
}
}
int GamepadPaddle::getAxis(int i) const
double GamepadPaddle::getAxis(int i) const
{
double value;
switch (i)
@ -58,6 +58,5 @@ int GamepadPaddle::getAxis(int i) const
value = 0.0;
}
const int pdl = int((value + 1.0) / 2.0 * 255.0);
return pdl;
return value;
}

View file

@ -12,7 +12,7 @@ public:
static std::shared_ptr<Paddle> fromName(const QString & name);
virtual bool getButton(int i) const;
virtual int getAxis(int i) const;
virtual double getAxis(int i) const;
private:
GamepadPaddle(const std::shared_ptr<QGamepad> & gamepad);

View file

@ -27,16 +27,16 @@ bool Gamepad::getButton(int i) const
return value != 0;
}
int Gamepad::getAxis(int i) const
double Gamepad::getAxis(int i) const
{
if (myController)
{
const int value = SDL_GameControllerGetAxis(myController.get(), myAxisCodes[i]);
int pdl = 255 * (value - AXIS_MIN) / (AXIS_MAX - AXIS_MIN);
return pdl;
const double axis = 2.0 * double(value - AXIS_MIN) / double(AXIS_MAX - AXIS_MIN) - 1.0;
return axis;
}
else
{
return 0;
return 0.0;
}
}

View file

@ -13,7 +13,7 @@ public:
Gamepad(const int index);
virtual bool getButton(int i) const;
virtual int getAxis(int i) const;
virtual double getAxis(int i) const;
private:
std::shared_ptr<SDL_GameController> myController;

View file

@ -45,11 +45,18 @@ bool Paddle::getButton(int i) const
return false;
}
int Paddle::getAxis(int i) const
double Paddle::getAxis(int i) const
{
return 0;
}
int Paddle::getAxisValue(int i) const
{
const double axis = getAxis(i);
const int value = static_cast<int>((axis + 1.0) * 0.5 * 255);
return value;
}
Paddle::~Paddle()
{
}
@ -100,7 +107,7 @@ BYTE __stdcall JoyReadPosition(WORD pc, WORD address, BYTE bWrite, BYTE d, ULONG
if (nJoyNum == 0)
{
int axis = address & 1;
int pdl = paddle->getAxis(axis);
int pdl = paddle->getAxisValue(axis);
// This is from KEGS. It helps games like Championship Lode Runner & Boulderdash
if (pdl >= 255)
pdl = 280;

View file

@ -11,7 +11,9 @@ public:
virtual ~Paddle();
virtual bool getButton(int i) const;
virtual int getAxis(int i) const;
virtual double getAxis(int i) const;
int getAxisValue(int i) const;
static constexpr int ourOpenApple = 0x61;
static constexpr int ourSolidApple = 0x62;