X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fopengl%2Fr_touch.pas;fp=src%2Fgame%2Fsdl2%2Fg_touch.pas;h=812ce9eeaeb421026191ff77a54ef6f95b986507;hp=645176010962aafa8b105f8389d3116f3cf3660b;hb=83221a8d1b958465bd68e3c79575f4a94c8ffa42;hpb=aa7e40301df69aa13c00ff2bcdb8e532b06b8053
diff --git a/src/game/sdl2/g_touch.pas b/src/game/opengl/r_touch.pas
similarity index 55%
rename from src/game/sdl2/g_touch.pas
rename to src/game/opengl/r_touch.pas
index 6451760..812ce9e 100644
--- a/src/game/sdl2/g_touch.pas
+++ b/src/game/opengl/r_touch.pas
@@ -12,41 +12,71 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*)
-{$INCLUDE ../shared/a_modes.inc}
-unit g_touch;
+{$INCLUDE ../../shared/a_modes.inc}
+unit r_touch;
interface
- uses
- SDL2;
-
- var
- g_touch_enabled: Boolean = False;
- g_touch_size: Single = 1.0;
- g_touch_offset: Single = 50.0;
- g_touch_fire: Boolean = True;
- g_touch_alt: Boolean = False;
-
- procedure g_Touch_Init;
- procedure g_Touch_ShowKeyboard(yes: Boolean);
- procedure g_Touch_HandleEvent(const ev: TSDL_TouchFingerEvent);
- procedure g_Touch_Draw;
+ procedure r_Touch_GetKeyRect (key: Integer; out x, y, w, h: Integer; out founded: Boolean);
+ procedure r_Touch_Draw;
implementation
uses
- {$IFDEF ENABLE_MENU}
- g_gui,
+ {$IFDEF USE_SDL2}
+ SDL2,
{$ENDIF}
SysUtils,
- e_log, r_graphics, r_game, e_input, g_options, g_game, g_weapons, g_console
+ e_input, g_options, g_system,
+ r_game, r_graphics
;
- var
- angleFire: Boolean;
- keyFinger: array [VK_FIRSTKEY..VK_LASTKEY] of Integer;
+ function GetKeyName (key: Integer): String;
+ begin
+ case key of
+ VK_SHOWKBD: result := 'KBD';
+ VK_HIDEKBD: result := 'KBD';
+ VK_LEFT: result := 'LEFT';
+ VK_RIGHT: result := 'RIGHT';
+ VK_UP: result := 'UP';
+ VK_DOWN: result := 'DOWN';
+ VK_FIRE: result := 'FIRE';
+ VK_OPEN: result := 'OPEN';
+ VK_JUMP: result := 'JUMP';
+ VK_CHAT: result := 'CHAT';
+ VK_ESCAPE: result := 'ESC';
+ VK_0: result := '0';
+ VK_1: result := '1';
+ VK_2: result := '2';
+ VK_3: result := '3';
+ VK_4: result := '4';
+ VK_5: result := '5';
+ VK_6: result := '6';
+ VK_7: result := '7';
+ VK_8: result := '8';
+ VK_9: result := '9';
+ VK_A: result := '10';
+ VK_B: result := '11';
+ VK_C: result := '12';
+ VK_D: result := '13';
+ VK_E: result := '14';
+ VK_F: result := '15';
+ VK_CONSOLE: result := 'CON';
+ VK_STATUS: result := 'STAT';
+ VK_TEAM: result := 'TEAM';
+ VK_PREV: result := ' 0) and (key < e_MaxInputKeys) then
+ result := e_KeyNames[key]
+ else
+ result := '<' + IntToStr(key) + '>'
+ end
+ end;
- procedure GetKeyRect(key: Integer; out x, y, w, h: Integer; out founded: Boolean);
+ procedure r_Touch_GetKeyRect (key: Integer; out x, y, w, h: Integer; out founded: Boolean);
var
sw, sh, sz: Integer;
dpi: Single;
@@ -62,7 +92,7 @@ implementation
begin
founded := false;
- {$IFNDEF SDL2_NODPI}
+ {$IF DEFINED(USE_SDL2) AND NOT DEFINED(SDL2_NODPI)}
if SDL_GetDisplayDPI(0, @dpi, nil, nil) <> 0 then
dpi := 96;
{$ELSE}
@@ -73,7 +103,7 @@ implementation
x := 0; y := Round(sh * g_touch_offset / 100);
w := sz; h := sz;
- if SDL_IsTextInputActive() = SDL_True then
+ if sys_IsTextInputActive() then
case key of
VK_HIDEKBD: S(sw - (sz/2), 0, sz / 2, sz / 2);
end
@@ -134,205 +164,21 @@ implementation
end
end;
- function GetKeyName(key: Integer): String;
- begin
- case key of
- VK_SHOWKBD: result := 'KBD';
- VK_HIDEKBD: result := 'KBD';
- VK_LEFT: result := 'LEFT';
- VK_RIGHT: result := 'RIGHT';
- VK_UP: result := 'UP';
- VK_DOWN: result := 'DOWN';
- VK_FIRE: result := 'FIRE';
- VK_OPEN: result := 'OPEN';
- VK_JUMP: result := 'JUMP';
- VK_CHAT: result := 'CHAT';
- VK_ESCAPE: result := 'ESC';
- VK_0: result := '0';
- VK_1: result := '1';
- VK_2: result := '2';
- VK_3: result := '3';
- VK_4: result := '4';
- VK_5: result := '5';
- VK_6: result := '6';
- VK_7: result := '7';
- VK_8: result := '8';
- VK_9: result := '9';
- VK_A: result := '10';
- VK_B: result := '11';
- VK_C: result := '12';
- VK_D: result := '13';
- VK_E: result := '14';
- VK_F: result := '15';
- VK_CONSOLE: result := 'CON';
- VK_STATUS: result := 'STAT';
- VK_TEAM: result := 'TEAM';
- VK_PREV: result := ' 0) and (key < e_MaxInputKeys) then
- result := e_KeyNames[key]
- else
- result := '<' + IntToStr(key) + '>'
- end
- end;
-
- function IntersectControl(ctl, xx, yy: Integer): Boolean;
- var
- x, y, w, h: Integer;
- founded: Boolean;
- begin
- GetKeyRect(ctl, x, y, w, h, founded);
- result := founded and (xx >= x) and (yy >= y) and (xx <= x + w) and (yy <= y + h);
- end;
-
- procedure g_Touch_Init;
- begin
-{$IFNDEF HEADLESS}
- g_Touch_ShowKeyboard(FALSE);
- g_touch_enabled := SDL_GetNumTouchDevices() > 0
-{$ENDIF}
- end;
-
- procedure g_Touch_ShowKeyboard(yes: Boolean);
+ procedure r_Touch_Draw;
+ var i, x, y, w, h: Integer; founded: Boolean;
begin
-{$IFNDEF HEADLESS}
- if g_dbg_input then
- e_LogWritefln('g_Touch_ShowKeyboard(%s)', [yes]);
- (* on desktop we always receive text (needed for cheats) *)
- if yes or (SDL_HasScreenKeyboardSupport() = SDL_FALSE) then
- SDL_StartTextInput
- else
- SDL_StopTextInput
-{$ENDIF}
- end;
-
- procedure g_Touch_HandleEvent(const ev: TSDL_TouchFingerEvent);
- var
- x, y, i, finger: Integer;
-
- procedure KeyUp (finger, i: Integer);
- begin
- if g_dbg_input then
- e_LogWritefln('Input Debug: g_touch.KeyUp, finger=%s, key=%s', [finger, i]);
-
- keyFinger[i] := 0;
- e_KeyUpDown(i, False);
- g_Console_ProcessBind(i, False);
-
- (* up/down + fire hack *)
-{$IFDEF ENABLE_MENU}
- if g_touch_fire and (gGameSettings.GameType <> GT_NONE) and (g_ActiveWindow = nil) and angleFire then
-{$ELSE}
- if g_touch_fire and (gGameSettings.GameType <> GT_NONE) and angleFire then
-{$ENDIF}
- begin
- if (i = VK_UP) or (i = VK_DOWN) then
- begin
- angleFire := False;
- keyFinger[VK_FIRE] := 0;
- e_KeyUpDown(VK_FIRE, False);
- g_Console_ProcessBind(VK_FIRE, False)
- end
- end
- end;
-
- procedure KeyDown (finger, i: Integer);
+ if g_touch_enabled then
begin
- if g_dbg_input then
- e_LogWritefln('Input Debug: g_touch.KeyDown, finger=%s, key=%s', [finger, i]);
-
- keyFinger[i] := finger;
- e_KeyUpDown(i, True);
- g_Console_ProcessBind(i, True);
-
- (* up/down + fire hack *)
-{$IFDEF ENABLE_MENU}
- if g_touch_fire and (gGameSettings.GameType <> GT_NONE) and (g_ActiveWindow = nil) then
-{$ELSE}
- if g_touch_fire and (gGameSettings.GameType <> GT_NONE) then
-{$ENDIF}
+ for i := VK_FIRSTKEY to VK_LASTKEY do
begin
- if i = VK_UP then
+ r_Touch_GetKeyRect(i, x, y, w, h, founded);
+ if founded then
begin
- angleFire := True;
- keyFinger[VK_FIRE] := -1;
- e_KeyUpDown(VK_FIRE, True);
- g_Console_ProcessBind(VK_FIRE, True)
+ e_DrawQuad(x, y, x + w, y + h, 0, 255, 0, 31);
+ e_TextureFontPrintEx(x, y, GetKeyName(i), gStdFont, 255, 255, 255, 1, True)
end
- else if i = VK_DOWN then
- begin
- angleFire := True;
- keyFinger[VK_FIRE] := -1;
- e_KeyUpDown(VK_FIRE, True);
- g_Console_ProcessBind(VK_FIRE, True)
- end
- end
- end;
-
- procedure KeyMotion (finger, i: Integer);
- begin
- if keyFinger[i] <> finger then
- begin
- KeyUp(finger, i);
- KeyDown(finger, i)
- end
- end;
-
- begin
- if not g_touch_enabled then
- Exit;
-
- finger := ev.fingerId + 2;
- x := Trunc(ev.x * gWinSizeX);
- y := Trunc(ev.y * gWinSizeY);
-
- for i := VK_FIRSTKEY to VK_LASTKEY do
- begin
- if IntersectControl(i, x, y) then
- begin
- if ev.type_ = SDL_FINGERUP then
- KeyUp(finger, i)
- else if ev.type_ = SDL_FINGERMOTION then
- KeyMotion(finger, i)
- else if ev.type_ = SDL_FINGERDOWN then
- keyDown(finger, i)
- end
- else if keyFinger[i] = finger then
- begin
- if ev.type_ = SDL_FINGERUP then
- KeyUp(finger, i)
- else if ev.type_ = SDL_FINGERMOTION then
- KeyUp(finger, i)
- end
- end
- end;
-
- procedure g_Touch_Draw;
- var i, x, y, w, h: Integer; founded: Boolean;
- begin
-{$IFNDEF HEADLESS}
- if not g_touch_enabled then
- Exit;
-
- for i := VK_FIRSTKEY to VK_LASTKEY do
- begin
- GetKeyRect(i, x, y, w, h, founded);
- if founded then
- begin
- e_DrawQuad(x, y, x + w, y + h, 0, 255, 0, 31);
- e_TextureFontPrintEx(x, y, GetKeyName(i), gStdFont, 255, 255, 255, 1, True)
end
end
-{$ENDIF}
end;
-initialization
- conRegVar('touch_enable', @g_touch_enabled, 'enable/disable virtual buttons', 'draw buttons');
- conRegVar('touch_fire', @g_touch_fire, 'enable/disable fire when press virtual up/down', 'fire when press up/down');
- conRegVar('touch_size', @g_touch_size, 0.1, 10, 'size of virtual buttons', 'button size');
- conRegVar('touch_offset', @g_touch_offset, 0, 100, '', '');
- conRegVar('touch_alt', @g_touch_alt, 'althernative virtual buttons layout', 'althernative layout');
end.