show buttons on the screen, similar to the iOS overlay
authorXeli
Mon, 06 Feb 2012 19:16:22 +0100
changeset 6637 b4a3310f2974
parent 6635 c2fa29fe2a58
child 6638 4cb7c055dca1
show buttons on the screen, similar to the iOS overlay
hedgewars/uTypes.pas
hedgewars/uVariables.pas
hedgewars/uWorld.pas
--- a/hedgewars/uTypes.pas	Mon Feb 06 23:17:45 2012 +0400
+++ b/hedgewars/uTypes.pas	Mon Feb 06 19:16:22 2012 +0100
@@ -58,6 +58,9 @@
             sprFinger, sprAirBomb, sprAirplane, sprAmAirplane, sprAmGirder,
             sprHHTelepMask, sprSwitch, sprParachute, sprTarget, sprRopeNode,
             sprQuestion, sprPowerBar, sprWindBar, sprWindL, sprWindR,
+{$IFDEF ANDROID}
+            sprFireButton, sprArrowUp, sprArrowDown, sprArrowLeft, sprArrowRight, sprBackjump, sprForwardjump,
+{$ENDIF}
             sprFlake, sprHandRope, sprHandBazooka, sprHandShotgun,
             sprHandDEagle, sprHandAirAttack, sprHandBaseball, sprPHammer,
             sprHandBlowTorch, sprBlowTorch, sprTeleport, sprHHDeath,
@@ -83,7 +86,7 @@
             sprHandResurrector, sprCross, sprAirDrill, sprNapalmBomb,
             sprBulletHit, sprSnowball, sprHandSnowball, sprSnow,
             sprSDFlake, sprSDWater, sprSDCloud, sprSDSplash, sprSDDroplet, sprTardis,
-            sprFireButton, sprSlider
+            sprSlider
             );
 
     // Gears that interact with other Gears and/or Land
--- a/hedgewars/uVariables.pas	Mon Feb 06 23:17:45 2012 +0400
+++ b/hedgewars/uVariables.pas	Mon Feb 06 19:16:22 2012 +0100
@@ -192,6 +192,20 @@
 
     LuaGoals        : shortstring;
 
+/////////////////////////////////////
+//Buttons
+{$IFDEF MOBILE}
+    buttonScale: GLFloat;
+
+    arrowUpX, arrowUpY, arrowUpW, arrowUpH: LongInt; 
+    arrowDownX, arrowDownY, arrowDownW, arrowDownH: LongInt; 
+    arrowLeftX, arrowLeftY, arrowLeftW, arrowLeftH: LongInt; 
+    arrowRightX, arrowRightY, arrowRightW, arrowRightH: LongInt; 
+
+    firebuttonX, fireButtonY, fireButtonW, fireButtonH: LongInt; 
+    backjumpX, backjumpY, backjumpW, backjumpH: LongInt; 
+    forwardjumpX, forwardjumpY, forwardjumpW, forwardjumpH: LongInt; 
+{$ENDIF}
 const
     cHHFileName = 'Hedgehog';
     cCHFileName = 'Crosshair';
