X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=033a46827d5a3312a6b062fa335d37446edc5038;hp=11170326ca66b02c8f09a200297df5e7e6263e86;hb=6a9364772aa1d92cf10886b5d1cec54d557bcada;hpb=5eaf38a53865288793931062dedeedc497075144 diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 1117032..033a468 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; @@ -147,28 +148,29 @@ var down, up: SSArray; end; menu_toggled: BOOLEAN; (* hack for menu controls *) + ChatTop: BOOLEAN; 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; + 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; 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 @@ -796,6 +798,7 @@ begin gConsoleShow := False; gChatShow := False; Cons_Shown := False; + InputReady := False; CPos := 1; for a := 0 to High(MsgArray) do @@ -985,34 +988,36 @@ var begin if Cons_Shown then begin - //  ïðîöåññå îòêðûòèÿ: + (* Open animation *) if gConsoleShow and (Cons_Y < 0) then Cons_Y := Cons_Y+Step; - //  ïðîöåññå çàêðûòèÿ: + (* Colse animation *) if (not gConsoleShow) and (Cons_Y > -Floor(gScreenHeight * ConsoleHeight)) then Cons_Y := Cons_Y-Step; - // Open chat if gChatShow then begin + (* End open chat animation. Do not show console *) Cons_Y := -Floor(gScreenHeight * ConsoleHeight); Cons_Shown := False; - g_Touch_ShowKeyboard(True); - end; - - // Îêîí÷àòåëüíî îòêðûëàñü: - if Cons_Y > 0 then + InputReady := True; + end + else + if Cons_Y >= 0 then begin + (* End open animation *) Cons_Y := 0; - g_Touch_ShowKeyboard(True); - end; - - // Îêîí÷àòåëüíî çàêðûëàñü: + Cons_Shown := True; + InputReady := True; + end + else if Cons_Y <= -Floor(gScreenHeight * ConsoleHeight) then begin + (* End close animation *) Cons_Y := -Floor(gScreenHeight * ConsoleHeight); Cons_Shown := False; + InputReady := False; end; end; @@ -1101,37 +1106,40 @@ procedure g_Console_Draw(); var CWidth, CHeight: Byte; mfW, mfH: Word; - a, b: Integer; + a, b, offset_y: Integer; begin e_TextureFontGetSize(gStdFont, CWidth, CHeight); + if ChatTop and gChatShow then + offset_y := CHeight + else + offset_y := 0; + for a := 0 to High(MsgArray) do if MsgArray[a].Time > 0 then - e_TextureFontPrintFmt(0, CHeight*a, MsgArray[a].Msg, - gStdFont, True); + 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 gChatTeam then - begin - e_TextureFontPrintEx(0, gScreenHeight - CHeight - 1, 'say team> ' + Line, - gStdFont, 255, 255, 255, 1, True); - e_TextureFontPrintEx((CPos + 9)*CWidth, gScreenHeight - CHeight - 1, '_', - gStdFont, 255, 255, 255, 1, True); - end - else - begin - e_TextureFontPrintEx(0, gScreenHeight - CHeight - 1, 'say> ' + Line, - gStdFont, 255, 255, 255, 1, True); - e_TextureFontPrintEx((CPos + 4)*CWidth, gScreenHeight - CHeight - 1, '_', - 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); @@ -1170,8 +1178,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; @@ -1339,7 +1350,8 @@ begin Line := ''; CPos := 1; gJustChatted := True; - g_Console_Chat_Switch + g_Console_Chat_Switch; + InputReady := False; end; end; IK_TAB: @@ -1721,13 +1733,13 @@ begin 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 *) + else if gConsoleShow or (g_ActiveWindow <> nil) or (gGameSettings.GameType = GT_NONE) 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') + else (* in game *) + Result := True end end; @@ -1905,10 +1917,13 @@ begin end; initialization + conRegVar('chat_at_top', @ChatTop, 'draw chat at top border', 'draw chat at top border'); conRegVar('console_height', @ConsoleHeight, 0.0, 1.0, 'set console size', 'set console size'); {$IFDEF ANDROID} + ChatTop := True; ConsoleHeight := 0.35 {$ELSE} + ChatTop := False; ConsoleHeight := 0.5 {$ENDIF} end.