#pragma once #import <Foundation/Foundation.h> #import <Cocoa/Cocoa.h> #import <GameController/GameController.h> #import <CoreHaptics/CoreHaptics.h> #include <optional> class Emulator; class MacOSGameController { private: Emulator* _emu; GCController* _controller; GCExtendedGamepad* _input; CHHapticEngine* _haptics; id<CHHapticPatternPlayer> _player; bool _buttonState[24] = {}; int16_t _axisState[4] = {}; void HandleDpad(GCControllerDirectionPad* dpad); void HandleThumbstick(GCControllerDirectionPad* stick, int stickNumber); public: MacOSGameController(Emulator* emu, GCController* controller); ~MacOSGameController(); bool IsGameController(GCController* controller); bool IsButtonPressed(int buttonNumber); std::optional<int16_t> GetAxisPosition(int axis); void SetForceFeedback(uint16_t magnitude); };