X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=8b25d01e0903c6313fffdca6f7a2d6af9a2f8f7e;hb=dfdeb17c6cae4834cab6969259ccbe75e2049798;hp=3f3fd8ec2c998132439d1c30cfc78e3a35b701e7;hpb=20a86a003d2ae73c3268b114e1f4a95e17ea3670;p=d2df-sdl.git diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 3f3fd8e..8b25d01 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -129,6 +129,7 @@ var Cons_Y: SmallInt; ConsoleHeight: Single; Cons_Shown: Boolean; // Ðèñîâàòü ëè êîíñîëü? + InputReady: Boolean; Line: AnsiString; CPos: Word; //ConsoleHistory: SSArray; @@ -152,24 +153,32 @@ var procedure g_Console_Switch; begin - if gConsoleShow or Cons_Shown or gChatShow then - g_Touch_ShowKeyboard(False); + if gConsoleShow then + Cons_Y := Max(Cons_Y, -Floor(gScreenHeight * ConsoleHeight)) + else + Cons_Y := Min(Cons_Y, -Floor(gScreenHeight * ConsoleHeight)); gChatShow := False; gConsoleShow := not gConsoleShow; Cons_Shown := True; + InputReady := False; + g_Touch_ShowKeyboard(gConsoleShow or gChatShow); 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; + if gConsoleShow then + Cons_Y := Max(Cons_Y, -Floor(gScreenHeight * ConsoleHeight)) + else + Cons_Y := Min(Cons_Y, -Floor(gScreenHeight * ConsoleHeight)); gConsoleShow := False; gChatShow := not gChatShow; gChatTeam := Team; Cons_Shown := True; + InputReady := False; Line := ''; CPos := 1; + g_Touch_ShowKeyboard(gConsoleShow or gChatShow); end; // poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks @@ -723,12 +732,10 @@ begin 'toggleconsole': g_Console_Switch; 'togglechat': - if not gConsoleShow and (g_ActiveWindow = nil) then - g_Console_Chat_Switch; + g_Console_Chat_Switch; 'toggleteamchat': if gGameSettings.GameMode in [GM_TDM, GM_CTF] then - if not gConsoleShow and (g_ActiveWindow = nil) then - g_Console_Chat_Switch(True); + g_Console_Chat_Switch(True); end end; @@ -797,6 +804,7 @@ begin gConsoleShow := False; gChatShow := False; Cons_Shown := False; + InputReady := False; CPos := 1; for a := 0 to High(MsgArray) do @@ -986,35 +994,26 @@ var begin if Cons_Shown then begin - //  ïðîöåññå îòêðûòèÿ: - if gConsoleShow and (Cons_Y < 0) then - Cons_Y := Cons_Y+Step; - - //  ïðîöåññå çàêðûòèÿ: - if (not gConsoleShow) and (Cons_Y > -Floor(gScreenHeight * ConsoleHeight)) then - Cons_Y := Cons_Y-Step; - - // Open chat - if gChatShow then + if gConsoleShow then begin - Cons_Y := -Floor(gScreenHeight * ConsoleHeight); - Cons_Shown := False; - g_Touch_ShowKeyboard(True); - end; - - // Îêîí÷àòåëüíî îòêðûëàñü: - if Cons_Y > 0 then + (* Open animation *) + Cons_Y := Min(Cons_Y + Step, 0); + if Cons_Y >= 0 then + InputReady := True + end + else begin - Cons_Y := 0; - g_Touch_ShowKeyboard(True); + (* Close animation *) + Cons_Y := Max(Cons_Y - Step, -Floor(gScreenHeight * ConsoleHeight)); + if Cons_Y <= -Floor(gScreenHeight * ConsoleHeight) then + begin + Cons_Shown := False; + InputReady := False + end end; - // Îêîí÷àòåëüíî çàêðûëàñü: - if Cons_Y <= -Floor(gScreenHeight * ConsoleHeight) then - begin - Cons_Y := -Floor(gScreenHeight * ConsoleHeight); - Cons_Shown := False; - end; + if gChatShow then + InputReady := True end; a := 0; @@ -1115,28 +1114,27 @@ begin if MsgArray[a].Time > 0 then e_TextureFontPrintFmt(0, offset_y + CHeight * a, MsgArray[a].Msg, gStdFont, True); - if not Cons_Shown then + if gChatShow then begin - if gChatShow then + if ChatTop then + offset_y := 0 + else + offset_y := gScreenHeight - CHeight - 1; + if gChatTeam then begin - if ChatTop then - offset_y := 0 - else - offset_y := gScreenHeight - CHeight - 1; - if gChatTeam then - begin - e_TextureFontPrintEx(0, offset_y, 'say team> ' + Line, gStdFont, 255, 255, 255, 1, True); - e_TextureFontPrintEx((CPos + 9) * CWidth, offset_y, '_', gStdFont, 255, 255, 255, 1, True); - end - else - begin - e_TextureFontPrintEx(0, offset_y, 'say> ' + Line, gStdFont, 255, 255, 255, 1, True); - e_TextureFontPrintEx((CPos + 4) * CWidth, offset_y, '_', gStdFont, 255, 255, 255, 1, True); - end - end; - Exit; + e_TextureFontPrintEx(0, offset_y, 'say team> ' + Line, gStdFont, 255, 255, 255, 1, True); + e_TextureFontPrintEx((CPos + 9) * CWidth, offset_y, '_', gStdFont, 255, 255, 255, 1, True); + end + else + begin + e_TextureFontPrintEx(0, offset_y, 'say> ' + Line, gStdFont, 255, 255, 255, 1, True); + e_TextureFontPrintEx((CPos + 4) * CWidth, offset_y, '_', gStdFont, 255, 255, 255, 1, True); + end end; + if not Cons_Shown then + Exit; + if gDebugMode then begin e_CharFont_GetSize(gMenuFont, DEBUG_STRING, mfW, mfH); @@ -1175,8 +1173,11 @@ end; procedure g_Console_Char(C: AnsiChar); begin - Insert(C, Line, CPos); - CPos := CPos + 1; + if InputReady and (gConsoleShow or gChatShow) then + begin + Insert(C, Line, CPos); + CPos := CPos + 1; + end end; @@ -1344,7 +1345,8 @@ begin Line := ''; CPos := 1; gJustChatted := True; - g_Console_Chat_Switch + g_Console_Chat_Switch; + InputReady := False; end; end; IK_TAB: