From 72750c33881c61dc539e5c597b7a815c99e40d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerard=20Gasc=C3=B3n?= <52170489+GerardGascon@users.noreply.github.com> Date: Fri, 28 Jun 2024 15:18:56 +0200 Subject: [PATCH] refactor: preprocessors for wiimote and joycon compilation --- SlidePresenter/ControllerSelector.cs | 44 ++++++++++++++----- .../ControllerSlidePresenter.csproj | 16 ++++--- .../{ => GamepadReader}/IGamepadReader.cs | 2 +- .../{ => GamepadReader}/JoyConRead.cs | 8 ++-- .../{ => GamepadReader}/WiimoteRead.cs | 8 ++-- SlidePresenter/InputSender/IInputSender.cs | 2 +- .../InputSender/LinuxInputSender.cs | 2 +- SlidePresenter/InputSender/MacInputSender.cs | 2 +- .../InputSender/WindowsInputSender.cs | 2 +- SlidePresenter/Program.cs | 4 +- SlidePresenter/SlideSwitcher.cs | 5 ++- 11 files changed, 63 insertions(+), 32 deletions(-) rename SlidePresenter/{ => GamepadReader}/IGamepadReader.cs (69%) rename SlidePresenter/{ => GamepadReader}/JoyConRead.cs (96%) rename SlidePresenter/{ => GamepadReader}/WiimoteRead.cs (92%) diff --git a/SlidePresenter/ControllerSelector.cs b/SlidePresenter/ControllerSelector.cs index 8efff0f..31e5dd8 100644 --- a/SlidePresenter/ControllerSelector.cs +++ b/SlidePresenter/ControllerSelector.cs @@ -1,11 +1,33 @@ -namespace SwitchSlidePresenter; +using ControllerSlidePresenter.GamepadReader; + +namespace ControllerSlidePresenter; public static class ControllerSelector { - public static IGamepadReader? GetReader() { - Console.WriteLine("Write a number to select controller type:"); - Console.WriteLine("[1] - JoyCon"); - Console.WriteLine("[2] - Wiimote"); + private static readonly List<(string name, IGamepadReader reader)> Readers = [ +#if JoyCon + ("JoyCon", new JoyConRead()), +#endif +#if Wiimote + ("Wiimote", new WiimoteRead()) +#endif + ]; + public static IGamepadReader? GetReader() { + if (Readers.Count == 1) + return Readers[0].reader; + + Console.WriteLine("Write a number to select controller type:"); + for (int i = 0; i < Readers.Count; i++) + Console.WriteLine($"[{i+1}] - {Readers[i].name}"); + + int? id = GetReaderIndex(); + if (id == null) + return null; + + return Readers[id.Value].reader; + } + + private static int? GetReaderIndex() { string? line = Console.ReadLine(); if (line == null) { Console.WriteLine("Invalid input."); @@ -15,13 +37,11 @@ public static class ControllerSelector { Console.WriteLine("Invalid number."); return null; } + if (id <= 0 || id >= Readers.Count) { + Console.WriteLine("Invalid number"); + return null; + } - return GetReader(id); + return id - 1; } - - private static IGamepadReader? GetReader(int id) => id switch { - 1 => new JoyConRead(), - 2 => new WiimoteRead(), - _ => null - }; } \ No newline at end of file diff --git a/SlidePresenter/ControllerSlidePresenter.csproj b/SlidePresenter/ControllerSlidePresenter.csproj index d6e90c1..1de9a6f 100644 --- a/SlidePresenter/ControllerSlidePresenter.csproj +++ b/SlidePresenter/ControllerSlidePresenter.csproj @@ -5,22 +5,26 @@ net8.0 enable enable - SwitchSlidePresenter - OS_WINDOWS + $(DefineConstants);OS_WINDOWS - OS_LINUX + $(DefineConstants);OS_LINUX - OS_MAC + $(DefineConstants);OS_MAC + + + + $(DefineConstants);JoyCon + $(DefineConstants);Wiimote - - + + diff --git a/SlidePresenter/IGamepadReader.cs b/SlidePresenter/GamepadReader/IGamepadReader.cs similarity index 69% rename from SlidePresenter/IGamepadReader.cs rename to SlidePresenter/GamepadReader/IGamepadReader.cs index 2fbf258..f3f0be5 100644 --- a/SlidePresenter/IGamepadReader.cs +++ b/SlidePresenter/GamepadReader/IGamepadReader.cs @@ -1,4 +1,4 @@ -namespace SwitchSlidePresenter; +namespace ControllerSlidePresenter.GamepadReader; public interface IGamepadReader { public event Action NextSlide; diff --git a/SlidePresenter/JoyConRead.cs b/SlidePresenter/GamepadReader/JoyConRead.cs similarity index 96% rename from SlidePresenter/JoyConRead.cs rename to SlidePresenter/GamepadReader/JoyConRead.cs index 09e750f..6b7b199 100644 --- a/SlidePresenter/JoyConRead.cs +++ b/SlidePresenter/GamepadReader/JoyConRead.cs @@ -1,11 +1,12 @@ -using System.Text; +#if JoyCon +using System.Text; using HidSharp; using wtf.cluster.JoyCon; using wtf.cluster.JoyCon.ExtraData; using wtf.cluster.JoyCon.InputData; using wtf.cluster.JoyCon.InputReports; -namespace SwitchSlidePresenter; +namespace ControllerSlidePresenter.GamepadReader; public class JoyConRead : IGamepadReader { public event Action NextSlide; @@ -89,4 +90,5 @@ public class JoyConRead : IGamepadReader { private static bool NextPressed(ButtonsSimple input) { return input.ZLorZR || input.Down; } -} \ No newline at end of file +} +#endif diff --git a/SlidePresenter/WiimoteRead.cs b/SlidePresenter/GamepadReader/WiimoteRead.cs similarity index 92% rename from SlidePresenter/WiimoteRead.cs rename to SlidePresenter/GamepadReader/WiimoteRead.cs index 1a25b90..8f45454 100644 --- a/SlidePresenter/WiimoteRead.cs +++ b/SlidePresenter/GamepadReader/WiimoteRead.cs @@ -1,6 +1,7 @@ -using WiimoteLib.NetCore; +#if Wiimote +using WiimoteLib.NetCore; -namespace SwitchSlidePresenter; +namespace ControllerSlidePresenter.GamepadReader; public class WiimoteRead : IGamepadReader { public event Action NextSlide; @@ -46,4 +47,5 @@ public class WiimoteRead : IGamepadReader { private static bool NextPressed(ButtonState input) { return input.A || input.Right; } -} \ No newline at end of file +} +#endif diff --git a/SlidePresenter/InputSender/IInputSender.cs b/SlidePresenter/InputSender/IInputSender.cs index e0bce4e..461f08d 100644 --- a/SlidePresenter/InputSender/IInputSender.cs +++ b/SlidePresenter/InputSender/IInputSender.cs @@ -1,4 +1,4 @@ -namespace SwitchSlidePresenter.InputSender; +namespace ControllerSlidePresenter.InputSender; public interface IInputSender { void NextSlide(); diff --git a/SlidePresenter/InputSender/LinuxInputSender.cs b/SlidePresenter/InputSender/LinuxInputSender.cs index 5f084eb..cda05c8 100644 --- a/SlidePresenter/InputSender/LinuxInputSender.cs +++ b/SlidePresenter/InputSender/LinuxInputSender.cs @@ -1,5 +1,5 @@ #if OS_LINUX -namespace SwitchSlidePresenter.InputSender; +namespace ControllerSlidePresenter.InputSender; public class LinuxInputSender : IInputSender { public void NextSlide() { diff --git a/SlidePresenter/InputSender/MacInputSender.cs b/SlidePresenter/InputSender/MacInputSender.cs index 32f8fb3..270704a 100644 --- a/SlidePresenter/InputSender/MacInputSender.cs +++ b/SlidePresenter/InputSender/MacInputSender.cs @@ -1,5 +1,5 @@ #if OS_MAC -namespace SwitchSlidePresenter.InputSender; +namespace ControllerSlidePresenter.InputSender; public class MacInputSender : IInputSender { public void NextSlide() { diff --git a/SlidePresenter/InputSender/WindowsInputSender.cs b/SlidePresenter/InputSender/WindowsInputSender.cs index 233bd3c..3ecb477 100644 --- a/SlidePresenter/InputSender/WindowsInputSender.cs +++ b/SlidePresenter/InputSender/WindowsInputSender.cs @@ -2,7 +2,7 @@ using System.Runtime.InteropServices; using Win32Api; -namespace SwitchSlidePresenter.InputSender; +namespace ControllerSlidePresenter.InputSender; public class WindowsInputSender : IInputSender { private const uint INPUT_KEYBOARD = 1; diff --git a/SlidePresenter/Program.cs b/SlidePresenter/Program.cs index 9a8e12c..a612818 100644 --- a/SlidePresenter/Program.cs +++ b/SlidePresenter/Program.cs @@ -1,4 +1,6 @@ -namespace SwitchSlidePresenter { +using ControllerSlidePresenter.GamepadReader; + +namespace ControllerSlidePresenter { internal abstract class Program { private static async Task Main() { IGamepadReader? reader = ControllerSelector.GetReader(); diff --git a/SlidePresenter/SlideSwitcher.cs b/SlidePresenter/SlideSwitcher.cs index 7c02e10..cd26bf0 100644 --- a/SlidePresenter/SlideSwitcher.cs +++ b/SlidePresenter/SlideSwitcher.cs @@ -1,6 +1,7 @@ -using SwitchSlidePresenter.InputSender; +using ControllerSlidePresenter.GamepadReader; +using ControllerSlidePresenter.InputSender; -namespace SwitchSlidePresenter; +namespace ControllerSlidePresenter; public class SlideSwitcher : IDisposable { private readonly IGamepadReader? _reader;