Merge pull request #1606 from LordSk/feature/team_colors

Tuned down custom skin saturation/luminosity influence on team colors
This commit is contained in:
oy 2018-11-03 08:20:38 +01:00 committed by GitHub
commit e6634cc6bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -354,46 +354,29 @@ vec4 CSkins::GetColorV4(int v, bool UseAlpha) const
int CSkins::GetTeamColor(int UseCustomColors, int PartColor, int Team, int Part) const int CSkins::GetTeamColor(int UseCustomColors, int PartColor, int Team, int Part) const
{ {
static const int s_aTeamColors[3] = {12895054, 65387, 10223467}; static const int s_aTeamColors[3] = {0xC4C34E, 0x00FF6B, 0x9BFF6B};
int TeamHue = (s_aTeamColors[Team+1]>>16)&0xff;
int TeamSat = (s_aTeamColors[Team+1]>>8)&0xff;
int TeamLgt = s_aTeamColors[Team+1]&0xff;
int PartSat = (PartColor>>8)&0xff;
int PartLgt = PartColor&0xff;
if(!UseCustomColors) if(!UseCustomColors)
{ {
int ColorVal = s_aTeamColors[Team+1]; PartSat = 255;
if(Part == SKINPART_MARKING) PartLgt = 255;
ColorVal |= 0xff000000;
return ColorVal;
} }
/*blue128: 128/PI*ARCSIN(COS((PI*(x+10)/128)))+182 // (decoration, marking, hands)
blue64: 64/PI*ARCSIN(COS((PI*(x-76)/64)))+172 // (body, feet, eyes)
red128: Mod((128/PI*ARCSIN(COS((PI*(x-105)/128)))+297),256)
red64: Mod((64/PI*ARCSIN(COS((PI*(x-56)/64)))+280),256)*/
int MinSat = 160; int MinSat = 160;
int MaxSat = 255; int MaxSat = 255;
float Dark = DARKEST_COLOR_LGT/255.0f;
int MinLgt = Dark + 64*(1.0f-Dark);
int MaxLgt = Dark + 191*(1.0f-Dark);
int Hue = 0; int h = TeamHue;
int Sat = (PartColor>>8)&0xff; int s = clamp(mix(TeamSat, PartSat, 0.2), MinSat, MaxSat);
int Lgt = PartColor&0xff; int l = clamp(mix(TeamLgt, PartLgt, 0.2), (int)DARKEST_COLOR_LGT, 200);
int NewHue; int ColorVal = (h<<16) + (s<<8) + l;
if(Team == TEAM_RED) if(Part == SKINPART_MARKING) // keep alpha
{
if(Part == SKINPART_MARKING || Part == SKINPART_DECORATION || Part == SKINPART_HANDS)
NewHue = (int)(128.0f/pi*asinf(cosf(pi/128.0f*(Hue-105.0f))) + 297.0f) % 256;
else
NewHue = (int)(64.0f/pi*asinf(cosf(pi/64.0f*(Hue-56.0f))) + 280.0f) % 256;
}
else
NewHue = 64.0f/pi*asinf(cosf(pi/64.0f*(Hue-76.0f))) + 172.0f;
int NewSat = clamp(Sat, MinSat, MaxSat);
int NewLgt = clamp(Lgt, MinLgt, MaxLgt);
int ColorVal = (NewHue<<16) + (NewSat<<8) + NewLgt;
if(Part == SKINPART_MARKING)
ColorVal += PartColor&0xff000000; ColorVal += PartColor&0xff000000;
return ColorVal; return ColorVal;