# HG changeset patch # User koda # Date 1329590028 -3600 # Node ID 54faf30347202690fe4b3876f9779df0930c0194 # Parent 3a02e9c25ac5f6440ab620ea91022c97f175090e# Parent f2f93017132c0e5ff8de1ea5e1c20dace01a60d5 merge diff -r 3a02e9c25ac5 -r 54faf3034720 hedgewars/uRender.pas --- a/hedgewars/uRender.pas Sat Feb 18 19:33:04 2012 +0100 +++ b/hedgewars/uRender.pas Sat Feb 18 19:33:48 2012 +0100 @@ -470,8 +470,11 @@ if RealTicks > (startTime + MOVE_ANIM_TIME) then begin startTime:= 0; + animate:= false; frame.x:= target.x; frame.y:= target.y; + active.x:= active.x + (target.x - source.x); + active.y:= active.y + (target.y - source.y); end else begin diff -r 3a02e9c25ac5 -r 54faf3034720 hedgewars/uTouch.pas --- a/hedgewars/uTouch.pas Sat Feb 18 19:33:04 2012 +0100 +++ b/hedgewars/uTouch.pas Sat Feb 18 19:33:48 2012 +0100 @@ -22,7 +22,7 @@ interface -uses sysutils, uConsole, uVariables, SDLh, uFloat, uConsts, uIO, GLUnit, uTypes; +uses sysutils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, uIO, GLUnit, uTypes; procedure initModule; @@ -40,6 +40,7 @@ procedure deleteFinger(id: TSDL_FingerId); procedure onTouchClick(finger: TTouch_Data); procedure onTouchDoubleClick(finger: TTouch_Data); +procedure onTouchLongClick(finger: TTouch_Data); function findFinger(id: TSDL_FingerId): PTouch_Data; procedure aim(finger: TTouch_Data); @@ -56,7 +57,8 @@ implementation const - clicktime = 200; + clickTime = 200; + longClickTime = 400; nilFingerId = High(TSDL_FingerId); var @@ -132,20 +134,6 @@ exit; end; -if isOnRect(backjump.active, finger^) then - begin - enterKey:= true; - moveCursor:= false; - finger^.pressedWidget:= @backjump; - exit; - end; -if isOnRect(forwardjump.active, finger^) then - begin - backspaceKey:= true; - moveCursor:= false; - finger^.pressedWidget:= @forwardjump; - exit; - end; if isOnRect(pauseButton.active, finger^) then begin isPaused:= not isPaused; @@ -153,7 +141,7 @@ finger^.pressedWidget:= @pauseButton; exit; end; - + dec(buttonsDown);//no buttonsDown, undo the inc() above if buttonsDown = 0 then begin @@ -220,9 +208,11 @@ y := y; finger:= updateFinger(x,y,0,0,pointerId); //Check for onTouchClick event -if ((RealTicks - finger^.timeSinceDown) < clickTime) AND not(fingerHasMoved(finger^)) then - onTouchClick(finger^); -WriteToConsole(Format('%d', [buttonsDown])); +if not(fingerHasMoved(finger^)) then + if (RealTicks - finger^.timeSinceDown) < clickTime then + onTouchClick(finger^) + else + onTouchLongClick(finger^); if aimingCrosshair then begin @@ -251,12 +241,6 @@ if widget = @fireButton then spaceKey:= false; - - if widget = @backjump then - enterKey:= false; - - if widget = @forwardjump then - backspaceKey:= false; end; deleteFinger(pointerId); @@ -268,14 +252,25 @@ finger := finger;//avoid compiler hint end; +procedure onTouchLongClick(finger: TTouch_Data); +begin +if isOnRect(jumpWidget.active, finger) then + begin + ParseCommand('ljump', (CurrentTeam <> nil) and not(CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel=0)); + if (CurrentTeam <> nil) and (not CurrentTeam^.ExtDriven) and (ReadyTimeLeft > 1) then + ParseCommand('gencmd R', true); + exit; + end; +end; + procedure onTouchClick(finger: TTouch_Data); begin -if (RealTicks - timeSinceClick < 300) and (sqrt(sqr(finger.X-xTouchClick) + sqr(finger.Y-yTouchClick)) < 30) then - begin - onTouchDoubleClick(finger); - timeSinceClick:= 0;//we make an assumption there won't be an 'click' in the first 300 ticks(milliseconds) - exit; - end; +//if (RealTicks - timeSinceClick < 300) and (sqrt(sqr(finger.X-xTouchClick) + sqr(finger.Y-yTouchClick)) < 30) then +// begin +// onTouchDoubleClick(finger); +// timeSinceClick:= 0;//we make an assumption there won't be an 'click' in the first 300 ticks(milliseconds) +// exit; +// end; xTouchClick:= finger.x; yTouchClick:= finger.y; @@ -295,11 +290,19 @@ end; -if isOnCurrentHog(finger) then +if isOnCurrentHog(finger) or isOnRect(AMWidget.active, finger) then begin bShowAmmoMenu := true; exit; end; + +if isOnRect(jumpWidget.active, finger) then + begin + ParseCommand('hjump', (CurrentTeam <> nil) and not(CurrentTeam^.ExtDriven) and (CurrentHedgehog^.BotLevel=0)); + if (CurrentTeam <> nil) and (not CurrentTeam^.ExtDriven) and (ReadyTimeLeft > 1) then + ParseCommand('gencmd R', true); + exit; + end; end; function addFinger(x,y: Longword; id: TSDL_FingerId): PTouch_Data; diff -r 3a02e9c25ac5 -r 54faf3034720 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Sat Feb 18 19:33:04 2012 +0100 +++ b/hedgewars/uTypes.pas Sat Feb 18 19:33:48 2012 +0100 @@ -59,7 +59,7 @@ sprQuestion, sprPowerBar, sprWindBar, sprWindL, sprWindR, {$IFDEF USE_TOUCH_INTERFACE} sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight, - sprBackjump, sprForwardjump, sprPauseButton, + sprJumpWidget, sprAMWidget, sprPauseButton, {$ENDIF} sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun, sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer, diff -r 3a02e9c25ac5 -r 54faf3034720 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Sat Feb 18 19:33:04 2012 +0100 +++ b/hedgewars/uVariables.pas Sat Feb 18 19:33:48 2012 +0100 @@ -198,9 +198,9 @@ {$IFDEF USE_TOUCH_INTERFACE} buttonScale: GLFloat; - arrowUp, arrowDown, arrowLeft, arrowRight: TOnScreenWidget; - firebutton, backjump, forwardjump: TOnScreenWidget; - pauseButton: TOnScreenWidget; + arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget; + firebutton, jumpWidget, AMWidget : TOnScreenWidget; + pauseButton : TOnScreenWidget; {$ENDIF} const cHHFileName = 'Hedgehog'; @@ -395,10 +395,10 @@ Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowLeft (FileName: 'arrowRight'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowRight + (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprAMWidget (FileName: 'backjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBackjump - (FileName: 'forwardjump'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprForwardJump + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprJumpWidget (FileName: 'pause'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; Width: 120; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprPauseButton {$ENDIF} diff -r 3a02e9c25ac5 -r 54faf3034720 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sat Feb 18 19:33:04 2012 +0100 +++ b/hedgewars/uWorld.pas Sat Feb 18 19:33:48 2012 +0100 @@ -213,37 +213,33 @@ //positioning of the buttons buttonScale:= 1.5/cDefaultZoomLevel; -with firebutton do + +with JumpWidget do begin show:= true; - sprite:= sprFireButton; + sprite:= sprJumpWidget; frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); - frame.x:= (cScreenWidth shr 1) - frame.w; - frame.y:= cScreenHeight - frame.h; - active:= frame; + frame.x:= (cScreenWidth shr 1) - Round(frame.w * 1.2); + frame.y:= cScreenHeight - frame.h * 2; + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; end; -with backjump do +with AMWidget do begin show:= true; - sprite:= sprbackjump; + sprite:= sprAMWidget; frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); frame.x:= (cScreenWidth shr 1) - frame.w * 2; frame.y:= cScreenHeight - Round(frame.h * 1.2); - active:= frame; - end; - -with forwardjump do - begin - show:= true; - sprite:= sprforwardjump; - frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); - frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); - frame.x:= (cScreenWidth shr 1) - Round(frame.w * 1.2); - frame.y:= cScreenHeight - frame.h * 2; - active:= frame; + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; end; with arrowLeft do @@ -254,7 +250,10 @@ frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); frame.x:= -(cScreenWidth shr 1) + Round(frame.w * 0.25); frame.y:= cScreenHeight - Round(frame.h * 1.5); - active:= frame; + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; end; with arrowRight do @@ -265,7 +264,24 @@ frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); frame.x:= -(cScreenWidth shr 1) + Round(frame.w * 1.5); frame.y:= cScreenHeight - Round(frame.h * 1.5); - active:= frame; + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; + end; + +with firebutton do + begin + show:= true; + sprite:= sprFireButton; + frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); + frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); + frame.x:= arrowRight.frame.x + arrowRight.frame.w; + frame.y:= arrowRight.frame.y + (arrowRight.frame.w shr 1) - (frame.w shr 1); + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; end; with arrowUp do @@ -275,8 +291,11 @@ frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); frame.x:= (cScreenWidth shr 1) - frame.w * 2; - frame.y:= backjump.frame.y - Round(frame.h * 2.25); - active:= frame; + frame.y:= jumpWidget.frame.y - Round(frame.h * 2.25); + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; with moveAnim do begin target.x:= frame.x; @@ -293,8 +312,11 @@ frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); frame.x:= (cScreenWidth shr 1) - frame.w * 2; - frame.y:= backjump.frame.y - Round(frame.h * 2.25); - active:= frame; + frame.y:= jumpWidget.frame.y - Round(frame.h * 2.25); + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; with moveAnim do begin target.x:= frame.x; @@ -312,7 +334,10 @@ frame.h:= Round(spritesData[sprPauseButton].Texture^.h * buttonScale); frame.x:= cScreenWidth div 2 - frame.w; frame.y:= 0; - active:= frame; + active.x:= frame.x; + active.y:= frame.y; + active.w:= frame.w; + active.h:= frame.h; end; {$ENDIF} @@ -1188,8 +1213,8 @@ DrawScreenWidget(@arrowDown); DrawScreenWidget(@fireButton); -DrawScreenWidget(@backjump); -DrawScreenWidget(@forwardjump); +DrawScreenWidget(@jumpWidget); +DrawScreenWidget(@AMWidget); DrawScreenWidget(@pauseButton); {$ENDIF}