Engine:
authorsmxx
Mon, 22 Feb 2010 00:47:50 +0000
changeset 2839 95977f876122
parent 2838 4a79fd4f04a8
child 2840 bb9117753fe4
Engine: * Updated health bar drawing to no longer tint name and health bar contents if highlighted (avoids small but noticeable color changes)
hedgewars/uWorld.pas
--- a/hedgewars/uWorld.pas	Sun Feb 21 22:01:59 2010 +0000
+++ b/hedgewars/uWorld.pas	Mon Feb 22 00:47:50 2010 +0000
@@ -545,35 +545,48 @@
 for t:= 0 to Pred(TeamsCount) do
    with TeamsArray[t]^ do
       begin
-	  highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500);
-	  
+      highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500);
+      
       if highlight then
          glColor4f(((Clan^.Color shr 16) and $ff) / $ff, ((Clan^.Color shr 8) and $ff) / $ff, (Clan^.Color and $ff) / $ff, 1);
-      DrawTexture(- NameTagTex^.w - 16, cScreenHeight + DrawHealthY, NameTagTex);
-  
+
+      // draw name
+      DrawTexture(-NameTagTex^.w - 16, cScreenHeight + DrawHealthY, NameTagTex);
+      
+      // draw flag
+      DrawTexture(-14, cScreenHeight + DrawHealthY, FlagTex);
+      
+      // draw health bar
       r.x:= 0;
       r.y:= 0;
-	  
-	  r.w:= 26;
-	  r.h:= 19;
-	  DrawFromRect(-14, cScreenHeight + DrawHealthY, @r, FlagTex);
-	   
       r.w:= 2 + TeamHealthBarWidth;
       r.h:= HealthTex^.h;
       DrawFromRect(14, cScreenHeight + DrawHealthY, @r, HealthTex);
 
+      // draw health bar's right border
       inc(r.x, cTeamHealthWidth + 2);
       r.w:= 3;
+      DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY, @r, HealthTex);
+      // if highlighted, draw flag and other contents again to keep their colors
+      // this approach should be faster than drawing all borders one by one tinted or not
+      if highlight then
+         begin
+         glColor4f(1, 1, 1, 1);
 
-      DrawFromRect(TeamHealthBarWidth + 16, cScreenHeight + DrawHealthY, @r, HealthTex);
-      if highlight then // if highlighted, draw flag again to keep its colors
-         begin
+         // draw name
          r.x:= 2;
          r.y:= 2;
+         r.w:= NameTagTex^.w - 4;
+         r.h:= NameTagTex^.h - 4;
+         DrawFromRect(-NameTagTex^.w - 14, cScreenHeight + DrawHealthY + 2, @r, NameTagTex);
+         // draw flag
          r.w:= 22;
          r.h:= 15;
-         glColor4f(1, 1, 1, 1);
          DrawFromRect(-12, cScreenHeight + DrawHealthY + 2, @r, FlagTex);
+         // draw health bar
+         r.w:= TeamHealthBarWidth + 1;
+         r.h:= HealthTex^.h - 4;
+         DrawFromRect(16, cScreenHeight + DrawHealthY + 2, @r, HealthTex);
          end;
       end;