X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=6757bfc51e5bd72f0bc99f7d4f878c7aa31e19b8;hb=4f08d1293d9a8d5814ec24b45be088d04247f5c8;hp=ecc6677e9d30b0b97ecffbc8e9a378d40520b011;hpb=935ed9a1e12d78a0c4ef4a9e9f9bf858fd2c2b56;p=d2df-sdl.git diff --git a/src/game/g_console.pas b/src/game/g_console.pas index ecc6677..6757bfc 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -22,60 +22,51 @@ uses utils; // for SSArray const - ACTION_MOVEUP = 1; - ACTION_MOVEDOWN = 2; - ACTION_MOVELEFT = 3; - ACTION_MOVERIGHT = 4; - ACTION_SPEED = 5; + ACTION_JUMP = 0; + ACTION_MOVELEFT = 1; + ACTION_MOVERIGHT = 2; + ACTION_LOOKDOWN = 3; + ACTION_LOOKUP = 4; + ACTION_ATTACK = 5; ACTION_SCORES = 6; - ACTION_LOOKDOWN = 7; - ACTION_LOOKUP = 8; - ACTION_ATTACK = 9; - ACTION_ACTIVATE = 10; - ACTION_STRAFE = 11; - ACTION_WEAPNEXT = 12; - ACTION_WEAPPREV = 13; - ACTION_WEAP1 = 14; - ACTION_WEAP2 = 15; - ACTION_WEAP3 = 16; - ACTION_WEAP4 = 17; - ACTION_WEAP5 = 18; - ACTION_WEAP6 = 19; - ACTION_WEAP7 = 20; - ACTION_WEAP8 = 21; - ACTION_WEAP9 = 22; - ACTION_WEAP10 = 23; - ACTION_WEAP11 = 24; - - LAST_ACTION = ACTION_WEAP11; - MAX_ACTION_WEAP = ACTION_WEAP11 - ACTION_WEAP1 + 1; - -procedure g_Console_Init (); -procedure g_Console_Update (); -procedure g_Console_Draw (); -procedure g_Console_Switch (); + ACTION_ACTIVATE = 7; + ACTION_STRAFE = 8; + ACTION_WEAPNEXT = 9; + ACTION_WEAPPREV = 10; + + FIRST_ACTION = ACTION_JUMP; + LAST_ACTION = ACTION_WEAPPREV; + +procedure g_Console_Init; +procedure g_Console_Update; +procedure g_Console_Draw; procedure g_Console_Char (C: AnsiChar); procedure g_Console_Control (K: Word); procedure g_Console_Process (L: AnsiString; quiet: Boolean=false); procedure g_Console_Add (L: AnsiString; show: Boolean=false); -procedure g_Console_Clear (); +procedure g_Console_Clear; function g_Console_CommandBlacklisted (C: AnsiString): Boolean; procedure g_Console_ReadConfig (filename: String); +procedure g_Console_WriteConfig (filename: String); +function g_Console_Interactive: Boolean; +function g_Console_Action (action: Integer): Boolean; +function g_Console_MatchBind (key: Integer; down: AnsiString; up: AnsiString = ''): Boolean; +function g_Console_FindBind (n: Integer; down: AnsiString; up: AnsiString = ''): Integer; +procedure g_Console_BindKey (key: Integer; down: AnsiString; up: AnsiString = ''); procedure g_Console_ProcessBind (key: Integer; down: Boolean); +procedure g_Console_ResetBinds; procedure conwriteln (const s: AnsiString; show: Boolean=false); procedure conwritefln (const s: AnsiString; args: array of const; show: Boolean=false); -// <0: no arg; 0/1: true/false -function conGetBoolArg (p: SSArray; idx: Integer): Integer; - -procedure g_Console_Chat_Switch (team: Boolean=false); - procedure conRegVar (const conname: AnsiString; pvar: PBoolean; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload; procedure conRegVar (const conname: AnsiString; pvar: PSingle; amin, amax: Single; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload; procedure conRegVar (const conname: AnsiString; pvar: PInteger; const ahelp: AnsiString; const amsg: AnsiString; acheat: Boolean=false; ahidden: Boolean=false); overload; +// <0: no arg; 0/1: true/false +function conGetBoolArg (p: SSArray; idx: Integer): Integer; + // poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks function conParseFloat (var res: Single; const s: AnsiString): Boolean; @@ -85,7 +76,6 @@ var gChatShow: Boolean = false; gChatTeam: Boolean = false; gAllowConsoleMessages: Boolean = true; - gChatEnter: Boolean = true; gJustChatted: Boolean = false; // ÷òîáû àäìèí â èíòåðå ÷àòÿñü íå ïðîìàòûâàë ñòàòèñòèêó gPlayerAction: Array [0..1, 0..LAST_ACTION] of Boolean; // [player, action] @@ -94,7 +84,7 @@ implementation uses g_textures, g_main, e_graphics, e_input, g_game, SysUtils, g_basic, g_options, Math, g_touch, - g_menu, g_language, g_net, g_netmsg, e_log, conbuf; + g_menu, g_gui, g_language, g_net, g_netmsg, e_log, conbuf; type @@ -112,6 +102,8 @@ type ptr: Pointer; // various data msg: AnsiString; // message for var changes cheat: Boolean; + action: Integer; // >= 0 for action commands + player: Integer; // used for action commands end; TAlias = record @@ -147,11 +139,32 @@ var Msg: AnsiString; Time: Word; end; + gInputBinds: Array [0..e_MaxInputKeys - 1] of record - cmd: AnsiString + down, up: SSArray; end; - bindDown, bindProcess: Boolean; + menu_toggled: BOOLEAN; (* hack for menu controls *) + gSkipFirstChar: Boolean; (* hack for console/chat input *) + + +procedure g_Console_Switch; +begin + gChatShow := False; + gConsoleShow := not gConsoleShow; + Cons_Shown := True; + g_Touch_ShowKeyboard(gConsoleShow or gChatShow); +end; +procedure g_Console_Chat_Switch (Team: Boolean = False); +begin + if not g_Game_IsNet then Exit; + gConsoleShow := False; + gChatShow := not gChatShow; + gChatTeam := Team; + Line := ''; + CPos := 1; + g_Touch_ShowKeyboard(gConsoleShow or gChatShow); +end; // poor man's floating literal parser; i'm sorry, but `StrToFloat()` sux cocks function conParseFloat (var res: Single; const s: AnsiString): Boolean; @@ -280,6 +293,8 @@ begin cp.ptr := pvar; cp.msg := amsg; cp.cheat := acheat; + cp.action := -1; + cp.player := -1; end; @@ -299,6 +314,8 @@ begin cp.ptr := pvar; cp.msg := amsg; cp.cheat := acheat; + cp.action := -1; + cp.player := -1; end; @@ -372,6 +389,8 @@ begin cp.ptr := pv; cp.msg := amsg; cp.cheat := acheat; + cp.action := -1; + cp.player := -1; end; @@ -514,14 +533,20 @@ begin begin // exec if Length(p) = 2 then - begin - s := GameDir + '/' + p[1]; - g_Console_ReadConfig(s); - end + g_Console_ReadConfig(GameDir + '/' + p[1]) else g_Console_Add('exec