Merge pull request #19 from Hasufel/master
This commit is contained in:
@@ -47,6 +47,8 @@ class SystemEvents {
|
|||||||
static public var joyhatmove = 26;
|
static public var joyhatmove = 26;
|
||||||
static public var joybuttondown = 27;
|
static public var joybuttondown = 27;
|
||||||
static public var joybuttonup = 28;
|
static public var joybuttonup = 28;
|
||||||
static public var syswm = 29;
|
static public var joydeviceadded = 29;
|
||||||
|
static public var joydeviceremoved = 30;
|
||||||
|
static public var syswm = 31;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -582,6 +582,18 @@ class InputHandler {
|
|||||||
}
|
}
|
||||||
} //lime_gamepadhat
|
} //lime_gamepadhat
|
||||||
|
|
||||||
|
public function lime_gamepaddeviceadded(_event:Dynamic) {
|
||||||
|
if(lib.host.ongamepaddeviceadded != null) {
|
||||||
|
lib.host.ongamepaddeviceadded(_event);
|
||||||
|
}
|
||||||
|
} //lime_gamepaddeviceadded
|
||||||
|
|
||||||
|
public function lime_gamepaddeviceremoved(_event:Dynamic) {
|
||||||
|
if(lib.host.ongamepaddeviceremoved != null) {
|
||||||
|
lib.host.ongamepaddeviceremoved(_event);
|
||||||
|
}
|
||||||
|
} //lime_gamepaddeviceremoved
|
||||||
|
|
||||||
private static var efLeftDown = 0x0001;
|
private static var efLeftDown = 0x0001;
|
||||||
private static var efShiftDown = 0x0002;
|
private static var efShiftDown = 0x0002;
|
||||||
private static var efCtrlDown = 0x0004;
|
private static var efCtrlDown = 0x0004;
|
||||||
|
|||||||
@@ -282,6 +282,12 @@ class Lime {
|
|||||||
case SystemEvents.joybuttonup:
|
case SystemEvents.joybuttonup:
|
||||||
input.lime_gamepadbuttonup(_event);
|
input.lime_gamepadbuttonup(_event);
|
||||||
|
|
||||||
|
case SystemEvents.joydeviceadded:
|
||||||
|
input.lime_gamepaddeviceadded(_event);
|
||||||
|
|
||||||
|
case SystemEvents.joydeviceremoved:
|
||||||
|
input.lime_gamepaddeviceremoved(_event);
|
||||||
|
|
||||||
//Window
|
//Window
|
||||||
|
|
||||||
case SystemEvents.activate:
|
case SystemEvents.activate:
|
||||||
|
|||||||
@@ -58,11 +58,13 @@ enum EventType
|
|||||||
etJoyHatMove, // 26
|
etJoyHatMove, // 26
|
||||||
etJoyButtonDown, // 27
|
etJoyButtonDown, // 27
|
||||||
etJoyButtonUp, // 28
|
etJoyButtonUp, // 28
|
||||||
|
etJoyDeviceAdded, //29
|
||||||
|
etJoyDeviceRemoved, //30
|
||||||
|
|
||||||
etSysWM, // 29
|
etSysWM, // 31
|
||||||
|
|
||||||
etRenderContextLost, // 30
|
etRenderContextLost, // 32
|
||||||
etRenderContextRestored, // 31
|
etRenderContextRestored, // 33
|
||||||
};
|
};
|
||||||
|
|
||||||
enum EventFlags
|
enum EventFlags
|
||||||
|
|||||||
@@ -738,7 +738,10 @@ extern "C" void MacBoot( /*void (*)()*/ );
|
|||||||
|
|
||||||
SDLFrame *sgSDLFrame = 0;
|
SDLFrame *sgSDLFrame = 0;
|
||||||
#ifndef EMSCRIPTEN
|
#ifndef EMSCRIPTEN
|
||||||
SDL_Joystick *sgJoystick = 0;
|
SDL_Joystick *sgJoystick;
|
||||||
|
QuickVec<SDL_Joystick *> sgJoysticks;
|
||||||
|
QuickVec<int> sgJoysticksId;
|
||||||
|
QuickVec<int> sgJoysticksIndex;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@@ -1193,9 +1196,14 @@ void ProcessEvent(SDL_Event &inEvent)
|
|||||||
Event joystick(etJoyButtonUp);
|
Event joystick(etJoyButtonUp);
|
||||||
joystick.id = inEvent.jbutton.which;
|
joystick.id = inEvent.jbutton.which;
|
||||||
joystick.code = inEvent.jbutton.button;
|
joystick.code = inEvent.jbutton.button;
|
||||||
|
for (int i = 0; i < sgJoysticksId.size(); i++) { //if SDL_JOYDEVICEREMOVED is triggered, up is fired on all buttons, so we need to counter the effect
|
||||||
|
if (sgJoysticksId[i] == joystick.id) {
|
||||||
sgSDLFrame->ProcessEvent(joystick);
|
sgSDLFrame->ProcessEvent(joystick);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case SDL_JOYHATMOTION:
|
case SDL_JOYHATMOTION:
|
||||||
{
|
{
|
||||||
Event joystick(etJoyHatMove);
|
Event joystick(etJoyHatMove);
|
||||||
@@ -1205,6 +1213,44 @@ void ProcessEvent(SDL_Event &inEvent)
|
|||||||
sgSDLFrame->ProcessEvent(joystick);
|
sgSDLFrame->ProcessEvent(joystick);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case SDL_JOYDEVICEADDED:
|
||||||
|
{
|
||||||
|
int joyId = -1;
|
||||||
|
for (int i = 0; i < sgJoysticksId.size(); i++) {
|
||||||
|
if (sgJoysticksIndex[i] == i) {
|
||||||
|
joyId = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (joyId == -1) {
|
||||||
|
Event joystick(etJoyDeviceAdded);
|
||||||
|
sgJoystick = SDL_JoystickOpen(inEvent.jdevice.which); //which: joystick device index
|
||||||
|
joystick.id = SDL_JoystickInstanceID(sgJoystick);
|
||||||
|
sgJoysticks.push_back(sgJoystick);
|
||||||
|
sgJoysticksId.push_back(joystick.id);
|
||||||
|
sgJoysticksIndex.push_back(inEvent.jdevice.which);
|
||||||
|
sgSDLFrame->ProcessEvent(joystick);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SDL_JOYDEVICEREMOVED:
|
||||||
|
{
|
||||||
|
Event joystick(etJoyDeviceRemoved);
|
||||||
|
joystick.id = inEvent.jdevice.which; //which: instance id
|
||||||
|
int j = 0;
|
||||||
|
for (int i = 0; i < sgJoysticksId.size(); i++) {
|
||||||
|
if (sgJoysticksId[i] == joystick.id) {
|
||||||
|
SDL_JoystickClose(sgJoysticks[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
sgJoysticksId.erase(j,1);
|
||||||
|
sgJoysticks.erase(j,1);
|
||||||
|
sgJoysticksIndex.erase(j,1);
|
||||||
|
sgSDLFrame->ProcessEvent(joystick);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1525,18 +1571,6 @@ void CreateMainFrame(FrameCreationCallback inOnFrame, int inWidth, int inHeight,
|
|||||||
|
|
||||||
HintColourOrder( is_opengl || screen->format->Rmask==0xff );
|
HintColourOrder( is_opengl || screen->format->Rmask==0xff );
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int numJoysticks = SDL_NumJoysticks();
|
|
||||||
|
|
||||||
if (sgJoystickEnabled && numJoysticks > 0)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < numJoysticks; i++)
|
|
||||||
{
|
|
||||||
sgJoystick = SDL_JoystickOpen(i);
|
|
||||||
}
|
|
||||||
SDL_JoystickEventState(SDL_TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int width, height;
|
int width, height;
|
||||||
if (windowFlags & SDL_WINDOW_FULLSCREEN || windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP)
|
if (windowFlags & SDL_WINDOW_FULLSCREEN || windowFlags & SDL_WINDOW_FULLSCREEN_DESKTOP)
|
||||||
{
|
{
|
||||||
@@ -1554,6 +1588,21 @@ void CreateMainFrame(FrameCreationCallback inOnFrame, int inWidth, int inHeight,
|
|||||||
|
|
||||||
sgSDLFrame = new SDLFrame(window, renderer, windowFlags, opengl, width, height);
|
sgSDLFrame = new SDLFrame(window, renderer, windowFlags, opengl, width, height);
|
||||||
inOnFrame(sgSDLFrame);
|
inOnFrame(sgSDLFrame);
|
||||||
|
|
||||||
|
int numJoysticks = SDL_NumJoysticks();
|
||||||
|
if (sgJoystickEnabled && numJoysticks > 0) {
|
||||||
|
SDL_JoystickEventState(SDL_TRUE);
|
||||||
|
for (int i = 0; i < numJoysticks; i++) {
|
||||||
|
sgJoystick = SDL_JoystickOpen(i);
|
||||||
|
Event joystick(etJoyDeviceAdded);
|
||||||
|
joystick.id = SDL_JoystickInstanceID(sgJoystick);
|
||||||
|
sgJoysticks.push_back(sgJoystick);
|
||||||
|
sgJoysticksId.push_back(joystick.id);
|
||||||
|
sgJoysticksIndex.push_back(i);
|
||||||
|
sgSDLFrame->ProcessEvent(joystick);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
StartAnimation();
|
StartAnimation();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user