added extra buttons to right Paddle A too

This commit is contained in:
thrust26 2025-06-23 09:06:18 +02:00
parent ac57149ebd
commit 6ce835b3e6
7 changed files with 68 additions and 57 deletions

View File

@ -1048,6 +1048,8 @@ PhysicalKeyboardHandler::DefaultPaddleMapping = {
{Event::RightPaddleADecrease, KBDK_J},
{Event::RightPaddleAIncrease, KBDK_G},
{Event::RightPaddleAFire, KBDK_F},
{Event::RightPaddleAButton1, KBDK_Y, KBDM_SHIFT},
{Event::RightPaddleAButton2, KBDK_H, KBDM_SHIFT},
{Event::RightPaddleBDecrease, KBDK_H},
{Event::RightPaddleBIncrease, KBDK_Y},

View File

@ -123,6 +123,8 @@ NLOHMANN_JSON_SERIALIZE_ENUM(Event::Type, {
{Event::RightPaddleAIncrease, "RightPaddleAIncrease"},
{Event::RightPaddleAAnalog, "RightPaddleAAnalog"},
{Event::RightPaddleAFire, "RightPaddleAFire"},
{Event::RightPaddleAButton1, "RightPaddleAButton1"},
{Event::RightPaddleAButton2, "RightPaddleAButton2"},
{Event::RightPaddleBDecrease, "RightPaddleBDecrease"},
{Event::RightPaddleBIncrease, "RightPaddleBIncrease"},
{Event::RightPaddleBAnalog, "RightPaddleBAnalog"},

View File

@ -50,8 +50,9 @@ class Event
LeftPaddleADecrease, LeftPaddleAIncrease, LeftPaddleAAnalog,
LeftPaddleAFire, LeftPaddleAButton1, LeftPaddleAButton2,
LeftPaddleBDecrease, LeftPaddleBIncrease, LeftPaddleBAnalog,
LeftPaddleBFire,
RightPaddleADecrease, RightPaddleAIncrease, RightPaddleAAnalog, RightPaddleAFire,
LeftPaddleBFire, RightPaddleAButton1, RightPaddleAButton2,
RightPaddleADecrease, RightPaddleAIncrease, RightPaddleAAnalog,
RightPaddleAFire,
RightPaddleBDecrease, RightPaddleBIncrease, RightPaddleBAnalog, RightPaddleBFire,
LeftKeyboard1, LeftKeyboard2, LeftKeyboard3,
@ -307,8 +308,10 @@ static const Event::EventSet QTPaddles3Events = {
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
static const Event::EventSet RightPaddlesEvents = {
Event::RightPaddleADecrease, Event::RightPaddleAIncrease, Event::RightPaddleAAnalog, Event::RightPaddleAFire,
Event::RightPaddleBDecrease, Event::RightPaddleBIncrease, Event::RightPaddleBAnalog, Event::RightPaddleBFire,
Event::RightPaddleADecrease, Event::RightPaddleAIncrease, Event::RightPaddleAAnalog,
Event::RightPaddleAFire, Event::RightPaddleAButton1, Event::RightPaddleAButton2,
Event::RightPaddleBDecrease, Event::RightPaddleBIncrease, Event::RightPaddleBAnalog,
Event::RightPaddleBFire,
};
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
static const Event::EventSet QTPaddles4Events = {

View File

@ -2891,6 +2891,8 @@ EventHandler::EmulActionList EventHandler::ourEmulActionList = { {
{ Event::RightPaddleAIncrease, "Right Paddle A Turn Left" },
{ Event::RightPaddleADecrease, "Right Paddle A Turn Right" },
{ Event::RightPaddleAFire, "Right Paddle A Fire" },
{ Event::RightPaddleAButton1, "Right Paddle A Button 1" },
{ Event::RightPaddleAButton2, "Right Paddle A Button 2" },
{ Event::RightPaddleBAnalog, "Right Paddle B Analog" },
{ Event::RightPaddleBIncrease, "Right Paddle B Turn Left" },
@ -3204,8 +3206,10 @@ const Event::EventSet EventHandler::PaddlesEvents = {
Event::LeftPaddleAFire, Event::LeftPaddleAButton1, Event::LeftPaddleAButton2,
Event::LeftPaddleBDecrease, Event::LeftPaddleBIncrease, Event::LeftPaddleBAnalog,
Event::LeftPaddleBFire,
Event::RightPaddleADecrease, Event::RightPaddleAIncrease, Event::RightPaddleAAnalog, Event::RightPaddleAFire,
Event::RightPaddleBDecrease, Event::RightPaddleBIncrease, Event::RightPaddleBAnalog, Event::RightPaddleBFire,
Event::RightPaddleADecrease, Event::RightPaddleAIncrease, Event::RightPaddleAAnalog,
Event::RightPaddleAFire, Event::RightPaddleAButton1, Event::RightPaddleAButton2,
Event::RightPaddleBDecrease, Event::RightPaddleBIncrease, Event::RightPaddleBAnalog,
Event::RightPaddleBFire,
Event::QTPaddle3AFire, Event::QTPaddle3BFire,Event::QTPaddle4AFire,Event::QTPaddle4BFire,
};

View File

@ -544,7 +544,7 @@ class EventHandler
#else
REFRESH_SIZE = 0,
#endif
EMUL_ACTIONLIST_SIZE = 240 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
EMUL_ACTIONLIST_SIZE = 242 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
MENU_ACTIONLIST_SIZE = 20
;

View File

@ -44,35 +44,37 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
// As much as possible, precompute which events we care about for
// a given port; this will speed up processing in update()
// Clear some potentially unused events:
myAAxisValue = myBAxisValue =
myADecEvent = myAIncEvent =
myAButton1Event = myAButton2Event =
myBDecEvent = myBIncEvent = Event::NoType;
// Consider whether this is the left or right port
if(myJack == Jack::Left)
{
if(!altmap)
{
// First paddle is left A, second is left B
myAAxisValue = Event::LeftPaddleAAnalog;
myBAxisValue = Event::LeftPaddleBAnalog;
myLeftAFireEvent = Event::LeftPaddleAFire;
myLeftAButton1Event = Event::LeftPaddleAButton1;
myLeftAButton2Event = Event::LeftPaddleAButton2;
myAAxisValue = Event::LeftPaddleAAnalog;
myBAxisValue = Event::LeftPaddleBAnalog;
myAFireEvent = Event::LeftPaddleAFire;
myAButton1Event = Event::LeftPaddleAButton1;
myAButton2Event = Event::LeftPaddleAButton2;
myLeftBFireEvent = Event::LeftPaddleBFire;
myBFireEvent = Event::LeftPaddleBFire;
// These can be affected by changes in axis orientation
myLeftADecEvent = Event::LeftPaddleADecrease;
myLeftAIncEvent = Event::LeftPaddleAIncrease;
myLeftBDecEvent = Event::LeftPaddleBDecrease;
myLeftBIncEvent = Event::LeftPaddleBIncrease;
myAIncEvent = Event::LeftPaddleAIncrease;
myBDecEvent = Event::LeftPaddleBDecrease;
myBIncEvent = Event::LeftPaddleBIncrease;
myADecEvent = Event::LeftPaddleADecrease;
}
else
{
// First paddle is QT 3A, second is QT 3B (fire buttons only)
myLeftAFireEvent = Event::QTPaddle3AFire;
myLeftBFireEvent = Event::QTPaddle3BFire;
myAAxisValue = myBAxisValue =
myLeftADecEvent = myLeftAIncEvent =
myLeftBDecEvent = myLeftBIncEvent = Event::NoType;
myAFireEvent = Event::QTPaddle3AFire;
myBFireEvent = Event::QTPaddle3BFire;
}
}
else // Jack is right port
@ -80,26 +82,25 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
if(!altmap)
{
// First paddle is right A, second is right B
myAAxisValue = Event::RightPaddleAAnalog;
myBAxisValue = Event::RightPaddleBAnalog;
myLeftAFireEvent = Event::RightPaddleAFire;
myLeftBFireEvent = Event::RightPaddleBFire;
myAAxisValue = Event::RightPaddleAAnalog;
myBAxisValue = Event::RightPaddleBAnalog;
myAFireEvent = Event::RightPaddleAFire;
myAButton1Event = Event::RightPaddleAButton1;
myAButton2Event = Event::RightPaddleAButton2;
myBFireEvent = Event::RightPaddleBFire;
// These can be affected by changes in axis orientation
myLeftADecEvent = Event::RightPaddleADecrease;
myLeftAIncEvent = Event::RightPaddleAIncrease;
myLeftBDecEvent = Event::RightPaddleBDecrease;
myLeftBIncEvent = Event::RightPaddleBIncrease;
myADecEvent = Event::RightPaddleADecrease;
myAIncEvent = Event::RightPaddleAIncrease;
myBDecEvent = Event::RightPaddleBDecrease;
myBIncEvent = Event::RightPaddleBIncrease;
}
else
{
// First paddle is QT 4A, second is QT 4B (fire buttons only)
myLeftAFireEvent = Event::QTPaddle4AFire;
myLeftBFireEvent = Event::QTPaddle4BFire;
myAAxisValue = myBAxisValue =
myLeftADecEvent = myLeftAIncEvent =
myLeftBDecEvent = myLeftBIncEvent = Event::NoType;
myAFireEvent = Event::QTPaddle4AFire;
myBFireEvent = Event::QTPaddle4BFire;
}
}
@ -108,11 +109,10 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
{
// First paddle is right A|B, second is left A|B
std::swap(myAAxisValue, myBAxisValue);
std::swap(myLeftAFireEvent, myLeftBFireEvent);
myLeftAButton1Event = Event::NoType;
myLeftAButton2Event = Event::NoType;
std::swap(myLeftADecEvent, myLeftBDecEvent);
std::swap(myLeftAIncEvent, myLeftBIncEvent);
std::swap(myAFireEvent, myBFireEvent);
myAButton1Event = myAButton2Event = Event::NoType;
std::swap(myADecEvent, myBDecEvent);
std::swap(myAIncEvent, myBIncEvent);
}
// Direction of movement can be swapped
@ -120,8 +120,8 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
// result in either increasing or decreasing paddle movement
if(swapdir)
{
std::swap(myLeftADecEvent, myLeftAIncEvent);
std::swap(myLeftBDecEvent, myLeftBIncEvent);
std::swap(myADecEvent, myAIncEvent);
std::swap(myBDecEvent, myBIncEvent);
}
// The following are independent of whether or not the port
@ -141,7 +141,7 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
myAxisDigitalOne = 0;
}
// Digital pins 1, 2 and 6 are not connected
// Digital pins 1, 2 and 6 are (usually, see below) not connected
//setPin(DigitalPin::One, true);
//setPin(DigitalPin::Two, true);
setPin(DigitalPin::Six, true);
@ -160,7 +160,7 @@ void Paddles::updateA()
setPin(DigitalPin::Four, true);
// Digital events (from keyboard or joystick hats & buttons)
bool firePressedA = myEvent.get(myLeftAFireEvent) != 0;
bool firePressedA = myEvent.get(myAFireEvent) != 0;
// Paddle movement is a very difficult thing to accurately emulate,
// since it originally came from an analog device that had very
@ -189,8 +189,8 @@ void Paddles::updateA()
setPin(DigitalPin::Four, !getAutoFireState(firePressedA));
// Joystick up/down pins when using a splitter:
setPin(DigitalPin::One, myEvent.get(myLeftAButton1Event) == 0);
setPin(DigitalPin::Two, myEvent.get(myLeftAButton2Event) == 0);
setPin(DigitalPin::One, myEvent.get(myAButton1Event) == 0);
setPin(DigitalPin::Two, myEvent.get(myAButton2Event) == 0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@ -328,13 +328,13 @@ void Paddles::updateDigitalAxesA()
myKeyRepeatA = false;
if(myEvent.get(myLeftADecEvent))
if(myEvent.get(myADecEvent))
{
myKeyRepeatA = true;
if(myCharge[myAxisDigitalZero] > myPaddleRepeatA)
myCharge[myAxisDigitalZero] -= myPaddleRepeatA;
}
if(myEvent.get(myLeftAIncEvent))
if(myEvent.get(myAIncEvent))
{
myKeyRepeatA = true;
if((myCharge[myAxisDigitalZero] + myPaddleRepeatA) < TRIGRANGE)
@ -348,7 +348,7 @@ void Paddles::updateB()
setPin(DigitalPin::Three, true);
// Digital events (from keyboard or joystick hats & buttons)
bool firePressedB = myEvent.get(myLeftBFireEvent) != 0;
bool firePressedB = myEvent.get(myBFireEvent) != 0;
if(!updateAnalogAxesB())
{
@ -435,13 +435,13 @@ void Paddles::updateDigitalAxesB()
myKeyRepeatB = false;
if(myEvent.get(myLeftBDecEvent))
if(myEvent.get(myBDecEvent))
{
myKeyRepeatB = true;
if(myCharge[myAxisDigitalOne] > myPaddleRepeatB)
myCharge[myAxisDigitalOne] -= myPaddleRepeatB;
}
if(myEvent.get(myLeftBIncEvent))
if(myEvent.get(myBIncEvent))
{
myKeyRepeatB = true;
if((myCharge[myAxisDigitalOne] + myPaddleRepeatB) < TRIGRANGE)

View File

@ -177,10 +177,10 @@ class Paddles : public Controller
// Pre-compute the events we care about based on given port
// This will eliminate test for left or right port in update()
Event::Type myAAxisValue, myBAxisValue,
myLeftADecEvent, myLeftAIncEvent,
myLeftBDecEvent, myLeftBIncEvent,
myLeftAFireEvent, myLeftAButton1Event, myLeftAButton2Event,
myLeftBFireEvent,
myADecEvent, myAIncEvent,
myBDecEvent, myBIncEvent,
myAFireEvent, myAButton1Event, myAButton2Event,
myBFireEvent,
myAxisMouseMotion;
// The following are used for the various mouse-axis modes