From 7af0bbcefcbb9a63c4304f08c1418c84be7438c2 Mon Sep 17 00:00:00 2001 From: NovaSquirrel Date: Wed, 30 Jun 2021 17:39:34 -0400 Subject: [PATCH] Add "SNES mouse (buttons only)" input device This is intended for use with Lua scripts that update a mouse cursor's position directly --- Core/ControlManager.cpp | 1 + Core/InputHud.cpp | 2 +- Core/MovieTypes.h | 3 ++- Core/SettingTypes.h | 3 ++- UI/Config/InputConfig.cs | 3 ++- UI/Dependencies/resources.en.xml | 1 + UI/Emulation/CursorManager.cs | 1 + 7 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Core/ControlManager.cpp b/Core/ControlManager.cpp index 8aa15b0..fa7f9ca 100644 --- a/Core/ControlManager.cpp +++ b/Core/ControlManager.cpp @@ -113,6 +113,7 @@ shared_ptr ControlManager::CreateControllerDevice(ControllerT 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::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; diff --git a/Core/InputHud.cpp b/Core/InputHud.cpp index 93224c1..c244760 100644 --- a/Core/InputHud.cpp +++ b/Core/InputHud.cpp @@ -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, 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]) { SnesMouse mouse(_console, 0); mouse.SetRawState(controllerData[i].State); diff --git a/Core/MovieTypes.h b/Core/MovieTypes.h index 7c324a6..ce5e3fb 100644 --- a/Core/MovieTypes.h +++ b/Core/MovieTypes.h @@ -28,7 +28,8 @@ const vector ControllerTypeNames = { "SnesController", "SnesMouse", "SuperScope", - "Multitap" + "Multitap", + "SnesMouseButtonsOnly" }; const vector RamStateNames = { diff --git a/Core/SettingTypes.h b/Core/SettingTypes.h index 9a7ee34..d866757 100644 --- a/Core/SettingTypes.h +++ b/Core/SettingTypes.h @@ -157,7 +157,8 @@ enum class ControllerType SnesController = 1, SnesMouse = 2, SuperScope = 3, - Multitap = 4 + Multitap = 4, + SnesMouseButtonsOnly = 5 }; struct KeyMapping diff --git a/UI/Config/InputConfig.cs b/UI/Config/InputConfig.cs index d6168e0..134c9fb 100644 --- a/UI/Config/InputConfig.cs +++ b/UI/Config/InputConfig.cs @@ -132,7 +132,8 @@ namespace Mesen.GUI.Config SnesController = 1, SnesMouse = 2, SuperScope = 3, - Multitap = 4 + Multitap = 4, + SnesMouseButtonsOnly = 5 } public enum InputDisplayPosition diff --git a/UI/Dependencies/resources.en.xml b/UI/Dependencies/resources.en.xml index f17226c..d64eca3 100644 --- a/UI/Dependencies/resources.en.xml +++ b/UI/Dependencies/resources.en.xml @@ -862,6 +862,7 @@ SNES Mouse Super Scope Super Multitap + SNES Mouse (buttons only) Default (No Stretching) diff --git a/UI/Emulation/CursorManager.cs b/UI/Emulation/CursorManager.cs index 5e038d5..f7ff111 100644 --- a/UI/Emulation/CursorManager.cs +++ b/UI/Emulation/CursorManager.cs @@ -165,6 +165,7 @@ namespace Mesen.GUI.Emulation switch(ConfigApi.GetControllerType(i)) { case ControllerType.SnesMouse: return true; + // Do not allow mouse capture on SnesMouseButtonsOnly because that's the whole point of that input method } } return false;