4 changed files with 205 additions and 1 deletions
@ -0,0 +1,154 @@ |
|||||
|
#include "InputHandler.h" |
||||
|
|
||||
|
InputHandler * InputHandler::_instance = 0; |
||||
|
|
||||
|
InputHandler * InputHandler::instance(){ |
||||
|
if(_instance == 0){ |
||||
|
_instance = new InputHandler(); |
||||
|
} |
||||
|
return _instance; |
||||
|
} |
||||
|
|
||||
|
void InputHandler::initialise(){ |
||||
|
/*
|
||||
|
if(SDL_WasInit(SDL_INIT_JOYSTICK) == 0){ |
||||
|
SDL_InitSubSystem(SDL_INIT_JOYSTICK); |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
if(SDL_Init(SDL_INIT_JOYSTICK) >= 0){ |
||||
|
std::cout << "Joystick INIT success" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(SDL_NumJoysticks() > 0){ |
||||
|
for(int i = 0; i < SDL_NumJoysticks(); ++i){ |
||||
|
SDL_Joystick * joystick = SDL_JoystickOpen(i); |
||||
|
if(SDL_JoystickGetAttached(joystick) == SDL_TRUE){ |
||||
|
std::cout << "Joystick num axes: " << SDL_JoystickNumAxes(joystick) << std::endl; |
||||
|
std::cout << "Joystick ID: " << SDL_JoystickInstanceID(joystick) << std::endl; |
||||
|
std::cout << "Joystick Name: " << SDL_JoystickName(joystick) << std::endl; |
||||
|
|
||||
|
SDL_JoystickGUID guid = SDL_JoystickGetDeviceGUID(i); |
||||
|
char guid_str[1024]; |
||||
|
SDL_JoystickGetGUIDString(guid, guid_str, sizeof(guid_str)); |
||||
|
std::cout << "Joystick GUID: " << guid_str << std::endl; |
||||
|
|
||||
|
_joysticks.push_back(joystick); |
||||
|
}else{ |
||||
|
std::cout << SDL_GetError() << std::endl; |
||||
|
} |
||||
|
} |
||||
|
SDL_JoystickEventState(SDL_ENABLE); |
||||
|
_initialised = true; |
||||
|
std::cout << "Initialised " << _joysticks.size() << " joysticks" << std::endl; |
||||
|
}else{ |
||||
|
_initialised = false; |
||||
|
std::cout << "No joysticks initialised" << std::endl; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void InputHandler::update(){ |
||||
|
SDL_Event event; |
||||
|
while(SDL_PollEvent(&event)){ |
||||
|
|
||||
|
if(event.type == SDL_QUIT){ |
||||
|
std::cout << "SDL_QUIT on InputHandler::update()" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.type == SDL_JOYBALLMOTION){ |
||||
|
std::cout << "SDL_JOYBALLMOTION" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.type == SDL_JOYHATMOTION){ |
||||
|
std::cout << "SDL_JOYHATMOTION" << std::endl; |
||||
|
if(event.jhat.value == SDL_HAT_CENTERED){ |
||||
|
std::cout << "value: centered" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_LEFT){ |
||||
|
std::cout << "value: left" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_RIGHT){ |
||||
|
std::cout << "value: right" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_UP){ |
||||
|
std::cout << "value: up" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_DOWN){ |
||||
|
std::cout << "value: down" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_RIGHTUP){ |
||||
|
std::cout << "value: rightup" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_RIGHTDOWN){ |
||||
|
std::cout << "value: rightdown" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_LEFTUP){ |
||||
|
std::cout << "value: leftup" << std::endl; |
||||
|
}else if(event.jhat.value == SDL_HAT_LEFTDOWN){ |
||||
|
std::cout << "value: leftdown" << std::endl; |
||||
|
} |
||||
|
std::cout << "----------" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.type == SDL_JOYAXISMOTION){ |
||||
|
if((event.jaxis.value < -3200) || (event.jaxis.value > 3200)){ |
||||
|
std::cout << "SDL_JOYAXISMOTION" << std::endl; |
||||
|
std::cout << "type: " << event.jaxis.type << std::endl; |
||||
|
std::cout << "which: " << event.jaxis.which << std::endl; |
||||
|
std::cout << "axis: " << event.jaxis.axis << std::endl; |
||||
|
std::cout << "value: " << event.jaxis.value << std::endl; |
||||
|
|
||||
|
if(event.jaxis.axis == 0){ |
||||
|
std::cout << "axis check: left-right" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.jaxis.axis == 1){ |
||||
|
std::cout << "axis check: up-down" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.jaxis.axis == 2){ |
||||
|
std::cout << "axis check: 2" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.jaxis.axis == 3){ |
||||
|
std::cout << "axis check: 3" << std::endl; |
||||
|
} |
||||
|
|
||||
|
// Sony PlayStation Wireless controller
|
||||
|
if(event.jaxis.axis == 4){ |
||||
|
std::cout << "axis check: 4" << std::endl; |
||||
|
} |
||||
|
|
||||
|
if(event.jaxis.axis == 5){ |
||||
|
std::cout << "axis check: 5" << std::endl; |
||||
|
} |
||||
|
|
||||
|
std::cout << "----------" << std::endl; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if(event.type == SDL_JOYBUTTONDOWN){ |
||||
|
std::cout << "SDL_JOYBUTTONDOWN" << std::endl; |
||||
|
std::cout << "type: " << event.jbutton.type << std::endl; |
||||
|
std::cout << "which: " << event.jbutton.which << std::endl; |
||||
|
|
||||
|
std::cout << "button: " << (int)event.jbutton.button << std::endl; |
||||
|
/*
|
||||
|
std::cout << "button: "; |
||||
|
if(event.jbutton.button == SDL_BUTTON_X1){ |
||||
|
std::cout << "SDL_BUTTON_X1"; |
||||
|
} |
||||
|
std::cout << std::endl; |
||||
|
*/ |
||||
|
|
||||
|
std::cout << "state: " << event.jbutton.state << std::endl; |
||||
|
std::cout << "----------" << std::endl; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void InputHandler::clean(){ |
||||
|
if(_initialised){ |
||||
|
for(int i = 0; i < _joysticks.size(); ++i){ |
||||
|
SDL_JoystickClose(_joysticks[i]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
bool InputHandler::initialised(){ |
||||
|
return _initialised; |
||||
|
} |
@ -0,0 +1,47 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
/*
|
||||
|
Joystick num axes: 5 |
||||
|
Joystick ID: 0 |
||||
|
Joystick Name: Generic USB Joystick |
||||
|
Joystick GUID: 79000000000000000600000000000000 |
||||
|
Joystick num axes: 2 |
||||
|
Joystick ID: 1 |
||||
|
Joystick Name: USB gamepad |
||||
|
Joystick GUID: 1f0800000000000001e4000000000000 |
||||
|
Joystick num axes: 6 |
||||
|
Joystick ID: 2 |
||||
|
Joystick Name: Wireless Controller |
||||
|
Joystick GUID: 4c05000000000000c405000000000000 |
||||
|
Initialised 3 joysticks |
||||
|
|
||||
|
// These are the strings reported by SDL2's SDL_JoystickGetGUIDString:
|
||||
|
// https://wiki.libsdl.org/SDL_JoystickGetGUIDString
|
||||
|
4c05c405000000000000504944564944 // Windows. Note characters 1-8.
|
||||
|
4c05000000000000c405000000000000 // OSX. Note characters 1-4 and 17-20.
|
||||
|
030000004c050000c405000011010000 // Linux. Note characters 9-12 and 17-20.
|
||||
|
|
||||
|
4c05c405 // This is the GUID string returned by FNA. Get it?
|
||||
|
|
||||
|
|
||||
|
*/ |
||||
|
|
||||
|
#include <vector> |
||||
|
#include <iostream> |
||||
|
#include "SDL2/SDL.h" |
||||
|
|
||||
|
class InputHandler{ |
||||
|
public: |
||||
|
static InputHandler * instance(); |
||||
|
void initialise(); |
||||
|
void update(); |
||||
|
void clean(); |
||||
|
bool initialised(); |
||||
|
|
||||
|
private: |
||||
|
InputHandler(){} |
||||
|
~InputHandler(){} |
||||
|
static InputHandler * _instance; |
||||
|
bool _initialised; |
||||
|
std::vector<SDL_Joystick *> _joysticks; |
||||
|
}; |
Loading…
Reference in new issue