--- 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
--- 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;
--- 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,
--- 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}
--- 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}