From c1062208bb54cce8dffa04e9697ae124f271ecaf Mon Sep 17 00:00:00 2001 From: Hannes Schulze Date: Wed, 29 Jan 2025 00:58:07 +0100 Subject: use game controller api for input --- app/mac/controller-adapter-keyboard.mm | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 app/mac/controller-adapter-keyboard.mm (limited to 'app/mac/controller-adapter-keyboard.mm') diff --git a/app/mac/controller-adapter-keyboard.mm b/app/mac/controller-adapter-keyboard.mm new file mode 100644 index 0000000..ad3dda8 --- /dev/null +++ b/app/mac/controller-adapter-keyboard.mm @@ -0,0 +1,44 @@ +#import "controller-adapter-keyboard.hh" + +@implementation ControllerAdapterKeyboard + +- (instancetype)init +{ + self = [super init]; + if (self) + { + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(handleKeyboardConnected:) + name:GCKeyboardDidConnectNotification + object:nil]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)handleKeyboardConnected:(NSNotification*)notification +{ + _keyboard = [GCKeyboard coalescedKeyboard]; +} + +- (nes::button_mask)readPressedButtons +{ + auto profile = [[self keyboard] keyboardInput]; + + auto res = nes::button_mask{}; + if ([[profile buttonForKeyCode:GCKeyCodeUpArrow] isPressed]) { res.add(nes::buttons::up); } + if ([[profile buttonForKeyCode:GCKeyCodeDownArrow] isPressed]) { res.add(nes::buttons::down); } + if ([[profile buttonForKeyCode:GCKeyCodeLeftArrow] isPressed]) { res.add(nes::buttons::left); } + if ([[profile buttonForKeyCode:GCKeyCodeRightArrow] isPressed]) { res.add(nes::buttons::right); } + if ([[profile buttonForKeyCode:GCKeyCodeKeyZ] isPressed]) { res.add(nes::buttons::a); } + if ([[profile buttonForKeyCode:GCKeyCodeKeyX] isPressed]) { res.add(nes::buttons::b); } + if ([[profile buttonForKeyCode:GCKeyCodeReturnOrEnter] isPressed]) { res.add(nes::buttons::start); } + if ([[profile buttonForKeyCode:GCKeyCodeSpacebar] isPressed]) { res.add(nes::buttons::select); } + return res; +} + +@end \ No newline at end of file -- cgit v1.3.1