--- a/hedgewars/uInputHandler.pas Tue Nov 10 18:16:35 2015 +0100
+++ b/hedgewars/uInputHandler.pas Tue Nov 10 20:43:13 2015 +0100
@@ -1,6 +1,6 @@
(*
* Hedgewars, a free turn based strategy game
- * Copyright (c) 2004-2013 Andrey Korotaev <unC0Rr@gmail.com>
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*)
{$INCLUDE "options.inc"}
@@ -50,7 +50,7 @@
procedure ControllerButtonEvent(joy, button: Byte; pressed: Boolean);
implementation
-uses uConsole, uCommands, uMisc, uVariables, uConsts, uUtils, uDebug, uPhysFSLayer;
+uses uConsole, uCommands, uVariables, uConsts, uUtils, uDebug, uPhysFSLayer;
const
LSHIFT = $0200;
@@ -58,7 +58,7 @@
LALT = $0800;
RALT = $1000;
LCTRL = $2000;
- RCTRL = $4000;
+ RCTRL = $4000;
var tkbd: array[0..cKbdMaxIndex] of boolean;
KeyNames: array [0..cKeyMaxIndex] of string[15];
@@ -92,16 +92,16 @@
(*
procedure MaskModifier(var code: LongInt; Modifier: LongWord);
begin
- if(Modifier and KMOD_LSHIFT) <> 0 then code:= code or LSHIFT;
- if(Modifier and KMOD_RSHIFT) <> 0 then code:= code or LSHIFT;
- if(Modifier and KMOD_LALT) <> 0 then code:= code or LALT;
- if(Modifier and KMOD_RALT) <> 0 then code:= code or LALT;
- if(Modifier and KMOD_LCTRL) <> 0 then code:= code or LCTRL;
- if(Modifier and KMOD_RCTRL) <> 0 then code:= code or LCTRL;
+ if(Modifier and KMOD_LSHIFT) <> 0 then code:= code or LSHIFT;
+ if(Modifier and KMOD_RSHIFT) <> 0 then code:= code or LSHIFT;
+ if(Modifier and KMOD_LALT) <> 0 then code:= code or LALT;
+ if(Modifier and KMOD_RALT) <> 0 then code:= code or LALT;
+ if(Modifier and KMOD_LCTRL) <> 0 then code:= code or LCTRL;
+ if(Modifier and KMOD_RCTRL) <> 0 then code:= code or LCTRL;
end;
*)
procedure MaskModifier(Modifier: shortstring; var code: LongInt);
-var mod_ : shortstring;
+var mod_ : shortstring = '';
ModifierCount, i: LongInt;
begin
if Modifier = '' then exit;
@@ -113,7 +113,7 @@
SplitByChar(Modifier, mod_, ':');//remove the first mod: part
Modifier:= mod_;
for i:= 0 to ModifierCount do
- begin
+ begin
mod_:= '';
SplitByChar(Modifier, mod_, ':');
if (Modifier = 'lshift') then code:= code or LSHIFT;
@@ -178,11 +178,13 @@
if KeyDown then
begin
+ Trusted:= Trusted and (not isPaused); //releasing keys during pause should be allowed on the other hand
+
if CurrentBinds[code] = 'switch' then
LocalMessage:= LocalMessage or gmSwitch
else if CurrentBinds[code] = '+precise' then
LocalMessage:= LocalMessage or gmPrecise;
-
+
ParseCommand(CurrentBinds[code], Trusted);
if (CurrentTeam <> nil) and (not CurrentTeam^.ExtDriven) and (ReadyTimeLeft > 1) then
ParseCommand('gencmd R', true)
@@ -190,7 +192,7 @@
else if (CurrentBinds[code][1] = '+') then
begin
if CurrentBinds[code] = '+precise' then
- LocalMessage:= LocalMessage and not(gmPrecise);
+ LocalMessage:= LocalMessage and (not gmPrecise);
s:= CurrentBinds[code];
s[1]:= '-';
ParseCommand(s, Trusted);
@@ -200,7 +202,7 @@
else
begin
if CurrentBinds[code] = 'switch' then
- LocalMessage:= LocalMessage and not(gmSwitch)
+ LocalMessage:= LocalMessage and (not gmSwitch)
end
end
end;
@@ -427,10 +429,10 @@
if ControllerNumAxes[j] > 20 then
ControllerNumAxes[j]:= 20;
//if ControllerNumBalls[j] > 20 then ControllerNumBalls[j]:= 20;
-
+
if ControllerNumHats[j] > 20 then
ControllerNumHats[j]:= 20;
-
+
if ControllerNumButtons[j] > 20 then
ControllerNumButtons[j]:= 20;
@@ -492,6 +494,8 @@
p, l: shortstring;
b: byte;
begin
+ if cOnlyStats then exit;
+
AddFileLog('[BINDS] Loading binds from: ' + s);
l:= '';
@@ -509,16 +513,17 @@
i:= 1;
while (i <= length(l)) and (l[i] <> '=') do
begin
- if l[i] <> '%' then
- begin
- p:= p + l[i];
- inc(i)
- end else
+ if l[i] = '%' then
begin
l[i]:= '$';
val(copy(l, i, 3), b);
p:= p + char(b);
inc(i, 3)
+ end
+ else
+ begin
+ p:= p + l[i];
+ inc(i)
end;
end;
@@ -527,6 +532,11 @@
l:= copy(l, i + 1, length(l) - i);
if l <> 'default' then
begin
+ if (length(l) = 2) and (l[1] = '\') then
+ l:= l[1] + ''
+ else if (l[1] = '"') and (l[length(l)] = '"') then
+ l:= copy(l, 2, length(l) - 2);
+
p:= cmd + ' ' + l + ' ' + p;
ParseCommand(p, true)
end
@@ -534,7 +544,7 @@
end;
pfsClose(f)
- end
+ end
else
AddFileLog('[BINDS] file not found');
end;
@@ -564,7 +574,7 @@
if b = 0 then
OutError(errmsgUnknownVariable + ' "' + id + '"', false)
else
- begin
+ begin
// add bind: first check if this cmd is already bound, and remove old bind
i:= cKbdMaxIndex;
repeat