# HG changeset patch # User Wuzzy # Date 1554149262 -7200 # Node ID 8563cc40fc1e8431984168a79d7d049915af9c89 # Parent 2d859d34e6f607a9665862cae9f6409a2c02afe4 Invert colors if clan color is very dark diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uConsts.pas --- a/hedgewars/uConsts.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uConsts.pas Mon Apr 01 22:07:42 2019 +0200 @@ -71,6 +71,7 @@ // color constants cWhiteColorChannels : TSDL_Color = (r:$FF; g:$FF; b:$FF; a:$FF); cNearBlackColorChannels : TSDL_Color = (r:$00; g:$00; b:$10; a:$FF); + cInvertTextColorAt : Byte = 64; cWhiteColor : Longword = $FFFFFFFF; // white cNearBlackColor : Longword = $FF000010; // nearly black diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uGearsRender.pas --- a/hedgewars/uGearsRender.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uGearsRender.pas Mon Apr 01 22:07:42 2019 +0200 @@ -53,7 +53,7 @@ end; implementation -uses uRender, uUtils, uVariables, uAmmos, Math, uVisualGearsList; +uses uRender, uRenderUtils, uUtils, uVariables, uAmmos, Math, uVisualGearsList; procedure DrawRopeLinesRQ(Gear: PGear); var n: LongInt; @@ -303,6 +303,10 @@ dAngle := DxDy2Angle(int2hwfloat(ty - oy), int2hwfloat(tx - ox)) + 90; + if (IsTooDarkToRead(HH^.Team^.Clan^.Color)) then + DrawSpriteRotatedF(sprFingerBackInv, tx, ty, RealTicks div 32 mod 16, 1, dAngle) + else + DrawSpriteRotatedF(sprFingerBack, tx, ty, RealTicks div 32 mod 16, 1, dAngle); Tint(HH^.Team^.Clan^.Color shl 8 or $FF); DrawSpriteRotatedF(sprFinger, tx, ty, RealTicks div 32 mod 16, 1, dAngle); untint; @@ -1259,7 +1263,13 @@ else begin if CurrentHedgehog <> nil then + begin + if (IsTooDarkToRead(CurrentHedgehog^.Team^.Clan^.Color)) then + DrawSpriteRotatedF(sprTargetPBackInv, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360) + else + DrawSpriteRotatedF(sprTargetPBack, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360); Tint(CurrentHedgehog^.Team^.Clan^.Color shl 8 or $FF); + end; DrawSpriteRotatedF(sprTargetP, Gear^.Target.X + WorldDx, Gear^.Target.Y + WorldDy, 0, 0, (RealTicks shr 3) mod 360); if CurrentHedgehog <> nil then untint; diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uRenderUtils.pas --- a/hedgewars/uRenderUtils.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uRenderUtils.pas Mon Apr 01 22:07:42 2019 +0200 @@ -38,6 +38,8 @@ function RenderStringTexLim(s: ansistring; Color: Longword; font: THWFont; maxLength: LongWord): PTexture; function RenderSpeechBubbleTex(s: ansistring; SpeechType: Longword; font: THWFont): PTexture; +function IsTooDarkToRead(TextColor: Longword): boolean; inline; + implementation uses uVariables, uConsts, uTextures, SysUtils, uUtils, uDebug; @@ -76,11 +78,25 @@ WriteInRoundRect:= WriteInRoundRect(Surface, X, Y, Color, Font, s, 0); end;*) +function IsTooDarkToRead(TextColor: LongWord): boolean; +var clr: TSDL_Color; +begin + clr.r:= (TextColor shr 16) and $FF; + clr.g:= (TextColor shr 8) and $FF; + clr.b:= TextColor and $FF; + IsTooDarkToRead:= ((clr.r >= cInvertTextColorAt) or (clr.g >= cInvertTextColorAt) or (clr.b >= cInvertTextColorAt)); +end; + +function IsTooDarkToRead(TextColor: TSDL_COLOR): boolean; +begin + IsTooDarkToRead:= (not ((TextColor.r >= cInvertTextColorAt) or (TextColor.g >= cInvertTextColorAt) or (TextColor.b >= cInvertTextColorAt))); +end; + function WriteInRoundRect(Surface: PSDL_Surface; X, Y: LongInt; Color: LongWord; Font: THWFont; s: ansistring; maxLength: LongWord): TSDL_Rect; var w, h: Longword; tmpsurf: PSDL_Surface; + finalRect, textRect: TSDL_Rect; clr: TSDL_Color; - finalRect, textRect: TSDL_Rect; begin TTF_SizeUTF8(Fontz[Font].Handle, PChar(s), @w, @h); if (maxLength > 0) and (w > maxLength * HDPIScaleFactor) then w := maxLength * HDPIScaleFactor; @@ -92,10 +108,13 @@ textRect.y:= Y; textRect.w:= w; textRect.h:= h; - DrawRoundRect(@finalRect, cWhiteColor, cNearBlackColor, Surface, true); clr.r:= (Color shr 16) and $FF; clr.g:= (Color shr 8) and $FF; clr.b:= Color and $FF; + if (not IsTooDarkToRead(clr)) then + DrawRoundRect(@finalRect, cWhiteColor, cNearBlackColor, Surface, true) + else + DrawRoundRect(@finalRect, cNearBlackColor, cWhiteColor, Surface, true); tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr); finalRect.x:= X + cFontBorder + cFontPadding; finalRect.y:= Y + cFontBorder; diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uTypes.pas --- a/hedgewars/uTypes.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uTypes.pas Mon Apr 01 22:07:42 2019 +0200 @@ -91,7 +91,8 @@ sprSlider, sprBotlevels, sprHandKnife, sprKnife, sprStar, sprIceTexture, sprIceGun, sprFrozenHog, sprAmRubber, sprBoing, sprCustom1, sprCustom2, sprCustom3, sprCustom4, sprCustom5, sprCustom6, sprCustom7, sprCustom8, sprFrozenAirMine, sprAirMine, sprHandAirMine, - sprFlakeL, sprSDFlakeL, sprCloudL, sprSDCloudL, sprCreeper, sprHandCreeper, sprMinigun + sprFlakeL, sprSDFlakeL, sprCloudL, sprSDCloudL, sprCreeper, sprHandCreeper, sprMinigun, + sprSliderInverted, sprFingerBack, sprFingerBackInv, sprTargetPBack, sprTargetPBackInv ); // Gears that interact with other Gears and/or Land diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uVariables.pas --- a/hedgewars/uVariables.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uVariables.pas Mon Apr 01 22:07:42 2019 +0200 @@ -807,9 +807,20 @@ (FileName: 'amDuck'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; Width: 64; Height: 64; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprHandCreeper (FileName: 'amMinigun'; Path: ptHedgehog; AltPath: ptNone; Texture: nil; Surface: nil; - Width: 64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true) // sprMinigun + Width: 64; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprMinigun + (FileName: 'sliderInverted'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 3; Height: 17; imageWidth: 3; imageHeight: 17; saveSurf: false; critical: true; checkSum: false; priority: tpLow; getDimensions: false; getImageDimensions: false), // sprSliderInverted + (FileName: 'FingerBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true), // sprFingerBack + (FileName: 'FingerBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 48; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprFingerBackInv + (FileName: 'TargetpBack'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true),// sprTargetPBack + (FileName: 'TargetpBackInv'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil; + Width: 32; Height: 32; imageWidth: 0; imageHeight: 0; saveSurf: false; critical: true; checkSum: false; priority: tpMedium; getDimensions: false; getImageDimensions: true)// sprTargetPBackInv ); + const Wavez: array [TWave] of record Sprite: TSprite; diff -r 2d859d34e6f6 -r 8563cc40fc1e hedgewars/uWorld.pas --- a/hedgewars/uWorld.pas Mon Apr 01 20:08:34 2019 +0200 +++ b/hedgewars/uWorld.pas Mon Apr 01 22:07:42 2019 +0200 @@ -1096,25 +1096,29 @@ TeamHealthBarWidth:= cTeamHealthWidth * TeamHealthBarHealth div MaxTeamHealth; - // draw health bar + // draw team health bar r.x:= 0; r.y:= 0; r.w:= 2 + TeamHealthBarWidth; r.h:= htex^.h; DrawTextureFromRect(14, cScreenHeight + DrawHealthY + smallScreenOffset, @r, htex); - // draw health bars right border + // draw health bar's right border inc(r.x, cTeamHealthWidth + 2); r.w:= 3; DrawTextureFromRect(TeamHealthBarWidth + 15, cScreenHeight + DrawHealthY + smallScreenOffset, @r, htex); + // draw hedgehog health separators in team health bar h:= 0; if not hasGone then for i:= 0 to cMaxHHIndex do 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); + if (IsTooDarkToRead(Clan^.Color)) then + DrawTexture(15 + h * TeamHealthBarWidth div TeamHealthBarHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSlider].Texture) + else + DrawTexture(15 + h * TeamHealthBarWidth div TeamHealthBarHealth, cScreenHeight + DrawHealthY + smallScreenOffset + 1, SpritesData[sprSliderInverted].Texture); end; // draw Lua value, if set @@ -1170,6 +1174,10 @@ h:= -NameTagTex^.w - 24; if OwnerTex <> nil then h:= h - OwnerTex^.w - 4; + if (IsTooDarkToRead(TeamsArray[t]^.Clan^.Color)) then + DrawSpriteRotatedF(sprFingerBackInv, h, cScreenHeight + DrawHealthY + smallScreenOffset + 2 + SpritesData[sprFingerBackInv].Width div 4, 0, 1, -90) + else + DrawSpriteRotatedF(sprFingerBack, h, cScreenHeight + DrawHealthY + smallScreenOffset + 2 + SpritesData[sprFingerBack].Width div 4, 0, 1, -90); Tint(TeamsArray[t]^.Clan^.Color shl 8 or $FF); DrawSpriteRotatedF(sprFinger, h, cScreenHeight + DrawHealthY + smallScreenOffset + 2 + SpritesData[sprFinger].Width div 4, 0, 1, -90); untint; diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/Finger.png Binary file share/hedgewars/Data/Graphics/Finger.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/FingerBack.png Binary file share/hedgewars/Data/Graphics/FingerBack.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/FingerBackInv.png Binary file share/hedgewars/Data/Graphics/FingerBackInv.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/Targetp.png Binary file share/hedgewars/Data/Graphics/Targetp.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/Targetp@2x.png Binary file share/hedgewars/Data/Graphics/Targetp@2x.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/TargetpBack.png Binary file share/hedgewars/Data/Graphics/TargetpBack.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/TargetpBack@2x.png Binary file share/hedgewars/Data/Graphics/TargetpBack@2x.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/TargetpBackInv.png Binary file share/hedgewars/Data/Graphics/TargetpBackInv.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/TargetpBackInv@2x.png Binary file share/hedgewars/Data/Graphics/TargetpBackInv@2x.png has changed diff -r 2d859d34e6f6 -r 8563cc40fc1e share/hedgewars/Data/Graphics/sliderInverted.png Binary file share/hedgewars/Data/Graphics/sliderInverted.png has changed