Add "SNES mouse (buttons only)" input device

This is intended for use with Lua scripts that update a mouse cursor's position directly
This commit is contained in:
NovaSquirrel 2021-06-30 17:39:34 -04:00
parent c0e249e993
commit 7af0bbcefc
7 changed files with 10 additions and 4 deletions

View file

@ -113,6 +113,7 @@ shared_ptr<BaseControlDevice> ControlManager::CreateControllerDevice(ControllerT
case ControllerType::SnesMouse: device.reset(new SnesMouse(console, port)); break; case ControllerType::SnesMouse: device.reset(new SnesMouse(console, port)); break;
case ControllerType::SuperScope: device.reset(new SuperScope(console, port, cfg.Controllers[port].Keys)); break; case ControllerType::SuperScope: device.reset(new SuperScope(console, port, cfg.Controllers[port].Keys)); break;
case ControllerType::Multitap: device.reset(new Multitap(console, port, cfg.Controllers[port].Keys, cfg.Controllers[2].Keys, cfg.Controllers[3].Keys, cfg.Controllers[4].Keys)); break; case ControllerType::Multitap: device.reset(new Multitap(console, port, cfg.Controllers[port].Keys, cfg.Controllers[2].Keys, cfg.Controllers[3].Keys, cfg.Controllers[4].Keys)); break;
case ControllerType::SnesMouseButtonsOnly: device.reset(new SnesMouse(console, port)); break;
} }
return device; return device;

View file

@ -165,7 +165,7 @@ void InputHud::DrawControllers(OverscanDimensions overscan, int frameNumber)
hud->DrawRectangle(pos.X - 1, pos.Y - 1, 3, 3, 0x00111111, true, 1, frameNumber); hud->DrawRectangle(pos.X - 1, pos.Y - 1, 3, 3, 0x00111111, true, 1, frameNumber);
hud->DrawRectangle(pos.X - 1, pos.Y - 1, 3, 3, 0x80CCCCCC, false, 1, frameNumber); hud->DrawRectangle(pos.X - 1, pos.Y - 1, 3, 3, 0x80CCCCCC, false, 1, frameNumber);
} }
} else if(controllerData[i].Type == ControllerType::SnesMouse) { } else if(controllerData[i].Type == ControllerType::SnesMouse || controllerData[i].Type == ControllerType::SnesMouseButtonsOnly) {
if(cfg.DisplayInputPort[i]) { if(cfg.DisplayInputPort[i]) {
SnesMouse mouse(_console, 0); SnesMouse mouse(_console, 0);
mouse.SetRawState(controllerData[i].State); mouse.SetRawState(controllerData[i].State);

View file

@ -28,7 +28,8 @@ const vector<string> ControllerTypeNames = {
"SnesController", "SnesController",
"SnesMouse", "SnesMouse",
"SuperScope", "SuperScope",
"Multitap" "Multitap",
"SnesMouseButtonsOnly"
}; };
const vector<string> RamStateNames = { const vector<string> RamStateNames = {

View file

@ -157,7 +157,8 @@ enum class ControllerType
SnesController = 1, SnesController = 1,
SnesMouse = 2, SnesMouse = 2,
SuperScope = 3, SuperScope = 3,
Multitap = 4 Multitap = 4,
SnesMouseButtonsOnly = 5
}; };
struct KeyMapping struct KeyMapping

View file

@ -132,7 +132,8 @@ namespace Mesen.GUI.Config
SnesController = 1, SnesController = 1,
SnesMouse = 2, SnesMouse = 2,
SuperScope = 3, SuperScope = 3,
Multitap = 4 Multitap = 4,
SnesMouseButtonsOnly = 5
} }
public enum InputDisplayPosition public enum InputDisplayPosition

View file

@ -862,6 +862,7 @@
<Value ID="SnesMouse">SNES Mouse</Value> <Value ID="SnesMouse">SNES Mouse</Value>
<Value ID="SuperScope">Super Scope</Value> <Value ID="SuperScope">Super Scope</Value>
<Value ID="Multitap">Super Multitap</Value> <Value ID="Multitap">Super Multitap</Value>
<Value ID="SnesMouseButtonsOnly">SNES Mouse (buttons only)</Value>
</Enum> </Enum>
<Enum ID="VideoAspectRatio"> <Enum ID="VideoAspectRatio">
<Value ID="NoStretching">Default (No Stretching)</Value> <Value ID="NoStretching">Default (No Stretching)</Value>

View file

@ -165,6 +165,7 @@ namespace Mesen.GUI.Emulation
switch(ConfigApi.GetControllerType(i)) { switch(ConfigApi.GetControllerType(i)) {
case ControllerType.SnesMouse: case ControllerType.SnesMouse:
return true; return true;
// Do not allow mouse capture on SnesMouseButtonsOnly because that's the whole point of that input method
} }
} }
return false; return false;