diff --git a/src/game/g_window.pas b/src/game/g_window.pas
index c3f6871061252e87cb54f557d85f730b15530af5..5689ceb04d822cf81896f28629ec50ee6a58f23f 100644 (file)
--- a/src/game/g_window.pas
+++ b/src/game/g_window.pas
ticksOverflow: Int64 = -1;
lastTicks: Uint32 = 0; // to detect overflow
{$ENDIF}
ticksOverflow: Int64 = -1;
lastTicks: Uint32 = 0; // to detect overflow
{$ENDIF}
-
+ JoystickHatState: array [0..e_MaxJoyHats, HAT_LEFT..HAT_DOWN] of Boolean;
procedure KillGLWindow (preserveGL: Boolean);
begin
procedure KillGLWindow (preserveGL: Boolean);
begin
end;
end;
-procedure ChangeWindowSize ();
+procedure ChangeWindowSize (requested: Boolean);
begin
e_LogWritefln(' ChangeWindowSize: (ws=%dx%d) (ss=%dx%d)', [gWinSizeX, gWinSizeY, gScreenWidth, gScreenHeight]);
gWinSizeX := gScreenWidth;
begin
e_LogWritefln(' ChangeWindowSize: (ws=%dx%d) (ss=%dx%d)', [gWinSizeX, gWinSizeY, gScreenWidth, gScreenHeight]);
gWinSizeX := gScreenWidth;
{$ENDIF}
e_ResizeWindow(gScreenWidth, gScreenHeight);
g_Game_SetupScreenSize();
{$ENDIF}
e_ResizeWindow(gScreenWidth, gScreenHeight);
g_Game_SetupScreenSize();
- g_Menu_Reset();
+ {$IF DEFINED(ANDROID)}
+ (* This will fix menu reset on keyboard showing *)
+ if requested then
+ g_Menu_Reset;
+ {$ELSE}
+ g_Menu_Reset;
+ {$ENDIF}
g_Game_ClearLoading();
{$ENDIF}
end;
g_Game_ClearLoading();
{$ENDIF}
end;
if result then
begin
g_Window_SetDisplay(preserve);
if result then
begin
g_Window_SetDisplay(preserve);
- ChangeWindowSize();
+ ChangeWindowSize(true);
end;
{$ENDIF}
end;
end;
{$ENDIF}
end;
gScreenWidth := ev.data1;
gScreenHeight := ev.data2;
end;
gScreenWidth := ev.data1;
gScreenHeight := ev.data2;
end;
- ChangeWindowSize();
+ ChangeWindowSize(false);
SwapBuffers();
if g_debug_WinMsgs then
begin
SwapBuffers();
if g_debug_WinMsgs then
begin
key, keychr: Word;
uc: UnicodeChar;
down: Boolean;
key, keychr: Word;
uc: UnicodeChar;
down: Boolean;
+ i: Integer;
+ hat: array [HAT_LEFT..HAT_DOWN] of Boolean;
begin
result := false;
begin
result := false;
exit;
end;
{$ENDIF}
exit;
end;
{$ENDIF}
- e_KeyUpDown(key, down);
+ if ev.key._repeat = 0 then
+ begin
+ e_KeyUpDown(key, down);
+ g_Console_ProcessBind(key, down)
+ end;
if down then KeyPress(key);
end;
if down then KeyPress(key);
end;
+ SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP:
+ if (ev.jbutton.which < e_MaxJoys) and (ev.jbutton.button < e_MaxJoyBtns) then
+ begin
+ key := e_JoyButtonToKey(ev.jbutton.which, ev.jbutton.button);
+ down := ev.type_ = SDL_JOYBUTTONDOWN;
+ e_KeyUpDown(key, down);
+ g_Console_ProcessBind(key, down);
+ if down then KeyPress(key)
+ end;
+
+ SDL_JOYAXISMOTION:
+ if (ev.jaxis.which < e_MaxJoys) and (ev.jaxis.axis < e_MaxJoyAxes) then
+ begin
+ down := ev.jaxis.value <> Joysticks[ev.jaxis.which].AxisZero[ev.jaxis.axis];
+ if ev.jaxis.value < Joysticks[ev.jaxis.which].AxisZero[ev.jaxis.axis] - e_JoystickDeadzones[ev.jaxis.which] then
+ key := e_JoyAxisToKey(ev.jaxis.which, ev.jaxis.axis, AX_MINUS)
+ else
+ key := e_JoyAxisToKey(ev.jaxis.which, ev.jaxis.axis, AX_PLUS);
+ e_KeyUpDown(key, down);
+ g_Console_ProcessBind(key, down);
+ if down then KeyPress(key)
+ end;
+
+ SDL_JOYHATMOTION:
+ if (ev.jhat.which < e_MaxJoys) and (ev.jhat.hat < e_MaxJoyHats) then
+ begin
+ hat[HAT_UP] := LongBool(ev.jhat.value and SDL_HAT_UP);
+ hat[HAT_DOWN] := LongBool(ev.jhat.value and SDL_HAT_DOWN);
+ hat[HAT_LEFT] := LongBool(ev.jhat.value and SDL_HAT_LEFT);
+ hat[HAT_RIGHT] := LongBool(ev.jhat.value and SDL_HAT_RIGHT);
+ for i := HAT_LEFT to HAT_DOWN do
+ begin
+ if JoystickHatState[ev.jhat.which, i] <> hat[i] then
+ begin
+ down := hat[i];
+ key := e_JoyHatToKey(ev.jhat.which, ev.jhat.hat, i);
+ e_KeyUpDown(key, down);
+ g_Console_ProcessBind(key, down);
+ if down then KeyPress(key)
+ end
+ end;
+ JoystickHatState[ev.jhat.which] := hat
+ end;
+
+(*
+ SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED:
+ begin
+ // TODO update menu here
+ end
+*)
+
{$IF not DEFINED(HEADLESS) and DEFINED(ENABLE_HOLMES)}
SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEWHEEL, SDL_MOUSEMOTION:
fuiOnSDLEvent(ev);
{$IF not DEFINED(HEADLESS) and DEFINED(ENABLE_HOLMES)}
SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEWHEEL, SDL_MOUSEMOTION:
fuiOnSDLEvent(ev);
EventHandler(ev);
if (ev.type_ = SDL_QUITEV) then break;
end;
EventHandler(ev);
if (ev.type_ = SDL_QUITEV) then break;
end;
- e_PollJoysticks();
+ //e_PollJoysticks();
if (ev.type_ = SDL_QUITEV) or (gExit = EXIT_QUIT) then
begin
if (ev.type_ = SDL_QUITEV) or (gExit = EXIT_QUIT) then
begin
result := EventHandler(ev);
if (ev.type_ = SDL_QUITEV) then exit;
end;
result := EventHandler(ev);
if (ev.type_ = SDL_QUITEV) then exit;
end;
- e_PollJoysticks();
+ //e_PollJoysticks();
end;
end;