X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=f1b82c341a4f04d3e07c2184717cd89eee6defcb;hb=3fa8762396f68dff9cbdc9eff6109ded0060a89b;hp=e3cc3b3efbafbfef3b53aa8c06e8bbcf6cae4e78;hpb=84fa2f88d5d832ed9cc932fd2860d74467e242e1;p=d2df-sdl.git diff --git a/src/game/g_console.pas b/src/game/g_console.pas index e3cc3b3..f1b82c3 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -617,47 +617,50 @@ begin pp^ := 0; end; +function GetCommandString (p: SSArray): AnsiString; + var i: Integer; +begin + result := ''; + if Length(p) >= 1 then + begin + result := p[0]; + for i := 1 to High(p) do + result := result + '; ' + p[i] + end +end; + procedure BindCommands (p: SSArray); - var cmd, key, act: AnsiString; i, j: Integer; + var cmd, key: AnsiString; i: Integer; begin cmd := LowerCase(p[0]); case cmd of 'bind': - // bind [up] - if Length(p) >= 3 then + // bind [down [up]] + if (Length(p) >= 2) and (Length(p) <= 4) then begin i := 0; key := LowerCase(p[1]); - if Length(p) = 4 then act := p[3] else act := ''; while (i < e_MaxInputKeys) and (key <> LowerCase(e_KeyNames[i])) do inc(i); if i < e_MaxInputKeys then - g_Console_BindKey(i, p[2], act) + begin + if Length(p) = 2 then + g_Console_Add('"' + e_KeyNames[i] + '" = "' + GetCommandString(gInputBinds[i].down) + '" "' + GetCommandString(gInputBinds[i].up) + '"') + else if Length(p) = 3 then + g_Console_BindKey(i, p[2], '') + else (* len = 4 *) + g_Console_BindKey(i, p[2], p[3]) + end + else + g_Console_Add('bind: "' + p[1] + '" is not a key') end else - g_Console_Add('bind [up action]'); + begin + g_Console_Add('bind [up action]') + end; 'bindlist': for i := 0 to e_MaxInputKeys - 1 do - begin if (gInputBinds[i].down <> nil) or (gInputBinds[i].up <> nil) then - begin - act := e_KeyNames[i] + ' "'; - if (gInputBinds[i].down <> nil) then - begin - act := act + gInputBinds[i].down[0]; - for j := 1 to High(gInputBinds[i].down) - 1 do - act := act + '; ' + gInputBinds[i].down[j]; - end; - act := act + '" "'; - if (gInputBinds[i].up <> nil) then - begin - act := act + gInputBinds[i].up[0]; - for j := 1 to High(gInputBinds[i].up) do - act := act + '; ' + gInputBinds[i].up[j]; - end; - act := act + '"'; - g_Console_Add(act) - end - end; + g_Console_Add(e_KeyNames[i] + ' "' + GetCommandString(gInputBinds[i].down) + '" "' + GetCommandString(gInputBinds[i].up) + '"'); 'unbind': // unbind if Length(p) = 2 then @@ -667,6 +670,8 @@ begin while (i < e_MaxInputKeys) and (key <> LowerCase(e_KeyNames[i])) do inc(i); if i < e_MaxInputKeys then g_Console_BindKey(i, '') + else + g_Console_Add('unbind: "' + p[1] + '" is not a key') end else g_Console_Add('unbind '); @@ -1795,27 +1800,8 @@ begin WriteLn(f, '// generated by doom2d, do not modify'); WriteLn(f, 'unbindall'); for i := 0 to e_MaxInputKeys - 1 do - begin if (Length(gInputBinds[i].down) > 0) or (Length(gInputBinds[i].up) > 0) then - begin - Write(f, 'bind ', e_KeyNames[i], ' "'); - if Length(gInputBinds[i].down) > 0 then - begin - Write(f, gInputBinds[i].down[0]); - for j := 1 to High(gInputBinds[i].down) do - Write(f, '; ', gInputBinds[i].down[j]) - end; - Write(f, '"'); - if Length(gInputBinds[i].up) > 0 then - begin - Write(f, ' "', gInputBinds[i].up[0]); - for j := 1 to High(gInputBinds[i].up) do - Write(f, '; ', gInputBinds[i].up[j]); - Write(f, '"') - end; - WriteLn(f) - end - end; + WriteLn(f, 'bind ', e_KeyNames[i], ' "', GetCommandString(gInputBinds[i].down), '" "', GetCommandString(gInputBinds[i].up), '"'); for i := 0 to High(commands) do begin if not commands[i].cheat then