# HG changeset patch # User koda # Date 1256514756 0 # Node ID e7e87e3c67dbf2ffffda5978cd727424e6f6f707 # Parent 4329597c85c886c2cb527504cf85bdddc6389f0d touch control completely revamped diff -r 4329597c85c8 -r e7e87e3c67db hedgewars/SDLh.pas --- a/hedgewars/SDLh.pas Sun Oct 25 18:16:40 2009 +0000 +++ b/hedgewars/SDLh.pas Sun Oct 25 23:52:36 2009 +0000 @@ -104,10 +104,11 @@ {$IFDEF SDL13} SDL_WINDOWEVENT = 1; SDL_TEXTINPUT = 4; - SDL_MOUSEMOTION = 5; - SDL_MOUSEBUTTONDOWN = 6; - SDL_MOUSEBUTTONUP = 7; - SDL_MOUSEWHEEL = 8; //different handling, should create SDL_MouseWheelEvent type + SDL_TEXTEDITING = 5; + SDL_MOUSEMOTION = 6; + SDL_MOUSEBUTTONDOWN = 7; + SDL_MOUSEBUTTONUP = 8; + SDL_MOUSEWHEEL = 9; //different handling, should create SDL_MouseWheelEvent type SDL_JOYAXIS = 10; SDL_JOYHAT = 12; SDL_JOYBUTTONDOWN = 13; @@ -426,6 +427,7 @@ procedure SDL_PumpEvents; cdecl; external SDLLibName; function SDL_PollEvent(event: PSDL_Event): LongInt; cdecl; external SDLLibName; +function SDL_WaitEvent(event: PSDL_Event): LongInt; cdecl; external SDLLibName; function SDL_ShowCursor(toggle: LongInt): LongInt; cdecl; external SDLLibName; diff -r 4329597c85c8 -r e7e87e3c67db hedgewars/hwengine.pas --- a/hedgewars/hwengine.pas Sun Oct 25 18:16:40 2009 +0000 +++ b/hedgewars/hwengine.pas Sun Oct 25 23:52:36 2009 +0000 @@ -166,13 +166,23 @@ {$IFDEF IPHONEOS} type TDirection = (nodir, left, right); var x, y: LongInt; - oldy_zoom: LongInt = -1; - oldy_aim: LongInt = -1; + dx, dy, mouseState: LongInt; + direction: TDirection = nodir; + havetrace: boolean = false; {$ENDIF} begin PrevTime:= SDL_GetTicks; repeat while SDL_PollEvent(@event) <> 0 do +{$IFDEF TOUCHINPUT} +if direction <> nodir then +begin + uKeys.isWalking:= true; + if direction = left then uKeys.leftKey:= true + else if direction = right then uKeys.rightKey:= true; +end +else uKeys.isWalking:= false; +{$ENDIF} case event.type_ of {$IFDEF SDL13} SDL_WINDOWEVENT: @@ -184,52 +194,101 @@ cHasFocus:= event.active.gain = 1; //SDL_VIDEORESIZE: Resize(max(event.resize.w, 600), max(event.resize.h, 450)); {$IFDEF TOUCHINPUT} + SDL_MOUSEMOTION: begin + AddFileLog('********************************************* motion'); + mouseState:= SDL_GetMouseState(0, @x, @y); + SDL_GetRelativeMouseState(0, @dx, @dy); + + direction:= nodir; + + if boolean(mouseState) then + begin + AddFileLog('x: ' + inttostr(x) + ' y: ' + inttostr(y) + ' dx: ' + inttostr(dx) + ' dy: ' + inttostr(dy)); + + {* zoom slider *} + if (x <= 50) and (y <= 430) and (y > 50) then + begin + if (dy > 0) then uKeys.wheelDown:= true + else if (dy < 0) then uKeys.wheelUp:= true; + end; + + {* aim slider *} + if (x > 270) and (y > 50) and (y <= 430) then + begin + if (dy > 0) then uKeys.downKey:= true + else if (dy < 0) then uKeys.upKey:= true; + end; + + {* switch *} + if (x > 50) and (x <= 270) and (y > 400) then + begin + if (dy <> 0) then uKeys.tabKey:= true + end; + end; + end; {*MoveCamera is in uWord.pas -- conflicts with other commands*} - {*Keys are in uKeys.pas*} SDL_MOUSEBUTTONDOWN: begin AddFileLog('********************************************* touch down'); - SDL_GetMouseState(0, @x, @y); - uKeys.leftClick:= true; + mouseState:= SDL_GetMouseState(0, @x, @y); + + {* attack *} + if (x > 50) and (x <= 270) and (y <= 50) then + begin + AddFileLog('Space DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + uKeys.spaceKey:= true; + uKeys.isAttacking:= true; + end; - {* zoom slider *} - if (x <= 50) and (y <= 430) then + if (x <= 50) and (y <= 50) then + begin + AddFileLog('Left Arrow Key DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + // uKeys.leftKey:= true; + // uKeys.isWalking:= true; + direction:= left; + end; + + if (x > 270) and (y <= 50) then + begin + AddFileLog('Right Arrow Key DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + // uKeys.rightKey:= true; + // uKeys.isWalking:= true; + direction:= right; + end; + + {* high jump *} + if (x > 160) and (x <= 270) and (y > 400) then begin {$IFDEF DEBUGFILE} - AddFileLog('Wheel -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + AddFileLog('Backspace -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); {$ENDIF} - if oldy_zoom = -1 then oldy_zoom:= y - else - begin - if oldy_zoom - y > 10 then uKeys.wheelUp:= true - else if oldy_zoom -y < -10 then uKeys.wheelDown:= true; - {* update value only if movement is consistent *} - if (y > oldy_zoom + 20 ) or (y < oldy_zoom - 20 ) then oldy_zoom:= y - end; + uKeys.backspaceKey:= true; end; - {* reset zoom *} - if (x <= 50) and (y > 430) then + end; + SDL_MOUSEBUTTONUP: begin + AddFileLog('********************************************* touch up'); + + mouseState:= SDL_GetMouseState(0, @x, @y); + uKeys.leftClick:= true; + + {* open ammo menu *} + if (y > 430) and (x > 270) then begin {$IFDEF DEBUGFILE} - AddFileLog('Middle Click -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + AddFileLog('Right Click -- x: ' + inttostr(x) + ' y: ' + inttostr(y) ); {$ENDIF} - uKeys.middleClick:= true; + uKeys.rightClick:= true; end; - {* aim slider *} - if (x > 230) and (y <= 430) then + + {* long jump *} + if (x > 50) and (x <= 160) and (y > 400) then begin {$IFDEF DEBUGFILE} - AddFileLog('Up&Down -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + AddFileLog('Enter -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); {$ENDIF} - if oldy_aim = -1 then oldy_aim:= y - else - begin - if oldy_aim - y > 10 then uKeys.upKey:= true - else if oldy_aim -y < -10 then uKeys.downKey:= true; - {* update value only if movement is consistent *} - if (y > oldy_aim + 20 ) or (y < oldy_aim - 20 ) then oldy_aim:= y - end; + uKeys.enterKey:= true; end; + {* reset zoom *} if (x <= 50) and (y > 430) then begin @@ -238,53 +297,17 @@ {$ENDIF} uKeys.middleClick:= true; end; - {* long jump *} - if (y > 430) and (x > 50) and (x <= 135) then - begin -{$IFDEF DEBUGFILE} - AddFileLog('Enter -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); -{$ENDIF} - uKeys.enterKey:= true; - end; - {* high jump *} - if (y > 430) and (x > 185) and (x <= 270) then - begin -{$IFDEF DEBUGFILE} - AddFileLog('Backspace -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); -{$ENDIF} - uKeys.backspaceKey:= true; - end; - {* attack *} - if (y <= 50) and (x > 50) and (x <= 270) then - begin + {* end movement and attack *} {$IFDEF DEBUGFILE} - AddFileLog('Space DOWN -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); + AddFileLog('Arrow Keys UP | Space UP -- x: ' + inttostr(x) + ' y: ' + inttostr(y) ); {$ENDIF} - uKeys.spaceKey:= true; - uKeys.isAttacking:= true; - end - else - begin - AddFileLog('Space UP -- x: ' + inttostr(x) + ' y: ' + inttostr(y)); - uKeys.isAttacking:= false; - end; - end; - SDL_MOUSEBUTTONUP: begin - AddFileLog('********************************************* touch up'); - - SDL_GetMouseState(0, @x, @y); - {* open ammo menu *} - if (y > 430) and (x > 270) then - begin -{$IFDEF DEBUGFILE} - AddFileLog('Right Click -- x: ' + inttostr(x) + ' y: ' + inttostr(y) ); -{$ENDIF} - uKeys.rightClick:= true; - end; + direction:= nodir; + uKeys.isAttacking:= false; end; {$ENDIF} {$IFDEF IPHONEOS} +{* might be masked by above events SDL_JOYAXIS: begin {* axis 0 = left and right; axis 1 = up and down; @@ -293,24 +316,22 @@ begin if event.jaxis.value > 1500 then begin - uKeys.rightKey:= true; - uKeys.isWalking:= true; + direction:= right; end else if event.jaxis.value <= -1500 then begin - uKeys.leftKey:= true; - uKeys.isWalking:= true; + direction:= left end else - if (event.jaxis.value > -1500) and (event.jaxis.value <= 1500) then uKeys.isWalking:= false; + if (event.jaxis.value > -1500) and (event.jaxis.value <= 1500) then direction:= nodir; {$IFDEF DEBUGFILE} AddFileLog('Joystick value: ' + inttostr(event.jaxis.value)); {$ENDIF} end; end; - +*} {$ELSE} SDL_MOUSEBUTTONDOWN: if event.button.button = SDL_BUTTON_WHEELDOWN then uKeys.wheelDown:= true; SDL_MOUSEBUTTONUP: if event.button.button = SDL_BUTTON_WHEELDUP then uKeys.wheelUp:= true; @@ -320,7 +341,8 @@ SDL_JOYBUTTONUP: ControllerButtonEvent(event.jbutton.which, event.jbutton.button, false); {$ENDIF} SDL_QUITEV: isTerminated:= true - end; + end; + CurrTime:= SDL_GetTicks; if PrevTime + cTimerInterval <= CurrTime then begin @@ -329,6 +351,7 @@ end else SDL_Delay(1); IPCCheckSock until isTerminated + end; ///////////////////// diff -r 4329597c85c8 -r e7e87e3c67db hedgewars/options.inc --- a/hedgewars/options.inc Sun Oct 25 18:16:40 2009 +0000 +++ b/hedgewars/options.inc Sun Oct 25 23:52:36 2009 +0000 @@ -26,4 +26,8 @@ {$DEFINE SDL13} {$DEFINE GLES11} {$DEFINE TOUCHINPUT} -{$ENDIF} \ No newline at end of file +{$ENDIF} + +{$IFDEF TOUCHINPUT} +{$DEFINE SDL13} +{$ENDIF} diff -r 4329597c85c8 -r e7e87e3c67db hedgewars/uKeys.pas --- a/hedgewars/uKeys.pas Sun Oct 25 18:16:40 2009 +0000 +++ b/hedgewars/uKeys.pas Sun Oct 25 23:52:36 2009 +0000 @@ -55,6 +55,7 @@ backspaceKey: boolean = false; spaceKey: boolean = false; enterKey: boolean = false; +tabKey: boolean = false; isAttacking: boolean = false; isWalking: boolean = false; @@ -144,6 +145,7 @@ tkbdn[26]:= ord(rightKey); tkbdn[ 8]:= ord(backspaceKey); +tkbdn[ 9]:= ord(tabKey); tkbdn[13]:= ord(enterKey); tkbdn[32]:= ord(spaceKey); @@ -153,6 +155,7 @@ if isWalking = false then leftKey:= false; if isAttacking = false then spaceKey:= false; +tabKey:= false; enterKey:= false; backspaceKey:= false; @@ -202,7 +205,7 @@ end; procedure ResetKbd; -var i, j, k, t,tmp: LongInt; +var i, j, k, t: LongInt; pkbd: PByteArray; begin @@ -249,11 +252,13 @@ tkbdn[26]:= ord(rightKey); tkbdn[ 8]:= ord(backspaceKey); +tkbdn[ 9]:= ord(tabKey); tkbdn[13]:= ord(enterKey); tkbdn[32]:= ord(spaceKey); upKey:= false; downKey:= false; +tabKey:= false; if isWalking = false then rightKey:= false; if isWalking = false then leftKey:= false; @@ -304,7 +309,7 @@ for i:= 6 to cKeyMaxIndex do begin s:= SDL_GetKeyName(i); - //addfilelog(inttostr(i) + ' ' + s); +// addfilelog(inttostr(i) + ' ' + s); if s = 'unknown key' then KeyNames[i]:= '' else begin for t:= 1 to Length(s) do @@ -348,13 +353,13 @@ DefaultBinds[ 1]:= '/put'; DefaultBinds[ 3]:= 'ammomenu'; DefaultBinds[ 8]:= 'hjump'; +DefaultBinds[ 9]:= 'switch'; DefaultBinds[ 13]:= 'ljump'; -DefaultBinds[ 32]:= '+attack'; - DefaultBinds[ 23]:= '+up'; DefaultBinds[ 24]:= '+down'; DefaultBinds[ 25]:= '+left'; DefaultBinds[ 26]:= '+right'; +DefaultBinds[ 32]:= '+attack'; {$ENDIF} DefaultBinds[ 27]:= 'quit'; diff -r 4329597c85c8 -r e7e87e3c67db hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sun Oct 25 18:16:40 2009 +0000 +++ b/hedgewars/uWorld.pas Sun Oct 25 23:52:36 2009 +0000 @@ -345,7 +345,7 @@ {$IFDEF IPHONEOS} {* see the code in MainLoop *} SDL_GetMouseState(0, @x, @y); -if ((x > 50) and (x <= 270) and (y > 50) and (y <= 430)) then +if ((x > 50) and (x <= 270) and (y > 50) and (y <= 330)) then {$ENDIF} if not isPaused then MoveCamera;