X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_console.pas;h=59174bf3b66b96ae71fbc637e92b984657e93662;hb=7e9bc1301ecf92dd4c78bb613828839fbd9b0393;hp=fd8e24b3cf1bd05371a5d9a1c277fc4bdb194418;hpb=31039aaf7e1623de1a4be292d0c77532fcfbf3e6;p=d2df-sdl.git diff --git a/src/game/g_console.pas b/src/game/g_console.pas index fd8e24b..59174bf 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -617,47 +617,46 @@ 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 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) >= 4 then + g_Console_BindKey(i, p[2], p[3]) + else + g_Console_BindKey(i, p[2], '') + end end else g_Console_Add('bind [up action]'); '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 @@ -1264,13 +1263,13 @@ begin IK_DELETE: if (Length(Line) > 0) and (CPos <= Length(Line)) then Delete(Line, CPos, 1); - IK_LEFT, IK_KPLEFT, VK_LEFT: + IK_LEFT, IK_KPLEFT, VK_LEFT, JOY0_LEFT, JOY1_LEFT, JOY2_LEFT, JOY3_LEFT: if CPos > 1 then CPos := CPos - 1; - IK_RIGHT, IK_KPRIGHT, VK_RIGHT: + IK_RIGHT, IK_KPRIGHT, VK_RIGHT, JOY0_RIGHT, JOY1_RIGHT, JOY2_RIGHT, JOY3_RIGHT: if CPos <= Length(Line) then CPos := CPos + 1; - IK_RETURN, IK_KPRETURN, VK_OPEN, VK_FIRE: + IK_RETURN, IK_KPRETURN, VK_OPEN, VK_FIRE, JOY0_ATTACK, JOY1_ATTACK, JOY2_ATTACK, JOY3_ATTACK: begin if Cons_Shown then g_Console_Process(Line) @@ -1307,7 +1306,7 @@ begin IK_TAB: if not gChatShow then Complete(); - IK_DOWN, IK_KPDOWN, VK_DOWN: + IK_DOWN, IK_KPDOWN, VK_DOWN, JOY0_DOWN, JOY1_DOWN, JOY2_DOWN, JOY3_DOWN: if not gChatShow then if (CommandHistory <> nil) and (CmdIndex < Length(CommandHistory)) then @@ -1317,7 +1316,7 @@ begin Line := CommandHistory[CmdIndex]; CPos := Length(Line) + 1; end; - IK_UP, IK_KPUP, VK_UP: + IK_UP, IK_KPUP, VK_UP, JOY0_UP, JOY1_UP, JOY2_UP, JOY3_UP: if not gChatShow then if (CommandHistory <> nil) and (CmdIndex <= Length(CommandHistory)) then @@ -1327,9 +1326,9 @@ begin Line := CommandHistory[CmdIndex]; Cpos := Length(Line) + 1; end; - IK_PAGEUP, IK_KPPAGEUP, VK_PREV: // PgUp + IK_PAGEUP, IK_KPPAGEUP, VK_PREV, JOY0_PREV, JOY1_PREV, JOY2_PREV, JOY3_PREV: // PgUp if not gChatShow then Inc(conSkipLines); - IK_PAGEDN, IK_KPPAGEDN, VK_NEXT: // PgDown + IK_PAGEDN, IK_KPPAGEDN, VK_NEXT, JOY0_NEXT, JOY1_NEXT, JOY2_NEXT, JOY3_NEXT: // PgDown if not gChatShow and (conSkipLines > 0) then Dec(conSkipLines); IK_HOME, IK_KPHOME: CPos := 1; @@ -1716,10 +1715,10 @@ begin (* for i := 0 to e_MaxJoys - 1 do *) for i := 0 to 1 do begin - g_Console_BindKey(e_JoyAxisToKey(i, 0, 0), '+p' + IntToStr(i mod 2 + 1) + '_moveleft', '-p' + IntToStr(i mod 2 + 1) + '_moveleft'); - g_Console_BindKey(e_JoyAxisToKey(i, 0, 1), '+p' + IntToStr(i mod 2 + 1) + '_moveright', '-p' + IntToStr(i mod 2 + 1) + '_moveright'); - g_Console_BindKey(e_JoyAxisToKey(i, 1, 0), '+p' + IntToStr(i mod 2 + 1) + '_lookup', '-p' + IntToStr(i mod 2 + 1) + '_lookup'); - g_Console_BindKey(e_JoyAxisToKey(i, 1, 1), '+p' + IntToStr(i mod 2 + 1) + '_lookdown', '-p' + IntToStr(i mod 2 + 1) + '_lookdown'); + g_Console_BindKey(e_JoyAxisToKey(i, 0, AX_MINUS), '+p' + IntToStr(i mod 2 + 1) + '_moveleft', '-p' + IntToStr(i mod 2 + 1) + '_moveleft'); + g_Console_BindKey(e_JoyAxisToKey(i, 0, AX_PLUS), '+p' + IntToStr(i mod 2 + 1) + '_moveright', '-p' + IntToStr(i mod 2 + 1) + '_moveright'); + g_Console_BindKey(e_JoyAxisToKey(i, 1, AX_MINUS), '+p' + IntToStr(i mod 2 + 1) + '_lookup', '-p' + IntToStr(i mod 2 + 1) + '_lookup'); + g_Console_BindKey(e_JoyAxisToKey(i, 1, AX_PLUS), '+p' + IntToStr(i mod 2 + 1) + '_lookdown', '-p' + IntToStr(i mod 2 + 1) + '_lookdown'); g_Console_BindKey(e_JoyButtonToKey(i, 2), '+p' + IntToStr(i mod 2 + 1) + '_jump', '-p' + IntToStr(i mod 2 + 1) + '_jump'); g_Console_BindKey(e_JoyButtonToKey(i, 0), '+p' + IntToStr(i mod 2 + 1) + '_attack', '-p' + IntToStr(i mod 2 + 1) + '_attack'); g_Console_BindKey(e_JoyButtonToKey(i, 3), '+p' + IntToStr(i mod 2 + 1) + '_activate', '-p' + IntToStr(i mod 2 + 1) + '_activate'); @@ -1795,27 +1794,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