summaryrefslogtreecommitdiff
path: root/app/mac/impl/input-device-gc-gamepad.mm
diff options
context:
space:
mode:
authorHannes Schulze <haschu0103@outlook.de>2025-02-04 23:11:08 +0100
committerHannes Schulze <haschu0103@outlook.de>2025-02-04 23:11:08 +0100
commit79553ab1fa3d707612e80dd03bf95ca65fa0c411 (patch)
treef44bec41548d569cfca43c44e0e4ffa7b72ed4ed /app/mac/impl/input-device-gc-gamepad.mm
parent9c45e9c7df1efa5bc1c8e73b6eaef4726b828d3e (diff)
refactor file browser
Diffstat (limited to 'app/mac/impl/input-device-gc-gamepad.mm')
-rw-r--r--app/mac/impl/input-device-gc-gamepad.mm60
1 files changed, 60 insertions, 0 deletions
diff --git a/app/mac/impl/input-device-gc-gamepad.mm b/app/mac/impl/input-device-gc-gamepad.mm
new file mode 100644
index 0000000..d2f84ec
--- /dev/null
+++ b/app/mac/impl/input-device-gc-gamepad.mm
@@ -0,0 +1,60 @@
+#import "impl/input-device-gc-gamepad.hh"
+
+namespace nes::app::mac
+{
+ input_device_gc_gamepad::input_device_gc_gamepad(GCExtendedGamepad* profile)
+ : profile_{ profile }
+ {
+ }
+
+ auto input_device_gc_gamepad::get_name() const -> std::string_view
+ {
+ return [[get_controller() vendorName] UTF8String];
+ }
+
+ auto input_device_gc_gamepad::get_index() const -> index
+ {
+ switch ([get_controller() playerIndex])
+ {
+ case GCControllerPlayerIndex1:
+ return index::player_1;
+ case GCControllerPlayerIndex2:
+ return index::player_2;
+ case GCControllerPlayerIndex3:
+ case GCControllerPlayerIndex4:
+ case GCControllerPlayerIndexUnset:
+ break;
+ }
+ return index::unused;
+ }
+
+ auto input_device_gc_gamepad::set_index(index const idx) -> void
+ {
+ switch (idx)
+ {
+ case index::unused:
+ [get_controller() setPlayerIndex:GCControllerPlayerIndexUnset];
+ break;
+ case index::player_1:
+ [get_controller() setPlayerIndex:GCControllerPlayerIndex1];
+ break;
+ case index::player_2:
+ [get_controller() setPlayerIndex:GCControllerPlayerIndex2];
+ break;
+ }
+ }
+
+ auto input_device_gc_gamepad::read_buttons() -> sys::button_mask
+ {
+ auto res = sys::button_mask{};
+ if ([[[profile_ dpad] up] isPressed]) { res.add(sys::buttons::up); }
+ if ([[[profile_ dpad] down] isPressed]) { res.add(sys::buttons::down); }
+ if ([[[profile_ dpad] left] isPressed]) { res.add(sys::buttons::left); }
+ if ([[[profile_ dpad] right] isPressed]) { res.add(sys::buttons::right); }
+ if ([[profile_ buttonA] isPressed]) { res.add(sys::buttons::a); }
+ if ([[profile_ buttonB] isPressed]) { res.add(sys::buttons::b); }
+ if ([[profile_ leftTrigger] isPressed]) { res.add(sys::buttons::select); }
+ if ([[profile_ rightTrigger] isPressed]) { res.add(sys::buttons::start); }
+ return res;
+ }
+} // namespace nes::app::mac \ No newline at end of file