mirror of https://github.com/stella-emu/stella.git
fixed QuadTari handling for controller types != joysticks
This commit is contained in:
parent
852205edf8
commit
75527ca670
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include "OSystem.hxx"
|
#include "OSystem.hxx"
|
||||||
#include "Console.hxx"
|
#include "Console.hxx"
|
||||||
|
#include "PropsSet.hxx"
|
||||||
#include "EventHandler.hxx"
|
#include "EventHandler.hxx"
|
||||||
#include "PKeyboardHandler.hxx"
|
#include "PKeyboardHandler.hxx"
|
||||||
#include "json_lib.hxx"
|
#include "json_lib.hxx"
|
||||||
|
@ -202,38 +203,72 @@ void PhysicalKeyboardHandler::setDefaultMapping(Event::Type event, EventMode mod
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
void PhysicalKeyboardHandler::defineControllerMappings(
|
void PhysicalKeyboardHandler::defineControllerMappings(
|
||||||
const Controller::Type type, Controller::Jack port)
|
const Controller::Type type, Controller::Jack port, const string& md5)
|
||||||
{
|
{
|
||||||
// determine controller events to use
|
// determine controller events to use
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
case Controller::Type::QuadTari:
|
||||||
|
if(port == Controller::Jack::Left)
|
||||||
|
{
|
||||||
|
myLeftMode = getMode(md5, PropType::Controller_Left1);
|
||||||
|
myLeft2ndMode = getMode(md5, PropType::Controller_Left2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myRightMode = getMode(md5, PropType::Controller_Right1);
|
||||||
|
myRight2ndMode = getMode(md5, PropType::Controller_Right2);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
EventMode mode = getMode(type);
|
||||||
|
|
||||||
|
if(port == Controller::Jack::Left)
|
||||||
|
myLeftMode = mode;
|
||||||
|
else
|
||||||
|
myRightMode = mode;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
EventMode PhysicalKeyboardHandler::getMode(const string& md5, const PropType propType)
|
||||||
|
{
|
||||||
|
Properties properties;
|
||||||
|
|
||||||
|
if(myOSystem.propSet().getMD5(md5, properties))
|
||||||
|
{
|
||||||
|
const string& propName = properties.get(propType);
|
||||||
|
|
||||||
|
if(!propName.empty())
|
||||||
|
return getMode(Controller::getType(propName));
|
||||||
|
}
|
||||||
|
return getMode(Controller::Type::Joystick);
|
||||||
|
}
|
||||||
|
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
EventMode PhysicalKeyboardHandler::getMode(const Controller::Type type)
|
||||||
|
{
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case Controller::Type::Keyboard:
|
case Controller::Type::Keyboard:
|
||||||
case Controller::Type::KidVid:
|
case Controller::Type::KidVid:
|
||||||
if(port == Controller::Jack::Left)
|
return EventMode::kKeypadMode;
|
||||||
myLeftMode = EventMode::kKeypadMode;
|
|
||||||
else
|
|
||||||
myRightMode = EventMode::kKeypadMode;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Controller::Type::Paddles:
|
case Controller::Type::Paddles:
|
||||||
case Controller::Type::PaddlesIAxDr:
|
case Controller::Type::PaddlesIAxDr:
|
||||||
case Controller::Type::PaddlesIAxis:
|
case Controller::Type::PaddlesIAxis:
|
||||||
if(port == Controller::Jack::Left)
|
return EventMode::kPaddlesMode;
|
||||||
myLeftMode = EventMode::kPaddlesMode;
|
|
||||||
else
|
|
||||||
myRightMode = EventMode::kPaddlesMode;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Controller::Type::CompuMate:
|
case Controller::Type::CompuMate:
|
||||||
myLeftMode = myRightMode = EventMode::kCompuMateMode;
|
return EventMode::kCompuMateMode;
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
// let's use joystick then
|
// let's use joystick then
|
||||||
if(port == Controller::Jack::Left)
|
return EventMode::kJoystickMode;
|
||||||
myLeftMode = EventMode::kJoystickMode;
|
|
||||||
else
|
|
||||||
myRightMode = EventMode::kJoystickMode;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,9 +279,31 @@ void PhysicalKeyboardHandler::enableEmulationMappings()
|
||||||
myKeyMap.eraseMode(EventMode::kEmulationMode);
|
myKeyMap.eraseMode(EventMode::kEmulationMode);
|
||||||
enableCommonMappings();
|
enableCommonMappings();
|
||||||
|
|
||||||
// enable right mode first, so that in case of mapping clashes the left
|
// Process in increasing priority order, so that in case of mapping clashes
|
||||||
// controller has preference
|
// the higher priority controller has preference
|
||||||
switch (myRightMode)
|
switch(myRight2ndMode)
|
||||||
|
{
|
||||||
|
case EventMode::kPaddlesMode:
|
||||||
|
enableMappings(Right2PaddlesEvents, EventMode::kPaddlesMode);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
enableMappings(Right2JoystickEvents, EventMode::kJoystickMode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(myLeft2ndMode)
|
||||||
|
{
|
||||||
|
case EventMode::kPaddlesMode:
|
||||||
|
enableMappings(Left2PaddlesEvents, EventMode::kPaddlesMode);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
enableMappings(Left2JoystickEvents, EventMode::kJoystickMode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(myRightMode)
|
||||||
{
|
{
|
||||||
case EventMode::kPaddlesMode:
|
case EventMode::kPaddlesMode:
|
||||||
enableMappings(RightPaddlesEvents, EventMode::kPaddlesMode);
|
enableMappings(RightPaddlesEvents, EventMode::kPaddlesMode);
|
||||||
|
@ -265,7 +322,7 @@ void PhysicalKeyboardHandler::enableEmulationMappings()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (myLeftMode)
|
switch(myLeftMode)
|
||||||
{
|
{
|
||||||
case EventMode::kPaddlesMode:
|
case EventMode::kPaddlesMode:
|
||||||
enableMappings(LeftPaddlesEvents, EventMode::kPaddlesMode);
|
enableMappings(LeftPaddlesEvents, EventMode::kPaddlesMode);
|
||||||
|
@ -276,7 +333,7 @@ void PhysicalKeyboardHandler::enableEmulationMappings()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EventMode::kCompuMateMode:
|
case EventMode::kCompuMateMode:
|
||||||
for (const auto& item : CompuMateMapping)
|
for(const auto& item : CompuMateMapping)
|
||||||
enableMapping(item.event, EventMode::kCompuMateMode);
|
enableMapping(item.event, EventMode::kCompuMateMode);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -343,14 +400,18 @@ EventMode PhysicalKeyboardHandler::getEventMode(const Event::Type event,
|
||||||
bool PhysicalKeyboardHandler::isJoystickEvent(const Event::Type event) const
|
bool PhysicalKeyboardHandler::isJoystickEvent(const Event::Type event) const
|
||||||
{
|
{
|
||||||
return LeftJoystickEvents.find(event) != LeftJoystickEvents.end()
|
return LeftJoystickEvents.find(event) != LeftJoystickEvents.end()
|
||||||
|| RightJoystickEvents.find(event) != RightJoystickEvents.end();
|
|| Left2JoystickEvents.find(event) != Left2JoystickEvents.end()
|
||||||
|
|| RightJoystickEvents.find(event) != RightJoystickEvents.end()
|
||||||
|
|| Right2JoystickEvents.find(event) != Right2JoystickEvents.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
bool PhysicalKeyboardHandler::isPaddleEvent(const Event::Type event) const
|
bool PhysicalKeyboardHandler::isPaddleEvent(const Event::Type event) const
|
||||||
{
|
{
|
||||||
return LeftPaddlesEvents.find(event) != LeftPaddlesEvents.end()
|
return LeftPaddlesEvents.find(event) != LeftPaddlesEvents.end()
|
||||||
|| RightPaddlesEvents.find(event) != RightPaddlesEvents.end();
|
|| Left2PaddlesEvents.find(event) != Left2PaddlesEvents.end()
|
||||||
|
|| RightPaddlesEvents.find(event) != RightPaddlesEvents.end()
|
||||||
|
|| Right2PaddlesEvents.find(event) != Right2PaddlesEvents.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -412,7 +473,8 @@ bool PhysicalKeyboardHandler::addMapping(Event::Type event, EventMode mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
myKeyMap.add(event, evMode, key, mod);
|
myKeyMap.add(event, evMode, key, mod);
|
||||||
if (evMode == myLeftMode || evMode == myRightMode)
|
if (evMode == myLeftMode || evMode == myRightMode ||
|
||||||
|
evMode == myLeft2ndMode || evMode == myRight2ndMode)
|
||||||
myKeyMap.add(event, mode, key, mod);
|
myKeyMap.add(event, mode, key, mod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -858,6 +920,7 @@ PhysicalKeyboardHandler::EventMappingArray PhysicalKeyboardHandler::DefaultJoyst
|
||||||
{Event::JoystickOneFire5, KBDK_6},
|
{Event::JoystickOneFire5, KBDK_6},
|
||||||
{Event::JoystickOneFire9, KBDK_7},
|
{Event::JoystickOneFire9, KBDK_7},
|
||||||
|
|
||||||
|
// Same as Joysticks Zero & One + SHIFT
|
||||||
{Event::JoystickTwoUp, KBDK_UP, KBDM_SHIFT},
|
{Event::JoystickTwoUp, KBDK_UP, KBDM_SHIFT},
|
||||||
{Event::JoystickTwoDown, KBDK_DOWN, KBDM_SHIFT},
|
{Event::JoystickTwoDown, KBDK_DOWN, KBDM_SHIFT},
|
||||||
{Event::JoystickTwoLeft, KBDK_LEFT, KBDM_SHIFT},
|
{Event::JoystickTwoLeft, KBDK_LEFT, KBDM_SHIFT},
|
||||||
|
@ -896,6 +959,12 @@ PhysicalKeyboardHandler::DefaultPaddleMapping = {
|
||||||
{Event::PaddleThreeDecrease, KBDK_H},
|
{Event::PaddleThreeDecrease, KBDK_H},
|
||||||
{Event::PaddleThreeIncrease, KBDK_Y},
|
{Event::PaddleThreeIncrease, KBDK_Y},
|
||||||
{Event::PaddleThreeFire, KBDK_6},
|
{Event::PaddleThreeFire, KBDK_6},
|
||||||
|
|
||||||
|
// Same as Paddles Zero..Three Fire + SHIFT
|
||||||
|
{Event::PaddleFourFire, KBDK_SPACE, KBDM_SHIFT},
|
||||||
|
{Event::PaddleFiveFire, KBDK_4, KBDM_SHIFT},
|
||||||
|
{Event::PaddleSixFire, KBDK_F, KBDM_SHIFT},
|
||||||
|
{Event::PaddleSevenFire, KBDK_6, KBDM_SHIFT},
|
||||||
};
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -26,6 +26,7 @@ class EventHandler;
|
||||||
#include "bspf.hxx"
|
#include "bspf.hxx"
|
||||||
#include "Event.hxx"
|
#include "Event.hxx"
|
||||||
#include "EventHandlerConstants.hxx"
|
#include "EventHandlerConstants.hxx"
|
||||||
|
#include "Props.hxx"
|
||||||
#include "KeyMap.hxx"
|
#include "KeyMap.hxx"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,7 +51,8 @@ class PhysicalKeyboardHandler
|
||||||
void setDefaultMapping(Event::Type type, EventMode mode, bool updateDefaults = false);
|
void setDefaultMapping(Event::Type type, EventMode mode, bool updateDefaults = false);
|
||||||
|
|
||||||
/** define mappings for current controllers */
|
/** define mappings for current controllers */
|
||||||
void defineControllerMappings(const Controller::Type type, Controller::Jack port);
|
void defineControllerMappings(const Controller::Type type, Controller::Jack port,
|
||||||
|
const string& md5);
|
||||||
/** enable mappings for emulation mode */
|
/** enable mappings for emulation mode */
|
||||||
void enableEmulationMappings();
|
void enableEmulationMappings();
|
||||||
|
|
||||||
|
@ -110,6 +112,11 @@ class PhysicalKeyboardHandler
|
||||||
void enableMappings(const Event::EventSet& events, EventMode mode);
|
void enableMappings(const Event::EventSet& events, EventMode mode);
|
||||||
void enableMapping(const Event::Type event, EventMode mode);
|
void enableMapping(const Event::Type event, EventMode mode);
|
||||||
|
|
||||||
|
/** return event mode for given property */
|
||||||
|
EventMode getMode(const string& md5, const PropType propType);
|
||||||
|
/** return event mode for given controller type */
|
||||||
|
EventMode getMode(const Controller::Type type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
OSystem& myOSystem;
|
OSystem& myOSystem;
|
||||||
EventHandler& myHandler;
|
EventHandler& myHandler;
|
||||||
|
@ -119,6 +126,9 @@ class PhysicalKeyboardHandler
|
||||||
|
|
||||||
EventMode myLeftMode{EventMode::kEmulationMode};
|
EventMode myLeftMode{EventMode::kEmulationMode};
|
||||||
EventMode myRightMode{EventMode::kEmulationMode};
|
EventMode myRightMode{EventMode::kEmulationMode};
|
||||||
|
// Additional modes for QuadTari controller
|
||||||
|
EventMode myLeft2ndMode{EventMode::kEmulationMode};
|
||||||
|
EventMode myRight2ndMode{EventMode::kEmulationMode};
|
||||||
|
|
||||||
#ifdef BSPF_UNIX
|
#ifdef BSPF_UNIX
|
||||||
// Sometimes key combos with the Alt key become 'stuck' after the
|
// Sometimes key combos with the Alt key become 'stuck' after the
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
#ifndef VERSION_HXX
|
#ifndef VERSION_HXX
|
||||||
#define VERSION_HXX
|
#define VERSION_HXX
|
||||||
|
|
||||||
#define STELLA_VERSION "6.5.2"
|
#define STELLA_VERSION "6.6_pre"
|
||||||
#define STELLA_BUILD "6719"
|
#define STELLA_BUILD "6719"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -112,6 +112,10 @@ NLOHMANN_JSON_SERIALIZE_ENUM(Event::Type, {
|
||||||
{Event::PaddleThreeIncrease, "PaddleThreeIncrease"},
|
{Event::PaddleThreeIncrease, "PaddleThreeIncrease"},
|
||||||
{Event::PaddleThreeAnalog, "PaddleThreeAnalog"},
|
{Event::PaddleThreeAnalog, "PaddleThreeAnalog"},
|
||||||
{Event::PaddleThreeFire, "PaddleThreeFire"},
|
{Event::PaddleThreeFire, "PaddleThreeFire"},
|
||||||
|
{Event::PaddleFourFire, "PaddleFourFire"},
|
||||||
|
{Event::PaddleFiveFire, "PaddleFiveFire"},
|
||||||
|
{Event::PaddleSixFire, "PaddleSixFire"},
|
||||||
|
{Event::PaddleSevenFire, "PaddleSevenFire"},
|
||||||
{Event::KeyboardZero1, "KeyboardZero1"},
|
{Event::KeyboardZero1, "KeyboardZero1"},
|
||||||
{Event::KeyboardZero2, "KeyboardZero2"},
|
{Event::KeyboardZero2, "KeyboardZero2"},
|
||||||
{Event::KeyboardZero3, "KeyboardZero3"},
|
{Event::KeyboardZero3, "KeyboardZero3"},
|
||||||
|
|
|
@ -35,7 +35,7 @@ class Thumbulator;
|
||||||
IN A FUTURE RELEASE.
|
IN A FUTURE RELEASE.
|
||||||
|
|
||||||
There are seven 4K program banks, a 4K Display Data RAM,
|
There are seven 4K program banks, a 4K Display Data RAM,
|
||||||
1K C Varaible and Stack, and the BUS chip.
|
1K C Variable and Stack, and the BUS chip.
|
||||||
BUS chip access is mapped to $1000 - $103F.
|
BUS chip access is mapped to $1000 - $103F.
|
||||||
|
|
||||||
@authors: Darrell Spice Jr, Chris Walton, Fred Quimby,
|
@authors: Darrell Spice Jr, Chris Walton, Fred Quimby,
|
||||||
|
|
|
@ -806,7 +806,7 @@ void Console::setControllers(const string& romMd5)
|
||||||
myLeftControl = std::move(myCMHandler->leftController());
|
myLeftControl = std::move(myCMHandler->leftController());
|
||||||
myRightControl = std::move(myCMHandler->rightController());
|
myRightControl = std::move(myCMHandler->rightController());
|
||||||
myOSystem.eventHandler().defineKeyControllerMappings(
|
myOSystem.eventHandler().defineKeyControllerMappings(
|
||||||
Controller::Type::CompuMate, Controller::Jack::Left);
|
Controller::Type::CompuMate, Controller::Jack::Left, romMd5);
|
||||||
myOSystem.eventHandler().defineJoyControllerMappings(
|
myOSystem.eventHandler().defineJoyControllerMappings(
|
||||||
Controller::Type::CompuMate, Controller::Jack::Left);
|
Controller::Type::CompuMate, Controller::Jack::Left);
|
||||||
}
|
}
|
||||||
|
@ -898,7 +898,7 @@ unique_ptr<Controller> Console::getControllerPort(const Controller::Type type,
|
||||||
{
|
{
|
||||||
unique_ptr<Controller> controller;
|
unique_ptr<Controller> controller;
|
||||||
|
|
||||||
myOSystem.eventHandler().defineKeyControllerMappings(type, port);
|
myOSystem.eventHandler().defineKeyControllerMappings(type, port, romMd5);
|
||||||
myOSystem.eventHandler().defineJoyControllerMappings(type, port);
|
myOSystem.eventHandler().defineJoyControllerMappings(type, port);
|
||||||
|
|
||||||
switch(type)
|
switch(type)
|
||||||
|
|
|
@ -73,7 +73,7 @@ class Controller : public Serializable
|
||||||
/**
|
/**
|
||||||
Enumeration of the controller jacks
|
Enumeration of the controller jacks
|
||||||
*/
|
*/
|
||||||
enum class Jack { Left = 0, Right = 1 };
|
enum class Jack { Left = 0, Right = 1, Left2 = 2, Right2 = 3 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enumeration of the digital pins of a controller port
|
Enumeration of the digital pins of a controller port
|
||||||
|
|
|
@ -165,7 +165,9 @@ class Event
|
||||||
DecreasePaddleCenterY, IncreasePaddleCenterY,
|
DecreasePaddleCenterY, IncreasePaddleCenterY,
|
||||||
PreviousMouseControl,
|
PreviousMouseControl,
|
||||||
DecreaseMouseAxesRange, IncreaseMouseAxesRange,
|
DecreaseMouseAxesRange, IncreaseMouseAxesRange,
|
||||||
|
|
||||||
SALeftAxis0Value, SALeftAxis1Value, SARightAxis0Value, SARightAxis1Value,
|
SALeftAxis0Value, SALeftAxis1Value, SARightAxis0Value, SARightAxis1Value,
|
||||||
|
PaddleFourFire, PaddleFiveFire, PaddleSixFire, PaddleSevenFire,
|
||||||
LastType
|
LastType
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -255,13 +257,20 @@ class Event
|
||||||
static const Event::EventSet LeftJoystickEvents = {
|
static const Event::EventSet LeftJoystickEvents = {
|
||||||
Event::JoystickZeroUp, Event::JoystickZeroDown, Event::JoystickZeroLeft, Event::JoystickZeroRight,
|
Event::JoystickZeroUp, Event::JoystickZeroDown, Event::JoystickZeroLeft, Event::JoystickZeroRight,
|
||||||
Event::JoystickZeroFire, Event::JoystickZeroFire5, Event::JoystickZeroFire9,
|
Event::JoystickZeroFire, Event::JoystickZeroFire5, Event::JoystickZeroFire9,
|
||||||
|
};
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
static const Event::EventSet Left2JoystickEvents = {
|
||||||
Event::JoystickTwoUp, Event::JoystickTwoDown, Event::JoystickTwoLeft, Event::JoystickTwoRight,
|
Event::JoystickTwoUp, Event::JoystickTwoDown, Event::JoystickTwoLeft, Event::JoystickTwoRight,
|
||||||
Event::JoystickTwoFire
|
Event::JoystickTwoFire
|
||||||
};
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
static const Event::EventSet RightJoystickEvents = {
|
static const Event::EventSet RightJoystickEvents = {
|
||||||
Event::JoystickOneUp, Event::JoystickOneDown, Event::JoystickOneLeft, Event::JoystickOneRight,
|
Event::JoystickOneUp, Event::JoystickOneDown, Event::JoystickOneLeft, Event::JoystickOneRight,
|
||||||
Event::JoystickOneFire, Event::JoystickOneFire5, Event::JoystickOneFire9,
|
Event::JoystickOneFire, Event::JoystickOneFire5, Event::JoystickOneFire9,
|
||||||
|
};
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
static const Event::EventSet Right2JoystickEvents = {
|
||||||
Event::JoystickThreeUp, Event::JoystickThreeDown, Event::JoystickThreeLeft, Event::JoystickThreeRight,
|
Event::JoystickThreeUp, Event::JoystickThreeDown, Event::JoystickThreeLeft, Event::JoystickThreeRight,
|
||||||
Event::JoystickThreeFire
|
Event::JoystickThreeFire
|
||||||
};
|
};
|
||||||
|
@ -271,12 +280,22 @@ static const Event::EventSet LeftPaddlesEvents = {
|
||||||
Event::PaddleZeroDecrease, Event::PaddleZeroIncrease, Event::PaddleZeroAnalog, Event::PaddleZeroFire,
|
Event::PaddleZeroDecrease, Event::PaddleZeroIncrease, Event::PaddleZeroAnalog, Event::PaddleZeroFire,
|
||||||
Event::PaddleOneDecrease, Event::PaddleOneIncrease, Event::PaddleOneAnalog, Event::PaddleOneFire,
|
Event::PaddleOneDecrease, Event::PaddleOneIncrease, Event::PaddleOneAnalog, Event::PaddleOneFire,
|
||||||
};
|
};
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
static const Event::EventSet Left2PaddlesEvents = {
|
||||||
|
// Only fire buttons supported by QuadTari
|
||||||
|
Event::PaddleFourFire, Event::PaddleFiveFire
|
||||||
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
static const Event::EventSet RightPaddlesEvents = {
|
static const Event::EventSet RightPaddlesEvents = {
|
||||||
Event::PaddleTwoDecrease, Event::PaddleTwoIncrease, Event::PaddleTwoAnalog, Event::PaddleTwoFire,
|
Event::PaddleTwoDecrease, Event::PaddleTwoIncrease, Event::PaddleTwoAnalog, Event::PaddleTwoFire,
|
||||||
Event::PaddleThreeDecrease, Event::PaddleThreeIncrease, Event::PaddleThreeAnalog, Event::PaddleThreeFire,
|
Event::PaddleThreeDecrease, Event::PaddleThreeIncrease, Event::PaddleThreeAnalog, Event::PaddleThreeFire,
|
||||||
};
|
};
|
||||||
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
static const Event::EventSet Right2PaddlesEvents = {
|
||||||
|
// Only fire buttons supported by QuadTari
|
||||||
|
Event::PaddleSixFire, Event::PaddleSevenFire
|
||||||
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
static const Event::EventSet LeftKeypadEvents = {
|
static const Event::EventSet LeftKeypadEvents = {
|
||||||
|
|
|
@ -3110,6 +3110,11 @@ EventHandler::EmulActionList EventHandler::ourEmulActionList = { {
|
||||||
{ Event::PaddleThreeDecrease, "Paddle 3 Turn Right", "" },
|
{ Event::PaddleThreeDecrease, "Paddle 3 Turn Right", "" },
|
||||||
{ Event::PaddleThreeFire, "Paddle 3 Fire", "" },
|
{ Event::PaddleThreeFire, "Paddle 3 Fire", "" },
|
||||||
|
|
||||||
|
{ Event::PaddleFourFire, "Paddle 4 Fire", "" },
|
||||||
|
{ Event::PaddleFiveFire, "Paddle 5 Fire", "" },
|
||||||
|
{ Event::PaddleSixFire, "Paddle 6 Fire", "" },
|
||||||
|
{ Event::PaddleSevenFire, "Paddle 7 Fire", "" },
|
||||||
|
|
||||||
{ Event::KeyboardZero1, "P0 Keyboard 1", "" },
|
{ Event::KeyboardZero1, "P0 Keyboard 1", "" },
|
||||||
{ Event::KeyboardZero2, "P0 Keyboard 2", "" },
|
{ Event::KeyboardZero2, "P0 Keyboard 2", "" },
|
||||||
{ Event::KeyboardZero3, "P0 Keyboard 3", "" },
|
{ Event::KeyboardZero3, "P0 Keyboard 3", "" },
|
||||||
|
@ -3378,6 +3383,7 @@ const Event::EventSet EventHandler::PaddlesEvents = {
|
||||||
Event::PaddleOneDecrease, Event::PaddleOneIncrease, Event::PaddleOneAnalog, Event::PaddleOneFire,
|
Event::PaddleOneDecrease, Event::PaddleOneIncrease, Event::PaddleOneAnalog, Event::PaddleOneFire,
|
||||||
Event::PaddleTwoDecrease, Event::PaddleTwoIncrease, Event::PaddleTwoAnalog, Event::PaddleTwoFire,
|
Event::PaddleTwoDecrease, Event::PaddleTwoIncrease, Event::PaddleTwoAnalog, Event::PaddleTwoFire,
|
||||||
Event::PaddleThreeDecrease, Event::PaddleThreeIncrease, Event::PaddleThreeAnalog, Event::PaddleThreeFire,
|
Event::PaddleThreeDecrease, Event::PaddleThreeIncrease, Event::PaddleThreeAnalog, Event::PaddleThreeFire,
|
||||||
|
Event::PaddleFourFire, Event::PaddleFiveFire,Event::PaddleSixFire,Event::PaddleSevenFire,
|
||||||
};
|
};
|
||||||
|
|
||||||
const Event::EventSet EventHandler::KeyboardEvents = {
|
const Event::EventSet EventHandler::KeyboardEvents = {
|
||||||
|
|
|
@ -217,8 +217,9 @@ class EventHandler
|
||||||
/**
|
/**
|
||||||
Enable controller specific keyboard event mappings.
|
Enable controller specific keyboard event mappings.
|
||||||
*/
|
*/
|
||||||
void defineKeyControllerMappings(const Controller::Type type, Controller::Jack port) {
|
void defineKeyControllerMappings(const Controller::Type type, Controller::Jack port,
|
||||||
myPKeyHandler->defineControllerMappings(type, port);
|
const string& md5) {
|
||||||
|
myPKeyHandler->defineControllerMappings(type, port, md5);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -644,7 +645,7 @@ class EventHandler
|
||||||
#else
|
#else
|
||||||
REFRESH_SIZE = 0,
|
REFRESH_SIZE = 0,
|
||||||
#endif
|
#endif
|
||||||
EMUL_ACTIONLIST_SIZE = 207 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
|
EMUL_ACTIONLIST_SIZE = 211 + PNG_SIZE + COMBO_SIZE + REFRESH_SIZE,
|
||||||
MENU_ACTIONLIST_SIZE = 18
|
MENU_ACTIONLIST_SIZE = 18
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
Paddles::Paddles(Jack jack, const Event& event, const System& system,
|
Paddles::Paddles(Jack jack, const Event& event, const System& system,
|
||||||
bool swappaddle, bool swapaxis, bool swapdir)
|
bool swappaddle, bool swapaxis, bool swapdir, bool altmap)
|
||||||
: Controller(jack, event, system, Controller::Type::Paddles)
|
: Controller(jack, event, system, Controller::Type::Paddles)
|
||||||
{
|
{
|
||||||
// We must start with minimum resistance; see commit
|
// We must start with minimum resistance; see commit
|
||||||
|
@ -47,31 +47,57 @@ Paddles::Paddles(Jack jack, const Event& event, const System& system,
|
||||||
// Consider whether this is the left or right port
|
// Consider whether this is the left or right port
|
||||||
if(myJack == Jack::Left)
|
if(myJack == Jack::Left)
|
||||||
{
|
{
|
||||||
// First paddle is 0, second is 1
|
if(!altmap)
|
||||||
myP0AxisValue = Event::PaddleZeroAnalog;
|
{
|
||||||
myP1AxisValue = Event::PaddleOneAnalog;
|
// First paddle is 0, second is 1
|
||||||
myP0FireEvent = Event::PaddleZeroFire;
|
myP0AxisValue = Event::PaddleZeroAnalog;
|
||||||
myP1FireEvent = Event::PaddleOneFire;
|
myP1AxisValue = Event::PaddleOneAnalog;
|
||||||
|
myP0FireEvent = Event::PaddleZeroFire;
|
||||||
|
myP1FireEvent = Event::PaddleOneFire;
|
||||||
|
|
||||||
// These can be affected by changes in axis orientation
|
// These can be affected by changes in axis orientation
|
||||||
myP0DecEvent = Event::PaddleZeroDecrease;
|
myP0DecEvent = Event::PaddleZeroDecrease;
|
||||||
myP0IncEvent = Event::PaddleZeroIncrease;
|
myP0IncEvent = Event::PaddleZeroIncrease;
|
||||||
myP1DecEvent = Event::PaddleOneDecrease;
|
myP1DecEvent = Event::PaddleOneDecrease;
|
||||||
myP1IncEvent = Event::PaddleOneIncrease;
|
myP1IncEvent = Event::PaddleOneIncrease;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// First paddle is 4, second is 5 (fire buttons only)
|
||||||
|
myP0FireEvent = Event::PaddleFourFire;
|
||||||
|
myP1FireEvent = Event::PaddleFiveFire;
|
||||||
|
|
||||||
|
myP0AxisValue = myP1AxisValue =
|
||||||
|
myP0DecEvent = myP0IncEvent =
|
||||||
|
myP1DecEvent = myP1IncEvent = Event::NoType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else // Jack is right port
|
else // Jack is right port
|
||||||
{
|
{
|
||||||
// First paddle is 2, second is 3
|
if(!altmap)
|
||||||
myP0AxisValue = Event::PaddleTwoAnalog;
|
{
|
||||||
myP1AxisValue = Event::PaddleThreeAnalog;
|
// First paddle is 2, second is 3
|
||||||
myP0FireEvent = Event::PaddleTwoFire;
|
myP0AxisValue = Event::PaddleTwoAnalog;
|
||||||
myP1FireEvent = Event::PaddleThreeFire;
|
myP1AxisValue = Event::PaddleThreeAnalog;
|
||||||
|
myP0FireEvent = Event::PaddleTwoFire;
|
||||||
|
myP1FireEvent = Event::PaddleThreeFire;
|
||||||
|
|
||||||
// These can be affected by changes in axis orientation
|
// These can be affected by changes in axis orientation
|
||||||
myP0DecEvent = Event::PaddleTwoDecrease;
|
myP0DecEvent = Event::PaddleTwoDecrease;
|
||||||
myP0IncEvent = Event::PaddleTwoIncrease;
|
myP0IncEvent = Event::PaddleTwoIncrease;
|
||||||
myP1DecEvent = Event::PaddleThreeDecrease;
|
myP1DecEvent = Event::PaddleThreeDecrease;
|
||||||
myP1IncEvent = Event::PaddleThreeIncrease;
|
myP1IncEvent = Event::PaddleThreeIncrease;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// First paddle is 6, second is 7 (fire buttons only)
|
||||||
|
myP0FireEvent = Event::PaddleSixFire;
|
||||||
|
myP1FireEvent = Event::PaddleSevenFire;
|
||||||
|
|
||||||
|
myP0AxisValue = myP1AxisValue =
|
||||||
|
myP0DecEvent = myP0IncEvent =
|
||||||
|
myP1DecEvent = myP1IncEvent = Event::NoType;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some games swap the paddles
|
// Some games swap the paddles
|
||||||
|
|
|
@ -44,7 +44,7 @@ class Paddles : public Controller
|
||||||
resistance to decrease instead of increase)
|
resistance to decrease instead of increase)
|
||||||
*/
|
*/
|
||||||
Paddles(Jack jack, const Event& event, const System& system,
|
Paddles(Jack jack, const Event& event, const System& system,
|
||||||
bool swappaddle, bool swapaxis, bool swapdir);
|
bool swappaddle, bool swapaxis, bool swapdir, bool altmap = false);
|
||||||
~Paddles() override = default;
|
~Paddles() override = default;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -82,7 +82,8 @@ unique_ptr<Controller> QuadTari::addController(const Controller::Type type, bool
|
||||||
// Check if we should swap the paddles plugged into a jack
|
// Check if we should swap the paddles plugged into a jack
|
||||||
bool swapPaddles = myProperties.get(PropType::Controller_SwapPaddles) == "YES";
|
bool swapPaddles = myProperties.get(PropType::Controller_SwapPaddles) == "YES";
|
||||||
|
|
||||||
return make_unique<Paddles>(myJack, myEvent, mySystem, swapPaddles, false, false);
|
return make_unique<Paddles>(myJack, myEvent, mySystem, swapPaddles,
|
||||||
|
false, false, second);
|
||||||
}
|
}
|
||||||
case Controller::Type::Driving:
|
case Controller::Type::Driving:
|
||||||
return make_unique<Driving>(myJack, myEvent, mySystem, second);
|
return make_unique<Driving>(myJack, myEvent, mySystem, second);
|
||||||
|
|
|
@ -24,6 +24,13 @@ class Event;
|
||||||
/**
|
/**
|
||||||
The QuadTari controller.
|
The QuadTari controller.
|
||||||
|
|
||||||
|
Supported controllers:
|
||||||
|
- Joystick
|
||||||
|
- Driving
|
||||||
|
- Paddles (buttons only)
|
||||||
|
- AtariVox
|
||||||
|
- SaveKey
|
||||||
|
|
||||||
@author Thomas Jentzsch
|
@author Thomas Jentzsch
|
||||||
*/
|
*/
|
||||||
class QuadTari : public Controller
|
class QuadTari : public Controller
|
||||||
|
|
Loading…
Reference in New Issue