diff options
| author | Hannes Schulze <haschu0103@outlook.de> | 2025-01-30 16:43:06 +0100 |
|---|---|---|
| committer | Hannes Schulze <haschu0103@outlook.de> | 2025-01-31 00:02:26 +0100 |
| commit | 307e07d6513f9524b7fcab5134494bd175465cd1 (patch) | |
| tree | ce025db2ea998bdcd8980a0ed443083f0daf8d35 /app/mac/view-controller.mm | |
| parent | 5959349f341a2380c0c3f41ec40a1e8e0d969d00 (diff) | |
handle input devices in the c++ application
Diffstat (limited to 'app/mac/view-controller.mm')
| -rw-r--r-- | app/mac/view-controller.mm | 83 |
1 files changed, 2 insertions, 81 deletions
diff --git a/app/mac/view-controller.mm b/app/mac/view-controller.mm index eb81b6b..8695634 100644 --- a/app/mac/view-controller.mm +++ b/app/mac/view-controller.mm @@ -1,54 +1,23 @@ #import "view-controller.hh" -#import "controller-adapter-keyboard.hh" -#import "controller-adapter-gamepad.hh" #import "scene.hh" @implementation ViewController { Scene* _scene; NSSize _sceneSize; - ControllerAdapterKeyboard* _keyboardController; - NSMutableArray<ControllerAdapterGamepad*>* _gamepadControllers; } -- (instancetype)initWithFilePath:(NSString*)filePath +- (instancetype)init { self = [super initWithNibName:nil bundle:nil]; if (self) { - _scene = [[Scene alloc] initWithFilePath:filePath]; + _scene = [[Scene alloc] init]; _sceneSize = [_scene size]; - - _keyboardController = [[ControllerAdapterKeyboard alloc] init]; - _gamepadControllers = [NSMutableArray array]; - for (GCController* controller in [GCController controllers]) - { - auto gamepad = [controller extendedGamepad]; - if (gamepad) - { - auto adapter = [[ControllerAdapterGamepad alloc] initWithProfile:gamepad]; - [_gamepadControllers addObject:adapter]; - } - } - [self updateControllers]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleControllerConnected:) - name:GCControllerDidConnectNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(handleControllerDisconnected:) - name:GCControllerDidDisconnectNotification - object:nil]; } return self; } -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - - (void)loadView { auto view = [[SKView alloc] init]; @@ -59,54 +28,6 @@ [self setView:view]; } -- (void)updateControllers -{ - // Prefer controllers, then fallback to keyboard input. - if ([_gamepadControllers count] >= 1) - { - [_scene setPrimaryController:[_gamepadControllers objectAtIndex:0]]; - if ([_gamepadControllers count] >= 2) - { - [_scene setSecondaryController:[_gamepadControllers objectAtIndex:1]]; - } - else - { - [_scene setSecondaryController:_keyboardController]; - } - } - else - { - [_scene setPrimaryController:_keyboardController]; - [_scene setSecondaryController:nil]; - } -} - -- (void)handleControllerConnected:(NSNotification*)notification -{ - auto controller = (GCController*)[notification object]; - auto gamepad = [controller extendedGamepad]; - if (gamepad) - { - auto adapter = [[ControllerAdapterGamepad alloc] initWithProfile:gamepad]; - [_gamepadControllers addObject:adapter]; - } - [self updateControllers]; -} - -- (void)handleControllerDisconnected:(NSNotification*)notification -{ - auto controller = (GCController*)[notification object]; - for (auto i = NSUInteger{ [_gamepadControllers count] }; i > 0; --i) - { - auto adapter = [_gamepadControllers objectAtIndex:(i - 1)]; - if ([[adapter profile] controller] == controller) - { - [_gamepadControllers removeObjectAtIndex:(i - 1)]; - } - } - [self updateControllers]; -} - - (NSSize)minimumDisplaySize { return _sceneSize; |
