# HG changeset patch # User Wuzzy # Date 1547139298 -3600 # Node ID 1dab5d92aca7a99e50881d561e14296386226e0f # Parent ce40351e06903531b1c89776b8122b71f716a2bd Add button to set bounciness in touch interface diff -r ce40351e0690 -r 1dab5d92aca7 hedgewars/uTouch.pas --- a/hedgewars/uTouch.pas Thu Jan 10 03:14:02 2019 +0100 +++ b/hedgewars/uTouch.pas Thu Jan 10 17:54:58 2019 +0100 @@ -22,7 +22,7 @@ interface -uses SysUtils, uUtils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, GLUnit, uTypes, uCaptions, uAmmos, uWorld; +uses SysUtils, uUtils, uConsole, uVariables, SDLh, uFloat, uConsts, uCommands, GLUnit, uTypes, uCaptions, uWorld, uGearsHedgehog; procedure initModule; @@ -89,7 +89,7 @@ procedure onTouchDown(x, y: Single; pointerId: TSDL_FingerId); var finger: PTouch_Data; - xr, yr: LongWord; + xr, yr, tmp: LongWord; begin xr:= round(x * cScreenWidth); yr:= round(y * cScreenHeight); @@ -159,10 +159,35 @@ if(CurrentHedgehog <> nil) then begin if Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_Timerable <> 0 then - ParseTeamCommand('/timer ' + inttostr((GetCurAmmoEntry(CurrentHedgeHog^)^.Timer div 1000) mod 5 + 1)); + begin + tmp:= HHGetTimerMsg(CurrentHedgehog^.Gear); + if tmp <> MSGPARAM_INVALID then + ParseTeamCommand('/timer ' + inttostr(tmp mod 5 + 1)); + end; end; exit; end; + +if isOnWidget(utilityWidget2, finger^) then + begin + finger^.pressedWidget:= @utilityWidget2; + moveCursor:= false; + if(CurrentHedgehog <> nil) then + begin + if Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_SetBounce <> 0 then + begin + tmp := HHGetBouncinessMsg(CurrentHedgehog^.Gear); + if tmp <> MSGPARAM_INVALID then + begin + ParseTeamCommand('+precise'); + ParseTeamCommand('timer ' + inttostr(tmp mod 5 + 1)); + bounceButtonPressed:= true; + end; + end; + end; + exit; + end; + dec(buttonsDown);//no buttonsDown, undo the inc() above if buttonsDown = 0 then begin @@ -496,6 +521,12 @@ aimingDown:= false; end; end; + +if bounceButtonPressed then + begin + ParseTeamCommand('-precise'); + bounceButtonPressed:= false; + end; end; function findFinger(id: TSDL_FingerId): PTouch_Data; @@ -627,6 +658,7 @@ begin buttonsDown:= 0; pointerCount:= 0; + bounceButtonPressed:= false; setLength(fingers, 4); for index := 0 to (Length(fingers)-1) do diff -r ce40351e0690 -r 1dab5d92aca7 hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Thu Jan 10 03:14:02 2019 +0100 +++ b/hedgewars/uTypes.pas Thu Jan 10 17:54:58 2019 +0100 @@ -61,7 +61,7 @@ {$IFDEF USE_TOUCH_INTERFACE} sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight, sprJumpWidget, sprAMWidget, sprPauseButton, sprTimerButton, sprTargetButton, - sprSwitchButton, + sprSwitchButton, sprBounceButton, {$ENDIF} sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun, sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer, diff -r ce40351e0690 -r 1dab5d92aca7 hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Thu Jan 10 03:14:02 2019 +0100 +++ b/hedgewars/uVariables.pas Thu Jan 10 17:54:58 2019 +0100 @@ -283,10 +283,12 @@ //Buttons {$IFDEF USE_TOUCH_INTERFACE} buttonScale: GLFloat; + bounceButtonPressed: boolean; arrowUp, arrowDown, arrowLeft, arrowRight : TOnScreenWidget; firebutton, jumpWidget, AMWidget : TOnScreenWidget; pauseButton, utilityWidget : TOnScreenWidget; + utilityWidget2 : TOnScreenWidget; {$ENDIF} @@ -487,6 +489,8 @@ Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprTargetButton (FileName: 'switchbutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprSwitchButton + (FileName: 'bouncebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprBounceButton {$ENDIF} (FileName: 'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil; Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake diff -r ce40351e0690 -r 1dab5d92aca7 hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Thu Jan 10 03:14:02 2019 +0100 +++ b/hedgewars/uWorld.pas Thu Jan 10 17:54:58 2019 +0100 @@ -396,6 +396,28 @@ source.y:= frame.y; end; end; + +with utilityWidget2 do + begin + show:= false; + sprite:= sprBounceButton; + frame.w:= Round(spritesData[sprite].Texture^.w * buttonScale); + frame.h:= Round(spritesData[sprite].Texture^.h * buttonScale); + frame.x:= utilityWidget.frame.x + Round(frame.w * 1.25); + frame.y:= arrowLeft.frame.y - Round(frame.h * 1.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; + target.y:= frame.y; + source.x:= frame.x; + source.y:= frame.y; + end; + end; + {$ENDIF} end; @@ -1621,6 +1643,7 @@ DrawScreenWidget(@jumpWidget); DrawScreenWidget(@AMWidget); DrawScreenWidget(@utilityWidget); +DrawScreenWidget(@utilityWidget2); DrawScreenWidget(@pauseButton); {$ENDIF} @@ -2130,6 +2153,14 @@ end else if utilityWidget.show then animateWidget(@utilityWidget, true, false); + + if ((Ammoz[ammoType].Ammo.Propz and ammoprop_SetBounce) <> 0) then + begin + utilityWidget2.sprite:= sprBounceButton; + animateWidget(@utilityWidget2, true, true); + end + else if utilityWidget2.show then + animateWidget(@utilityWidget2, true, false); {$ELSE} ammoType:= ammoType; // avoid hint {$ENDIF} diff -r ce40351e0690 -r 1dab5d92aca7 project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/bouncebutton.png Binary file project_files/Android-build/SDL-android-project/assets/Data/Graphics/Buttons/bouncebutton.png has changed