diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index 7bb1a8c7377a5e8f6ef2ad72e23fb856149f6ecd..11170326ca66b02c8f09a200297df5e7e6263e86 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
gChatTeam: Boolean = false;
gAllowConsoleMessages: Boolean = true;
gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó
gChatTeam: Boolean = false;
gAllowConsoleMessages: Boolean = true;
gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó
- gParsingBinds: Boolean = false; // íå ïåðåñîõðàíÿòü êîíôèã âî âðåìÿ ïàðñèíãà
+ gParsingBinds: Boolean = true; // íå ïåðåñîõðàíÿòü êîíôèã âî âðåìÿ ïàðñèíãà
gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action]
implementation
gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action]
implementation
RecursionDepth: Word = 0;
RecursionLimitHit: Boolean = False;
Cons_Y: SmallInt;
RecursionDepth: Word = 0;
RecursionLimitHit: Boolean = False;
Cons_Y: SmallInt;
+ ConsoleHeight: Single;
Cons_Shown: Boolean; // Ðèñîâàòü ëè êîíñîëü?
Line: AnsiString;
CPos: Word;
Cons_Shown: Boolean; // Ðèñîâàòü ëè êîíñîëü?
Line: AnsiString;
CPos: Word;
down, up: SSArray;
end;
menu_toggled: BOOLEAN; (* hack for menu controls *)
down, up: SSArray;
end;
menu_toggled: BOOLEAN; (* hack for menu controls *)
- gSkipFirstChar: Boolean; (* hack for console/chat input *)
procedure g_Console_Switch;
begin
procedure g_Console_Switch;
begin
+ if gConsoleShow or Cons_Shown or gChatShow then
+ g_Touch_ShowKeyboard(False);
gChatShow := False;
gConsoleShow := not gConsoleShow;
Cons_Shown := True;
gChatShow := False;
gConsoleShow := not gConsoleShow;
Cons_Shown := True;
- g_Touch_ShowKeyboard(gConsoleShow or gChatShow);
end;
procedure g_Console_Chat_Switch (Team: Boolean = False);
begin
end;
procedure g_Console_Chat_Switch (Team: Boolean = False);
begin
+ if gConsoleShow or Cons_Shown or gChatShow then
+ g_Touch_ShowKeyboard(False);
if not g_Game_IsNet then Exit;
gConsoleShow := False;
gChatShow := not gChatShow;
gChatTeam := Team;
if not g_Game_IsNet then Exit;
gConsoleShow := False;
gChatShow := not gChatShow;
gChatTeam := Team;
+ Cons_Shown := True;
Line := '';
CPos := 1;
Line := '';
CPos := 1;
- g_Touch_ShowKeyboard(gConsoleShow or gChatShow);
end;
// poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks
end;
// poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks
'hidekeyboard':
g_Touch_ShowKeyboard(False);
'togglemenu':
'hidekeyboard':
g_Touch_ShowKeyboard(False);
'togglemenu':
- if gConsoleShow then
- begin
- g_Console_Switch;
- menu_toggled := True
- end
- else
begin
begin
- KeyPress(VK_ESCAPE);
+ if gConsoleShow then
+ g_Console_Switch
+ else if gChatShow then
+ g_Console_Chat_Switch
+ else
+ KeyPress(VK_ESCAPE);
menu_toggled := True
end;
'toggleconsole':
menu_toggled := True
end;
'toggleconsole':
- begin
- g_Console_Switch;
- gSkipFirstChar := g_Console_Interactive();
- end;
+ g_Console_Switch;
'togglechat':
'togglechat':
- begin
- if not gConsoleShow and (g_ActiveWindow = nil) then
- g_Console_Chat_Switch;
- gSkipFirstChar := not g_Console_Interactive()
- end;
+ if not gConsoleShow and (g_ActiveWindow = nil) then
+ g_Console_Chat_Switch;
'toggleteamchat':
if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
'toggleteamchat':
if gGameSettings.GameMode in [GM_TDM, GM_CTF] then
- begin
if not gConsoleShow and (g_ActiveWindow = nil) then
g_Console_Chat_Switch(True);
if not gConsoleShow and (g_ActiveWindow = nil) then
g_Console_Chat_Switch(True);
- gSkipFirstChar := not g_Console_Interactive()
- end;
end
end;
end
end;
a: Integer;
begin
g_Texture_CreateWAD(ID, GameWAD+':TEXTURES\CONSOLE');
a: Integer;
begin
g_Texture_CreateWAD(ID, GameWAD+':TEXTURES\CONSOLE');
- Cons_Y := -(gScreenHeight div 2);
+ Cons_Y := -Floor(gScreenHeight * ConsoleHeight);
gConsoleShow := False;
gChatShow := False;
Cons_Shown := False;
gConsoleShow := False;
gChatShow := False;
Cons_Shown := False;
WhitelistCommand('g_scorelimit');
WhitelistCommand('g_timelimit');
WhitelistCommand('g_scorelimit');
WhitelistCommand('g_timelimit');
- gParsingBinds := True;
g_Console_ResetBinds;
g_Console_ReadConfig(GameDir + '/dfconfig.cfg');
g_Console_ReadConfig(GameDir + '/autoexec.cfg');
g_Console_ResetBinds;
g_Console_ReadConfig(GameDir + '/dfconfig.cfg');
g_Console_ReadConfig(GameDir + '/autoexec.cfg');
begin
// Â ïðîöåññå îòêðûòèÿ:
if gConsoleShow and (Cons_Y < 0) then
begin
// Â ïðîöåññå îòêðûòèÿ:
if gConsoleShow and (Cons_Y < 0) then
- begin
Cons_Y := Cons_Y+Step;
Cons_Y := Cons_Y+Step;
- end;
// Â ïðîöåññå çàêðûòèÿ:
// Â ïðîöåññå çàêðûòèÿ:
- if (not gConsoleShow) and
- (Cons_Y > -(gScreenHeight div 2)) then
+ if (not gConsoleShow) and (Cons_Y > -Floor(gScreenHeight * ConsoleHeight)) then
Cons_Y := Cons_Y-Step;
Cons_Y := Cons_Y-Step;
+ // Open chat
+ if gChatShow then
+ begin
+ Cons_Y := -Floor(gScreenHeight * ConsoleHeight);
+ Cons_Shown := False;
+ g_Touch_ShowKeyboard(True);
+ end;
+
// Îêîí÷àòåëüíî îòêðûëàñü:
if Cons_Y > 0 then
// Îêîí÷àòåëüíî îòêðûëàñü:
if Cons_Y > 0 then
+ begin
Cons_Y := 0;
Cons_Y := 0;
+ g_Touch_ShowKeyboard(True);
+ end;
// Îêîí÷àòåëüíî çàêðûëàñü:
// Îêîí÷àòåëüíî çàêðûëàñü:
- if Cons_Y <= (-(gScreenHeight div 2)) then
+ if Cons_Y <= -Floor(gScreenHeight * ConsoleHeight) then
begin
begin
- Cons_Y := -(gScreenHeight div 2);
+ Cons_Y := -Floor(gScreenHeight * ConsoleHeight);
Cons_Shown := False;
end;
end;
Cons_Shown := False;
end;
end;
begin
e_TextureFontGetSize(gStdFont, CWidth, CHeight);
begin
e_TextureFontGetSize(gStdFont, CWidth, CHeight);
- ty := (gScreenHeight div 2)-4-2*CHeight-Abs(Cons_Y);
+ ty := Floor(gScreenHeight * ConsoleHeight) - 4 - 2 * CHeight - Abs(Cons_Y);
skip := conSkipLines;
cbufLastLine(sp, ep);
repeat
skip := conSkipLines;
cbufLastLine(sp, ep);
repeat
begin
e_CharFont_GetSize(gMenuFont, DEBUG_STRING, mfW, mfH);
a := (gScreenWidth - 2*mfW) div 2;
begin
e_CharFont_GetSize(gMenuFont, DEBUG_STRING, mfW, mfH);
a := (gScreenWidth - 2*mfW) div 2;
- b := Cons_Y + ((gScreenHeight div 2) - 2*mfH) div 2;
+ b := Cons_Y + (Floor(gScreenHeight * ConsoleHeight) - 2 * mfH) div 2;
e_CharFont_PrintEx(gMenuFont, a div 2, b div 2, DEBUG_STRING,
_RGB(128, 0, 0), 2.0);
end;
e_CharFont_PrintEx(gMenuFont, a div 2, b div 2, DEBUG_STRING,
_RGB(128, 0, 0), 2.0);
end;
- e_DrawSize(ID, 0, Cons_Y, Alpha, False, False, gScreenWidth, gScreenHeight div 2);
- e_TextureFontPrint(0, Cons_Y+(gScreenHeight div 2)-CHeight-4, '> '+Line, gStdFont);
+ e_DrawSize(ID, 0, Cons_Y, Alpha, False, False, gScreenWidth, Floor(gScreenHeight * ConsoleHeight));
+ e_TextureFontPrint(0, Cons_Y + Floor(gScreenHeight * ConsoleHeight) - CHeight - 4, '> ' + Line, gStdFont);
drawConsoleText();
(*
drawConsoleText();
(*
begin
b := 0;
if CHeight > 0 then
begin
b := 0;
if CHeight > 0 then
- if Length(ConsoleHistory) > ((gScreenHeight div 2) div CHeight)-1 then
- b := Length(ConsoleHistory)-((gScreenHeight div 2) div CHeight)+1;
+ if Length(ConsoleHistory) > (Floor(gScreenHeight * ConsoleHeight) div CHeight) - 1 then
+ b := Length(ConsoleHistory) - (Floor(gScreenHeight * ConsoleHeight) div CHeight) + 1;
b := Max(b-Offset, 0);
d := Max(High(ConsoleHistory)-Offset, 0);
b := Max(b-Offset, 0);
d := Max(High(ConsoleHistory)-Offset, 0);
c := 2;
for a := d downto b do
begin
c := 2;
for a := d downto b do
begin
- e_TextureFontPrintFmt(0, (gScreenHeight div 2)-4-c*CHeight-Abs(Cons_Y), ConsoleHistory[a],
- gStdFont, True);
+ e_TextureFontPrintFmt(0, Floor(gScreenHeight * ConsoleHeight) - 4 - c * CHeight - Abs(Cons_Y), ConsoleHistory[a], gStdFont, True);
c := c + 1;
end;
end;
*)
c := c + 1;
end;
end;
*)
- e_TextureFontPrint((CPos+1)*CWidth, Cons_Y+(gScreenHeight div 2)-21, '_', gStdFont);
+ e_TextureFontPrint((CPos + 1) * CWidth, Cons_Y + Floor(gScreenHeight * ConsoleHeight) - 21, '_', gStdFont);
end;
procedure g_Console_Char(C: AnsiChar);
begin
end;
procedure g_Console_Char(C: AnsiChar);
begin
- if not gSkipFirstChar then
- begin
- Insert(C, Line, CPos);
- CPos := CPos + 1;
- end;
- gSkipFirstChar := False
+ Insert(C, Line, CPos);
+ CPos := CPos + 1;
end;
end;
CPos := CPos + 1;
IK_RETURN, IK_KPRETURN, VK_OPEN, VK_FIRE, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK:
begin
CPos := CPos + 1;
IK_RETURN, IK_KPRETURN, VK_OPEN, VK_FIRE, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK:
begin
- if Cons_Shown then
+ if gConsoleShow then
g_Console_Process(Line)
else
if gChatShow then
g_Console_Process(Line)
else
if gChatShow then
Line := '';
CPos := 1;
Line := '';
CPos := 1;
- gChatShow := False;
gJustChatted := True;
gJustChatted := True;
- g_Touch_ShowKeyboard(gConsoleShow or gChatShow);
+ g_Console_Chat_Switch
end;
end;
IK_TAB:
end;
end;
IK_TAB:
IK_SEMICOLON, IK_QUOTE, IK_BACKSLASH, IK_SLASH, IK_COMMA, IK_DOT, IK_EQUALS,
IK_0, IK_1, IK_2, IK_3, IK_4, IK_5, IK_6, IK_7, IK_8, IK_9, IK_MINUS, IK_EQUALS:
(* see TEXTINPUT event *)
IK_SEMICOLON, IK_QUOTE, IK_BACKSLASH, IK_SLASH, IK_COMMA, IK_DOT, IK_EQUALS,
IK_0, IK_1, IK_2, IK_3, IK_4, IK_5, IK_6, IK_7, IK_8, IK_9, IK_MINUS, IK_EQUALS:
(* see TEXTINPUT event *)
- else
- if not gSkipFirstChar then
- begin
- if gConsoleShow and g_Console_MatchBind(K, 'toggleconsole') then
- g_Console_Switch;
-
- if g_Console_MatchBind(K, 'togglemenu') then
- begin
- menu_toggled := True;
- if gChatShow then
- g_Console_Chat_Switch
- else if gConsoleShow then
- g_Console_Switch
- end
- end
end
end;
end
end;
Result := i < len
end;
Result := i < len
end;
+function BindsAllowed (key: Integer): Boolean;
+begin
+ Result := False;
+ if (not g_GUIGrabInput) and (key >= 0) and (key < e_MaxInputKeys) and ((gInputBinds[key].down <> nil) or (gInputBinds[key].up <> nil)) then
+ begin
+ if gChatShow then
+ Result := g_Console_MatchBind(key, 'togglemenu') or
+ g_Console_MatchBind(key, 'showkeyboard') or
+ g_Console_MatchBind(key, 'hidekeyboard')
+ else if (gGameSettings.GameType <> GT_NONE) and not gConsoleShow then
+ Result := True
+ else (* if CONSOLE or MENU then *)
+ Result := g_Console_MatchBind(key, 'togglemenu') or
+ g_Console_MatchBind(key, 'toggleconsole') or
+ g_Console_MatchBind(key, 'showkeyboard') or
+ g_Console_MatchBind(key, 'hidekeyboard')
+ end
+end;
+
procedure g_Console_ProcessBind (key: Integer; down: Boolean);
var i: Integer;
begin
procedure g_Console_ProcessBind (key: Integer; down: Boolean);
var i: Integer;
begin
- if (not g_GUIGrabInput) and (key >= 0) and (key < e_MaxInputKeys) and ((gInputBinds[key].down <> nil) or (gInputBinds[key].up <> nil)) then
+ if BindsAllowed(key) then
begin
if down then
begin
if down then
- begin
- if not gChatShow then
- for i := 0 to High(gInputBinds[key].down) do
- g_Console_Process(gInputBinds[key].down[i], True);
- end
+ for i := 0 to High(gInputBinds[key].down) do
+ g_Console_Process(gInputBinds[key].down[i], True)
else
for i := 0 to High(gInputBinds[key].up) do
g_Console_Process(gInputBinds[key].up[i], True)
else
for i := 0 to High(gInputBinds[key].up) do
g_Console_Process(gInputBinds[key].up[i], True)
if (Length(gInputBinds[i].down) > 0) or (Length(gInputBinds[i].up) > 0) then
begin
Write(f, 'bind ', e_KeyNames[i], ' ', QuoteStr(GetCommandString(gInputBinds[i].down)));
if (Length(gInputBinds[i].down) > 0) or (Length(gInputBinds[i].up) > 0) then
begin
Write(f, 'bind ', e_KeyNames[i], ' ', QuoteStr(GetCommandString(gInputBinds[i].down)));
+ if Length(gInputBinds[i].down) = 0 then
+ Write(f, '""');
if Length(gInputBinds[i].up) > 0 then
Write(f, ' ', QuoteStr(GetCommandString(gInputBinds[i].up)));
WriteLn(f, '');
if Length(gInputBinds[i].up) > 0 then
Write(f, ' ', QuoteStr(GetCommandString(gInputBinds[i].up)));
WriteLn(f, '');
g_Console_WriteConfig(GameDir + '/dfconfig.cfg');
end;
g_Console_WriteConfig(GameDir + '/dfconfig.cfg');
end;
+initialization
+ conRegVar('console_height', @ConsoleHeight, 0.0, 1.0, 'set console size', 'set console size');
+{$IFDEF ANDROID}
+ ConsoleHeight := 0.35
+{$ELSE}
+ ConsoleHeight := 0.5
+{$ENDIF}
end.
end.