hedgewars/uGears.pas
changeset 292 0ca921ca7557
parent 283 28d105f378f1
child 293 00a532e8808e
--- a/hedgewars/uGears.pas	Fri Dec 08 21:14:52 2006 +0000
+++ b/hedgewars/uGears.pas	Sat Dec 09 18:10:43 2006 +0000
@@ -398,6 +398,41 @@
       end
 end;
 
+procedure DrawHH(Gear: PGear; Surface: PSDL_Surface);
+var t: integer;
+begin
+DrawHedgehog(Round(Gear.X) - 14 + WorldDx, Round(Gear.Y) - 18 + WorldDy,
+             hwSign(Gear.dX), 0,
+             PHedgehog(Gear.Hedgehog).visStepPos div 2,
+             Surface);
+
+with PHedgehog(Gear.Hedgehog)^ do
+     if Gear.State = 0 then
+        begin
+        t:= round(Gear.Y) - cHHRadius - 10 + WorldDy;
+        dec(t, HealthTag.h + 2);
+        DrawCentered(round(Gear.X) + WorldDx, t, HealthTag, Surface);
+        dec(t, NameTag.h + 2);
+        DrawCentered(round(Gear.X) + WorldDx, t, NameTag, Surface);
+        dec(t, Team.NameTag.h + 2);
+        DrawCentered(round(Gear.X) + WorldDx, t, Team.NameTag, Surface)
+        end else // Current hedgehog
+        begin
+        if bShowFinger and ((Gear.State and gstHHDriven) <> 0) then
+           DrawSprite(sprFinger, round(Gear.X) - 16 + WorldDx, round(Gear.Y) - 64 + WorldDy,
+                      GameTicks div 32 mod 16, Surface);
+        if (Gear.State and (gstMoving or gstDrowning or gstFalling)) = 0 then
+           if (Gear.State and gstHHThinking) <> 0 then
+              DrawGear(sQuestion, Round(Gear.X) - 10 + WorldDx, Round(Gear.Y) - cHHRadius - 34 + WorldDy, Surface)
+              else
+              if ShowCrosshair and ((Gear.State and gstAttacked) = 0) then
+                 DrawSurfSprite(Round(Gear.X + hwSign(Gear.dX) * Sin(Gear.Angle*pi/cMaxAngle)*60) + WorldDx - 11,
+                           Round(Gear.Y - Cos(Gear.Angle*pi/cMaxAngle)*60) + WorldDy - 12,
+                           24, (18 + hwSign(Gear.dX) * integer(((Gear.Angle * 72 div cMaxAngle) + 1) div 2) mod 18) mod 18,
+                           Team.CrosshairSurf, Surface);
+        end;
+end;
+
 procedure DrawGears(Surface: PSDL_Surface);
 var Gear: PGear;
     i: Longword;
@@ -481,9 +516,7 @@
       case Gear.Kind of
            gtCloud: DrawSprite(sprCloud   , Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.State, Surface);
        gtAmmo_Bomb: DrawSprite(sprBomb , Round(Gear.X) - 8 + WorldDx, Round(Gear.Y) - 8 + WorldDy, trunc(Gear.DirAngle), Surface);
-        gtHedgehog: DrawHedgehog(Round(Gear.X) - 14 + WorldDx, Round(Gear.Y) - 18 + WorldDy, hwSign(Gear.dX),
-                                 0, PHedgehog(Gear.Hedgehog).visStepPos div 2,
-                                 Surface);
+        gtHedgehog: DrawHH(Gear, Surface);
     gtAmmo_Grenade: DrawSprite(sprGrenade , Round(Gear.X) - 16 + WorldDx, Round(Gear.Y) - 16 + WorldDy, DxDy2Angle32(Gear.dY, Gear.dX), Surface);
        gtHealthTag: if Gear.Surf <> nil then DrawCentered(Round(Gear.X) + WorldDx, Round(Gear.Y) + WorldDy, Gear.Surf, Surface);
            gtGrave: DrawSpriteFromRect(PHedgehog(Gear.Hedgehog).Team.GraveRect, Round(Gear.X) + WorldDx - 16, Round(Gear.Y) + WorldDy - 16, 32, (GameTicks shr 7) and 7, Surface);