@@ -380,6 +394,22 @@
             Width:  80; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWindL
             (FileName:      'WindR'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
             Width:  80; Height: 13; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprWindR
+{$IFDEF ANDROID}
+            (FileName: 'firebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 128; Height: 128; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprFireButton
+            (FileName: 'arrowUp'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowUp
+            (FileName: 'arrowDown'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            Width: 100; Height: 100; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprArrowDown
+            (FileName: 'arrowLeft'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
+            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: '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
+{$ENDIF}
             (FileName:      'Flake'; Path:ptCurrTheme; AltPath: ptNone; Texture: nil; Surface: nil;
             Width:  64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprFlake
             (FileName:     'amRope'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil;
@@ -631,8 +661,6 @@
             Width:  16; Height: 16; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprSDDroplet
             (FileName:  'TARDIS'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
             Width:  48; Height: 79; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHighest; getDimensions: false; getImageDimensions: true),// sprTardis
-            (FileName: 'firebutton'; Path: ptButtons; AltPath: ptNone; Texture: nil; Surface: nil;
-            Width: 450; Height: 150; imageWidth: 0; imageHeight: 0; saveSurf: false; priority: tpHigh; getDimensions: false; getImageDimensions: true), // sprFireButton
             (FileName:  'slider'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
             Width: 5; Height: 17; imageWidth: 5; imageHeight: 15; saveSurf: false; priority: tpLow; getDimensions: false; getImageDimensions: false) // sprSlider
             );
--- a/hedgewars/uWorld.pas	Mon Feb 06 23:17:45 2012 +0400
+++ b/hedgewars/uWorld.pas	Mon Feb 06 19:16:22 2012 +0100
@@ -198,6 +198,46 @@
 SkyOffset:= 0;
 HorizontOffset:= 0;
 
+{$IFDEF ANDROID}
+//positioning of the buttons
+buttonScale:= 1.5/cDefaultZoomLevel;
+firebuttonX:= (cScreenWidth shr 1) - Round(spritesData[sprFireButton].Texture^.h * buttonScale);
+firebuttonY:= -Round(spritesData[sprFireButton].Texture^.h* buttonScale) + cScreenHeight;
+firebuttonW:= Round(spritesData[sprFireButton].Texture^.w * buttonScale);
+firebuttonH:= Round(spritesData[sprFireButton].Texture^.h * buttonScale);
+
+backjumpX:= (cScreenWidth shr 1) - Round(spritesData[sprbackjump].Texture^.h * 2 * buttonScale);
+backjumpY:= -Round(spritesData[sprbackjump].Texture^.h * 1.2 *  buttonScale) + cScreenHeight;
+backjumpW:= Round(spritesData[sprbackjump].Texture^.w * buttonScale);
+backjumpH:= Round(spritesData[sprbackjump].Texture^.h * buttonScale);
+
+forwardjumpX:= (cScreenWidth shr 1) - Round(spritesData[sprforwardjump].Texture^.h * 1.2 * buttonScale);
+forwardjumpY:= -Round(spritesData[sprforwardjump].Texture^.h * 2 * buttonScale) + cScreenHeight;
+forwardjumpW:= Round(spritesData[sprforwardjump].Texture^.w * buttonScale);
+forwardjumpH:= Round(spritesData[sprforwardjump].Texture^.h * buttonScale);
+
+arrowLeftX:= -(cScreenWidth shr 1);
+arrowLeftY:= -Round(spritesData[sprArrowLeft].Texture^.h*buttonScale) + cScreenHeight  - Round(spritesData[sprArrowLeft].Texture^.h*buttonScale);
+arrowLeftW:= Round(spritesData[sprArrowLeft].Texture^.h * buttonScale);
+arrowLeftH:= Round(spritesData[sprArrowLeft].Texture^.h * buttonScale);
+
+arrowRightX:= -(cScreenWidth shr 1)+ Round(spritesData[sprArrowUp].Texture^.h * buttonScale *2);
+arrowRightY:= -Round(spritesData[sprArrowRight].Texture^.h*buttonScale) + cScreenHeight - Round(spritesData[sprArrowRight].Texture^.h*buttonScale);
+arrowLeftW:= Round(spritesData[sprArrowRight].Texture^.w * buttonScale);
+arrowLeftH:= Round(spritesData[sprArrowRight].Texture^.h * buttonScale);
+
+arrowUpX:= -(cScreenWidth shr 1) + Round(spritesData[sprArrowUp].Texture^.h * buttonScale);
+arrowUpY:= -Round(spritesData[sprArrowUp].Texture^.h*buttonScale) + cScreenHeight - Round(spritesData[sprArrowUp].Texture^.h*buttonScale*2);
+arrowUpW:= Round(spritesData[sprArrowUp].Texture^.w * buttonScale);
+arrowUpH:= Round(spritesData[sprArrowUp].Texture^.h * buttonScale);
+
+arrowDownX:= -(cScreenWidth shr 1) + Round(spritesData[sprArrowUp].Texture^.h * buttonScale);
+arrowDownY:= -Round(spritesData[sprArrowDown].Texture^.h*buttonscale) + cScreenHeight;
+arrowDownW:= Round(spritesData[sprArrowDown].Texture^.w * buttonScale);
+arrowDownH:= Round(spritesData[sprArrowDown].Texture^.h * buttonScale);
+
+
+{$ENDIF}
 end;
 
 procedure InitCameraBorders;
@@ -887,6 +927,7 @@
     highlight: Boolean;
     smallScreenOffset, offsetX, offsetY, screenBottom: LongInt;
     VertexBuffer: array [0..3] of TVertex2f;
+    scale: GLFloat;
 begin
 if (cReducedQuality and rqNoBackground) = 0 then
     begin
@@ -1053,7 +1094,14 @@
 
 {$IFDEF ANDROID}
 // Draw buttons Related to the Touch interface
-DrawTexture(Round(-cScreenWidth*0.5 + cScreenHeight*0.02),Round((cScreenHeight*0.98)-(spritesData[sprFireButton].Height*0.4) ),spritesData[sprFireButton].Texture, 0.4);
+DrawTexture(arrowLeftX, arrowLeftY,spritesData[sprArrowLeft].Texture, buttonScale);
+DrawTexture(arrowRightX, arrowRightY,spritesData[sprArrowRight].Texture, buttonScale);
+DrawTexture(arrowUpX, arrowUpY,spritesData[sprArrowUp].Texture, buttonScale);
+DrawTexture(arrowDownX, arrowDownY,spritesData[sprArrowDown].Texture, buttonScale);
+
+DrawTexture(fireButtonX, firebuttonY, spritesData[sprFireButton].Texture, buttonScale);
+DrawTexture(backjumpX, backjumpY, spritesData[sprBackjump].Texture, buttonScale);
+DrawTexture(forwardjumpX, forwardjumpY, spritesData[sprForwardjump].Texture, buttonScale);
 {$ENDIF}
 
 // Teams Healths