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;