diff -r 7d0329f37181 -r f2b18754742f hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Sat Dec 14 21:16:20 2013 +0400 +++ b/hedgewars/uWorld.pas Tue Dec 17 00:02:52 2013 +0400 @@ -60,9 +60,10 @@ , uCaptions , uCursor , uCommands -{$IFDEF USE_VIDEO_RECORDING} + , uTeams +{$IFDEF USE_VIDEO_RECORDING} , uVideoRec -{$ENDIF} +{$ENDIF} ; var cWaveWidth, cWaveHeight: LongInt; @@ -1231,7 +1232,7 @@ procedure RenderTeamsHealth; -var t, i, h, smallScreenOffset : LongInt; +var t, i, h, smallScreenOffset, TeamHealthBarWidth : LongInt; r: TSDL_Rect; highlight: boolean; htex: PTexture; @@ -1248,7 +1249,6 @@ with TeamsArray[t]^ do if TeamHealth > 0 then begin - h:= 0; highlight:= bShowFinger and (CurrentTeam = TeamsArray[t]) and ((RealTicks mod 1000) < 500); if highlight then @@ -1259,12 +1259,18 @@ else htex:= Clan^.HealthTex; - // draw name + // draw owner + if OwnerTex <> nil then + DrawTexture(-OwnerTex^.w - NameTagTex^.w - 18, cScreenHeight + DrawHealthY + smallScreenOffset, OwnerTex); + + // draw name DrawTexture(-NameTagTex^.w - 16, cScreenHeight + DrawHealthY + smallScreenOffset, NameTagTex); // draw flag DrawTexture(-14, cScreenHeight + DrawHealthY + smallScreenOffset, FlagTex); + TeamHealthBarWidth:= cTeamHealthWidth * TeamHealthBarHealth div MaxTeamHealth; + // draw health bar r.x:= 0; r.y:= 0; @@ -1277,13 +1283,14 @@ r.w:= 3; DrawTextureFromRect(TeamHealthBarWidth + 15, cScreenHeight + DrawHealthY + smallScreenOffset, @r, htex); + h:= 0; if not hasGone then for i:= 0 to cMaxHHIndex do - if Hedgehogs[i].Gear <> nil then - begin - inc(h,Hedgehogs[i].Gear^.Health); - if h < TeamHealth then DrawTexture(15 + h*TeamHealthBarWidth div TeamHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSlider].Texture); - end; + begin + inc(h, Hedgehogs[i].HealthBarHealth); + if (h < TeamHealthBarHealth) and (Hedgehogs[i].HealthBarHealth > 0) then + DrawTexture(15 + h * TeamHealthBarWidth div TeamHealthBarHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSlider].Texture); + end; // draw ai kill counter for gfAISurvival if (GameFlags and gfAISurvival) <> 0 then @@ -1439,37 +1446,40 @@ SetScale(cDefaultZoomLevel); // Turn time -{$IFDEF USE_TOUCH_INTERFACE} -offsetX:= cScreenHeight - 13; -{$ELSE} -offsetX:= 48; -{$ENDIF} -offsetY:= cOffsetY; -if ((TurnTimeLeft <> 0) and (TurnTimeLeft < 1000000)) or (ReadyTimeLeft <> 0) then +if UIDisplay <> uiNone then begin - if ReadyTimeLeft <> 0 then - i:= Succ(Pred(ReadyTimeLeft) div 1000) - else - i:= Succ(Pred(TurnTimeLeft) div 1000); - - if i>99 then - t:= 112 - else if i>9 then - t:= 96 - else - t:= 80; - DrawSprite(sprFrame, -(cScreenWidth shr 1) + t + offsetY, cScreenHeight - offsetX, 1); - while i > 0 do +{$IFDEF USE_TOUCH_INTERFACE} + offsetX:= cScreenHeight - 13; +{$ELSE} + offsetX:= 48; +{$ENDIF} + offsetY:= cOffsetY; + if ((TurnTimeLeft <> 0) and (TurnTimeLeft < 1000000)) or (ReadyTimeLeft <> 0) then begin - dec(t, 32); - DrawSprite(sprBigDigit, -(cScreenWidth shr 1) + t + offsetY, cScreenHeight - offsetX, i mod 10); - i:= i div 10 + if ReadyTimeLeft <> 0 then + i:= Succ(Pred(ReadyTimeLeft) div 1000) + else + i:= Succ(Pred(TurnTimeLeft) div 1000); + + if i>99 then + t:= 112 + else if i>9 then + t:= 96 + else + t:= 80; + DrawSprite(sprFrame, -(cScreenWidth shr 1) + t + offsetY, cScreenHeight - offsetX, 1); + while i > 0 do + begin + dec(t, 32); + DrawSprite(sprBigDigit, -(cScreenWidth shr 1) + t + offsetY, cScreenHeight - offsetX, i mod 10); + i:= i div 10 + end; + DrawSprite(sprFrame, -(cScreenWidth shr 1) + t - 4 + offsetY, cScreenHeight - offsetX, 0); end; - DrawSprite(sprFrame, -(cScreenWidth shr 1) + t - 4 + offsetY, cScreenHeight - offsetX, 0); - end; // Captions -DrawCaptions; + DrawCaptions + end; {$IFDEF USE_TOUCH_INTERFACE} // Draw buttons Related to the Touch interface @@ -1485,13 +1495,16 @@ DrawScreenWidget(@utilityWidget); {$ENDIF} -RenderTeamsHealth; +if UIDisplay = uiAll then + RenderTeamsHealth; // Lag alert if isInLag then DrawSprite(sprLag, 32 - (cScreenWidth shr 1), 32, (RealTicks shr 7) mod 12); // Wind bar +if UIDisplay <> uiNone then + begin {$IFDEF USE_TOUCH_INTERFACE} offsetX:= cScreenHeight - 13; offsetY:= (cScreenWidth shr 1) + 74; @@ -1513,14 +1526,15 @@ else if WindBarWidth < 0 then begin - {$WARNINGS OFF} - r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 8; - {$WARNINGS ON} - r.y:= 0; - r.w:= - WindBarWidth; - r.h:= 13; - DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1) - offsetY + 74 + WindBarWidth, cScreenHeight - offsetX + 2, 13, 0); - end; + {$WARNINGS OFF} + r.x:= (Longword(WindBarWidth) + RealTicks shr 6) mod 8; + {$WARNINGS ON} + r.y:= 0; + r.w:= - WindBarWidth; + r.h:= 13; + DrawSpriteFromRect(sprWindL, r, (cScreenWidth shr 1) - offsetY + 74 + WindBarWidth, cScreenHeight - offsetX + 2, 13, 0); + end + end; // AmmoMenu if bShowAmmoMenu and ((AMState = AMHidden) or (AMState = AMHiding)) then @@ -1747,13 +1761,15 @@ procedure MoveCamera; var EdgesDist, wdy, shs,z, amNumOffsetX, amNumOffsetY: LongInt; + inbtwnTrgtAttks: Boolean; begin {$IFNDEF MOBILE} if (not (CurrentTeam^.ExtDriven and isCursorVisible and (not bShowAmmoMenu) and autoCameraOn)) and cHasFocus and (GameState <> gsConfirm) then uCursor.updatePosition(); {$ENDIF} z:= round(200/zoom); -if not PlacingHogs and (FollowGear <> nil) and (not isCursorVisible) and (not bShowAmmoMenu) and (not fastUntilLag) and autoCameraOn then +inbtwnTrgtAttks := (CurrentHedgehog <> nil) and ((Ammoz[CurrentHedgehog^.CurAmmoType].Ammo.Propz and ammoprop_NeedTarget) <> 0) and ((GameFlags and gfInfAttack) <> 0); +if autoCameraOn and not PlacingHogs and (FollowGear <> nil) and (not isCursorVisible) and (not bShowAmmoMenu) and (not fastUntilLag) and not inbtwnTrgtAttks then if ((abs(CursorPoint.X - prevPoint.X) + abs(CursorPoint.Y - prevpoint.Y)) > 4) then begin FollowGear:= nil;