mirror of https://github.com/stella-emu/stella.git
allow changing controllers during emulation
This commit is contained in:
parent
e3c97c3725
commit
af84fbccc5
|
@ -94,6 +94,7 @@ void EventHandlerSDL2::pollEvent()
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
case SDL_MOUSEBUTTONUP:
|
case SDL_MOUSEBUTTONUP:
|
||||||
{
|
{
|
||||||
|
// ToDo: check support of more buttons and double-click
|
||||||
switch(myEvent.button.button)
|
switch(myEvent.button.button)
|
||||||
{
|
{
|
||||||
case SDL_BUTTON_LEFT:
|
case SDL_BUTTON_LEFT:
|
||||||
|
|
|
@ -133,9 +133,6 @@ Console::Console(OSystem& osystem, unique_ptr<Cartridge>& cart,
|
||||||
// This must be done before the debugger is initialized
|
// This must be done before the debugger is initialized
|
||||||
const string& md5 = myProperties.get(PropType::Cart_MD5);
|
const string& md5 = myProperties.get(PropType::Cart_MD5);
|
||||||
setControllers(md5);
|
setControllers(md5);
|
||||||
// now that we know the controllers, enable the event mappings
|
|
||||||
myOSystem.eventHandler().enableEmulationKeyMappings();
|
|
||||||
myOSystem.eventHandler().enableEmulationJoyMappings();
|
|
||||||
|
|
||||||
// Mute audio and clear framebuffer while autodetection runs
|
// Mute audio and clear framebuffer while autodetection runs
|
||||||
myOSystem.sound().mute(1);
|
myOSystem.sound().mute(1);
|
||||||
|
@ -814,7 +811,7 @@ void Console::setControllers(const string& rommd5)
|
||||||
string right = myProperties.get(PropType::Controller_Right);
|
string right = myProperties.get(PropType::Controller_Right);
|
||||||
uInt32 size = 0;
|
uInt32 size = 0;
|
||||||
const uInt8* image = myCart->getImage(size);
|
const uInt8* image = myCart->getImage(size);
|
||||||
const bool swappedPorts = myProperties.get(PropType::Console_SwapPorts) != "NO";
|
const bool swappedPorts = myProperties.get(PropType::Console_SwapPorts) == "YES";
|
||||||
|
|
||||||
// Try to detect controllers
|
// Try to detect controllers
|
||||||
if(image != nullptr || size != 0)
|
if(image != nullptr || size != 0)
|
||||||
|
@ -842,23 +839,27 @@ void Console::setControllers(const string& rommd5)
|
||||||
}
|
}
|
||||||
|
|
||||||
myTIA->bindToControllers();
|
myTIA->bindToControllers();
|
||||||
|
|
||||||
|
// now that we know the controllers, enable the event mappings
|
||||||
|
myOSystem.eventHandler().enableEmulationKeyMappings();
|
||||||
|
myOSystem.eventHandler().enableEmulationJoyMappings();
|
||||||
|
|
||||||
|
myOSystem.eventHandler().setMouseControllerMode(myOSystem.settings().getString("usemouse"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
unique_ptr<Controller> Console::getControllerPort(const string& rommd5,
|
unique_ptr<Controller> Console::getControllerPort(const string& rommd5,
|
||||||
const string& controllerName, Controller::Jack port)
|
const string& controllerName, Controller::Jack port)
|
||||||
{
|
{
|
||||||
unique_ptr<Controller> controller = std::move(myLeftControl);
|
unique_ptr<Controller> controller; // = std::move(myLeftControl); // TJ: why was this there?
|
||||||
|
|
||||||
myOSystem.eventHandler().defineKeyControllerMappings(controllerName, port);
|
myOSystem.eventHandler().defineKeyControllerMappings(controllerName, port);
|
||||||
myOSystem.eventHandler().defineJoyControllerMappings(controllerName, port);
|
myOSystem.eventHandler().defineJoyControllerMappings(controllerName, port);
|
||||||
|
|
||||||
if(controllerName == "JOYSTICK")
|
if(controllerName == "JOYSTICK")
|
||||||
{
|
{
|
||||||
// Already created in c'tor
|
// always create because it may have been changed by user dialog
|
||||||
// We save some time by not looking at all the other types
|
controller = make_unique<Joystick>(port, myEvent, *mySystem);
|
||||||
if(!controller)
|
|
||||||
controller = make_unique<Joystick>(port, myEvent, *mySystem);
|
|
||||||
}
|
}
|
||||||
else if(controllerName == "BOOSTERGRIP")
|
else if(controllerName == "BOOSTERGRIP")
|
||||||
{
|
{
|
||||||
|
|
|
@ -81,6 +81,12 @@ class Console : public Serializable, public ConsoleIO
|
||||||
virtual ~Console();
|
virtual ~Console();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
Sets the left and right controllers for the console.
|
||||||
|
*/
|
||||||
|
void setControllers(const string& rommd5);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the controller plugged into the specified jack
|
Get the controller plugged into the specified jack
|
||||||
|
|
||||||
|
@ -330,11 +336,6 @@ class Console : public Serializable, public ConsoleIO
|
||||||
*/
|
*/
|
||||||
void createAudioQueue();
|
void createAudioQueue();
|
||||||
|
|
||||||
/**
|
|
||||||
Adds the left and right controllers to the console.
|
|
||||||
*/
|
|
||||||
void setControllers(const string& rommd5);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Selects the left or right controller depending on ROM properties
|
Selects the left or right controller depending on ROM properties
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -67,7 +67,7 @@ GameInfoDialog::GameInfoDialog(
|
||||||
|
|
||||||
// Set real dimensions
|
// Set real dimensions
|
||||||
setSize(53 * fontWidth + 8,
|
setSize(53 * fontWidth + 8,
|
||||||
8 * (lineHeight + VGAP) + 2 * (infoLineHeight + VGAP) + VBORDER * 2 + _th +
|
8 * (lineHeight + VGAP) + 1 * (infoLineHeight + VGAP) + VBORDER * 2 + _th +
|
||||||
buttonHeight + fontHeight + ifont.getLineHeight() + 20,
|
buttonHeight + fontHeight + ifont.getLineHeight() + 20,
|
||||||
max_w, max_h);
|
max_w, max_h);
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ GameInfoDialog::GameInfoDialog(
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// 3) Controller properties
|
// 3) Controller properties
|
||||||
wid.clear();
|
wid.clear();
|
||||||
tabID = myTab->addTab("Controller");
|
tabID = myTab->addTab("Controllers");
|
||||||
|
|
||||||
ctrls.clear();
|
ctrls.clear();
|
||||||
VarList::push_back(ctrls, "Auto-detect", "AUTO");
|
VarList::push_back(ctrls, "Auto-detect", "AUTO");
|
||||||
|
@ -286,11 +286,6 @@ GameInfoDialog::GameInfoDialog(
|
||||||
myMouseRange->setTickmarkIntervals(4);
|
myMouseRange->setTickmarkIntervals(4);
|
||||||
wid.push_back(myMouseRange);
|
wid.push_back(myMouseRange);
|
||||||
|
|
||||||
// Add message concerning usage
|
|
||||||
ypos = myTab->getHeight() - 5 - fontHeight - ifont.getFontHeight() - 10;
|
|
||||||
new StaticTextWidget(myTab, ifont, xpos, ypos,
|
|
||||||
"(*) Changes to properties require a ROM reload");
|
|
||||||
|
|
||||||
// Add items for tab 2
|
// Add items for tab 2
|
||||||
addToFocusList(wid, myTab, tabID);
|
addToFocusList(wid, myTab, tabID);
|
||||||
|
|
||||||
|
@ -614,6 +609,9 @@ void GameInfoDialog::saveConfig()
|
||||||
instance().console().switches().setTvColor(myTVTypeGroup->getSelected() == 0);
|
instance().console().switches().setTvColor(myTVTypeGroup->getSelected() == 0);
|
||||||
instance().console().switches().setLeftDifficultyA(myLeftDiffGroup->getSelected() == 0);
|
instance().console().switches().setLeftDifficultyA(myLeftDiffGroup->getSelected() == 0);
|
||||||
instance().console().switches().setRightDifficultyA(myRightDiffGroup->getSelected() == 0);
|
instance().console().switches().setRightDifficultyA(myRightDiffGroup->getSelected() == 0);
|
||||||
|
|
||||||
|
// update 'Controllers' tab settings immediately
|
||||||
|
instance().console().setControllers(myGameProperties.get(PropType::Cart_MD5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -658,9 +656,12 @@ void GameInfoDialog::updateControllerStates()
|
||||||
|
|
||||||
// Compumate bankswitching scheme doesn't allow to select controllers
|
// Compumate bankswitching scheme doesn't allow to select controllers
|
||||||
bool enableSelectControl = myBSType->getSelectedTag() != "CM";
|
bool enableSelectControl = myBSType->getSelectedTag() != "CM";
|
||||||
|
// Enable Swap Paddles checkbox only for paddle games
|
||||||
bool enableSwapPaddles = BSPF::startsWithIgnoreCase(contrLeft, "PADDLES") ||
|
bool enableSwapPaddles = BSPF::startsWithIgnoreCase(contrLeft, "PADDLES") ||
|
||||||
BSPF::startsWithIgnoreCase(contrRight, "PADDLES");
|
BSPF::startsWithIgnoreCase(contrRight, "PADDLES") ||
|
||||||
|
BSPF::startsWithIgnoreCase(myLeftPortDetected->getLabel(), "Paddles") ||
|
||||||
|
BSPF::startsWithIgnoreCase(myRightPortDetected->getLabel(), "Paddles");
|
||||||
|
|
||||||
if(instance().hasConsole())
|
if(instance().hasConsole())
|
||||||
{
|
{
|
||||||
const Controller& lport = instance().console().leftController();
|
const Controller& lport = instance().console().leftController();
|
||||||
|
|
Loading…
Reference in New Issue