Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/game/client/components/chat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include <generated/protocol.h>
#include <generated/client_data.h>

#include <game/client/animstate.h>
#include <game/client/gameclient.h>
#include <game/client/localization.h>

Expand Down Expand Up @@ -640,6 +641,12 @@ void CChat::AddLine(const char *pLine, int ClientID, int Mode, int TargetID)
pCurLine->m_Mode = Mode;
pCurLine->m_NameColor = -2;

if(ClientID >= 0)
{
pCurLine->m_RenderInfo = m_pClient->m_aClients[(Mode == CHAT_WHISPER && ClientID == m_pClient->m_LocalClientID) ? TargetID : ClientID].m_RenderInfo;
pCurLine->m_RenderInfo.m_Size = 9.f;
}

// check for highlighted name
Highlighted = false;
// do not highlight our own messages, whispers and system messages
Expand Down Expand Up @@ -1284,6 +1291,14 @@ void CChat::OnRender()
TextRender()->TextAdvance(&s_ChatCursor, ClientIDWidth);
TextRender()->TextColor(TextColorName);
TextRender()->TextSecondaryColor(ShadowColor);
if(Config()->m_ClShowSkinChat)
{
static CAnimState s_State;
s_State.Set(&g_pData->m_aAnimations[ANIM_BASE], 1.0f);
s_State.Add(&g_pData->m_aAnimations[ANIM_IDLE], 0, 1.0f);
RenderTools()->RenderTee(&s_State, &pLine->m_RenderInfo, EMOTE_NORMAL, vec2(1.f, 0.f), vec2(s_ChatCursor.AdvancePosition().x + FontSize / 3 * 2 - 1.f, y + FontSize / 3 * 2 + 1.f), Blend);
TextRender()->TextAdvance(&s_ChatCursor, FontSize + 1.f);
}
TextRender()->TextDeferred(&s_ChatCursor, pLine->m_aName, -1);
TextRender()->TextDeferred(&s_ChatCursor, ": ", -1);
NumNameGlyphs = s_ChatCursor.GlyphCount();
Expand Down
1 change: 1 addition & 0 deletions src/game/client/components/chat.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class CChat : public CComponent
{
int64 m_Time;
vec2 m_Size;
CTeeRenderInfo m_RenderInfo;
int m_ClientID;
int m_TargetID;
int m_Mode;
Expand Down
102 changes: 51 additions & 51 deletions src/game/client/render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ void CRenderTools::RenderCursor(float CenterX, float CenterY, float Size)
Graphics()->WrapNormal();
}

void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos)
void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha)
{
vec2 Direction = Dir;
vec2 Position = Pos;
Expand All @@ -85,25 +85,25 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
// second pass we draw the filling
for(int p = 0; p < 2; p++)
{
bool OutLine = p==0;
bool OutLine = p == 0;

for(int f = 0; f < 2; f++)
{
float AnimScale = pInfo->m_Size * 1.0f/64.0f;
float AnimScale = pInfo->m_Size * 1.0f / 64.0f;
float BaseSize = pInfo->m_Size;
if(f == 1)
{
vec2 BodyPos = Position + vec2(pAnim->GetBody()->m_X, pAnim->GetBody()->m_Y)*AnimScale;
vec2 BodyPos = Position + vec2(pAnim->GetBody()->m_X, pAnim->GetBody()->m_Y) * AnimScale;
IGraphics::CQuadItem BodyItem(BodyPos.x, BodyPos.y, BaseSize, BaseSize);
IGraphics::CQuadItem BotItem(BodyPos.x+(2.f/3.f)*AnimScale, BodyPos.y+(-16+2.f/3.f)*AnimScale, BaseSize, BaseSize); // x+0.66, y+0.66 to correct some rendering bug
IGraphics::CQuadItem BotItem(BodyPos.x + (2.f / 3.f) * AnimScale, BodyPos.y + (-16 + 2.f / 3.f) * AnimScale, BaseSize, BaseSize); // x+0.66, y+0.66 to correct some rendering bug
IGraphics::CQuadItem Item;

// draw bot visuals (background)
if(IsBot && !OutLine)
{
Graphics()->TextureSet(pInfo->m_BotTexture);
Graphics()->QuadsBegin();
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
SelectSprite(SPRITE_TEE_BOT_BACKGROUND, 0, 0, 0);
Item = BotItem;
Graphics()->QuadsDraw(&Item, 1);
Expand All @@ -115,11 +115,11 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
{
Graphics()->TextureSet(pInfo->m_BotTexture);
Graphics()->QuadsBegin();
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
SelectSprite(SPRITE_TEE_BOT_FOREGROUND, 0, 0, 0);
Item = BotItem;
Graphics()->QuadsDraw(&Item, 1);
Graphics()->SetColor(pInfo->m_BotColor.r, pInfo->m_BotColor.g, pInfo->m_BotColor.b, pInfo->m_BotColor.a);
Graphics()->SetColor(pInfo->m_BotColor.r * Alpha, pInfo->m_BotColor.g * Alpha, pInfo->m_BotColor.b * Alpha, Alpha);
SelectSprite(SPRITE_TEE_BOT_GLOW, 0, 0, 0);
Item = BotItem;
Graphics()->QuadsDraw(&Item, 1);
Expand All @@ -131,9 +131,9 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
{
Graphics()->TextureSet(pInfo->m_aTextures[SKINPART_DECORATION]);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi*2);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_DECORATION].r, pInfo->m_aColors[SKINPART_DECORATION].g, pInfo->m_aColors[SKINPART_DECORATION].b, pInfo->m_aColors[SKINPART_DECORATION].a);
SelectSprite(OutLine?SPRITE_TEE_DECORATION_OUTLINE:SPRITE_TEE_DECORATION, 0, 0, 0);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_DECORATION].r * Alpha, pInfo->m_aColors[SKINPART_DECORATION].g * Alpha, pInfo->m_aColors[SKINPART_DECORATION].b * Alpha, Alpha);
SelectSprite(OutLine ? SPRITE_TEE_DECORATION_OUTLINE : SPRITE_TEE_DECORATION, 0, 0, 0);
Item = BodyItem;
Graphics()->QuadsDraw(&Item, 1);
Graphics()->QuadsEnd();
Expand All @@ -142,15 +142,15 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
// draw body (behind marking)
Graphics()->TextureSet(pInfo->m_aTextures[SKINPART_BODY]);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi*2);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
if(OutLine)
{
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
SelectSprite(SPRITE_TEE_BODY_OUTLINE, 0, 0, 0);
}
else
{
Graphics()->SetColor(pInfo->m_aColors[SKINPART_BODY].r, pInfo->m_aColors[SKINPART_BODY].g, pInfo->m_aColors[SKINPART_BODY].b, pInfo->m_aColors[SKINPART_BODY].a);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_BODY].r * Alpha, pInfo->m_aColors[SKINPART_BODY].g * Alpha, pInfo->m_aColors[SKINPART_BODY].b * Alpha, Alpha);
SelectSprite(SPRITE_TEE_BODY, 0, 0, 0);
}
Item = BodyItem;
Expand All @@ -162,9 +162,9 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
{
Graphics()->TextureSet(pInfo->m_aTextures[SKINPART_MARKING]);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi*2);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_MARKING].r*pInfo->m_aColors[SKINPART_MARKING].a, pInfo->m_aColors[SKINPART_MARKING].g*pInfo->m_aColors[SKINPART_MARKING].a,
pInfo->m_aColors[SKINPART_MARKING].b*pInfo->m_aColors[SKINPART_MARKING].a, pInfo->m_aColors[SKINPART_MARKING].a);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_MARKING].r * pInfo->m_aColors[SKINPART_MARKING].a * Alpha, pInfo->m_aColors[SKINPART_MARKING].g * pInfo->m_aColors[SKINPART_MARKING].a * Alpha,
pInfo->m_aColors[SKINPART_MARKING].b * pInfo->m_aColors[SKINPART_MARKING].a * Alpha, pInfo->m_aColors[SKINPART_MARKING].a * Alpha);
SelectSprite(SPRITE_TEE_MARKING, 0, 0, 0);
Item = BodyItem;
Graphics()->QuadsDraw(&Item, 1);
Expand All @@ -176,11 +176,11 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
{
Graphics()->TextureSet(pInfo->m_aTextures[SKINPART_BODY]);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi*2);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
for(int t = 0; t < 2; t++)
{
SelectSprite(t==0?SPRITE_TEE_BODY_SHADOW:SPRITE_TEE_BODY_UPPER_OUTLINE, 0, 0, 0);
SelectSprite(t == 0 ? SPRITE_TEE_BODY_SHADOW : SPRITE_TEE_BODY_UPPER_OUTLINE, 0, 0, 0);
Item = BodyItem;
Graphics()->QuadsDraw(&Item, 1);
}
Expand All @@ -190,50 +190,50 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
// draw eyes
Graphics()->TextureSet(pInfo->m_aTextures[SKINPART_EYES]);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi*2);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
if(IsBot)
{
Graphics()->SetColor(pInfo->m_BotColor.r, pInfo->m_BotColor.g, pInfo->m_BotColor.b, pInfo->m_BotColor.a);
Graphics()->SetColor(pInfo->m_BotColor.r * Alpha, pInfo->m_BotColor.g * Alpha, pInfo->m_BotColor.b * Alpha, Alpha);
Emote = EMOTE_SURPRISE;
}
else
Graphics()->SetColor(pInfo->m_aColors[SKINPART_EYES].r, pInfo->m_aColors[SKINPART_EYES].g, pInfo->m_aColors[SKINPART_EYES].b, pInfo->m_aColors[SKINPART_EYES].a);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_EYES].r * Alpha, pInfo->m_aColors[SKINPART_EYES].g * Alpha, pInfo->m_aColors[SKINPART_EYES].b * Alpha, Alpha);
if(p == 1)
{
switch (Emote)
switch(Emote)
{
case EMOTE_PAIN:
SelectSprite(SPRITE_TEE_EYES_PAIN, 0, 0, 0);
break;
case EMOTE_HAPPY:
SelectSprite(SPRITE_TEE_EYES_HAPPY, 0, 0, 0);
break;
case EMOTE_SURPRISE:
SelectSprite(SPRITE_TEE_EYES_SURPRISE, 0, 0, 0);
break;
case EMOTE_ANGRY:
SelectSprite(SPRITE_TEE_EYES_ANGRY, 0, 0, 0);
break;
default:
SelectSprite(SPRITE_TEE_EYES_NORMAL, 0, 0, 0);
break;
case EMOTE_PAIN:
SelectSprite(SPRITE_TEE_EYES_PAIN, 0, 0, 0);
break;
case EMOTE_HAPPY:
SelectSprite(SPRITE_TEE_EYES_HAPPY, 0, 0, 0);
break;
case EMOTE_SURPRISE:
SelectSprite(SPRITE_TEE_EYES_SURPRISE, 0, 0, 0);
break;
case EMOTE_ANGRY:
SelectSprite(SPRITE_TEE_EYES_ANGRY, 0, 0, 0);
break;
default:
SelectSprite(SPRITE_TEE_EYES_NORMAL, 0, 0, 0);
break;
}

float EyeScale = BaseSize*0.60f;
float h = Emote == EMOTE_BLINK ? BaseSize*0.15f/2.0f : EyeScale/2.0f;
vec2 Offset = vec2(Direction.x*0.125f, -0.05f+Direction.y*0.10f)*BaseSize;
IGraphics::CQuadItem QuadItem(BodyPos.x+Offset.x, BodyPos.y+Offset.y, EyeScale, h);
float EyeScale = BaseSize * 0.60f;
float h = Emote == EMOTE_BLINK ? BaseSize * 0.15f / 2.0f : EyeScale / 2.0f;
vec2 Offset = vec2(Direction.x * 0.125f, -0.05f + Direction.y * 0.10f) * BaseSize;
IGraphics::CQuadItem QuadItem(BodyPos.x + Offset.x, BodyPos.y + Offset.y, EyeScale, h);
Graphics()->QuadsDraw(&QuadItem, 1);
}
Graphics()->QuadsEnd();

// draw xmas hat
if(!OutLine && pInfo->m_HatTexture.IsValid())
{
Graphics()->TextureSet(pInfo->m_HatTexture);
Graphics()->QuadsBegin();
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle*pi * 2);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
int Flag = Direction.x < 0.0f ? SPRITE_FLAG_FLIP_X : 0;
switch(pInfo->m_HatSpriteIndex)
{
Expand All @@ -260,14 +260,14 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
Graphics()->QuadsBegin();
CAnimKeyframe *pFoot = f ? pAnim->GetFrontFoot() : pAnim->GetBackFoot();

float w = BaseSize/2.1f;
float w = BaseSize / 2.1f;
float h = w;

Graphics()->QuadsSetRotation(pFoot->m_Angle*pi*2);
Graphics()->QuadsSetRotation(pFoot->m_Angle * pi * 2);

if(OutLine)
{
Graphics()->SetColor(1.0f, 1.0f, 1.0f, 1.0f);
Graphics()->SetColor(1.0f, 1.0f, 1.0f, Alpha);
SelectSprite(SPRITE_TEE_FOOT_OUTLINE, 0, 0, 0);
}
else
Expand All @@ -276,11 +276,11 @@ void CRenderTools::RenderTee(CAnimState *pAnim, const CTeeRenderInfo *pInfo, int
float cs = 1.0f; // color scale
if(Indicate)
cs = 0.5f;
Graphics()->SetColor(pInfo->m_aColors[SKINPART_FEET].r*cs, pInfo->m_aColors[SKINPART_FEET].g*cs, pInfo->m_aColors[SKINPART_FEET].b*cs, pInfo->m_aColors[SKINPART_FEET].a);
Graphics()->SetColor(pInfo->m_aColors[SKINPART_FEET].r * cs * Alpha, pInfo->m_aColors[SKINPART_FEET].g * cs * Alpha, pInfo->m_aColors[SKINPART_FEET].b * cs * Alpha, pInfo->m_aColors[SKINPART_FEET].a * Alpha);
SelectSprite(SPRITE_TEE_FOOT, 0, 0, 0);
}

IGraphics::CQuadItem QuadItem(Position.x+pFoot->m_X*AnimScale, Position.y+pFoot->m_Y*AnimScale, w, h);
IGraphics::CQuadItem QuadItem(Position.x + pFoot->m_X * AnimScale, Position.y + pFoot->m_Y * AnimScale, w, h);
Graphics()->QuadsDraw(&QuadItem, 1);
Graphics()->QuadsEnd();
}
Expand Down
2 changes: 1 addition & 1 deletion src/game/client/render.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ class CRenderTools
void RenderCursor(vec2 Center, float Size) { RenderCursor(Center.x, Center.y, Size); }

// object render methods
void RenderTee(class CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos);
void RenderTee(class CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha = 1.0f);
void RenderTeeHand(const CTeeRenderInfo *pInfo, vec2 CenterPos, vec2 Dir, float AngleOffset, vec2 PostRotOffset);

// map render methods (render_map.cpp)
Expand Down
1 change: 1 addition & 0 deletions src/game/variables.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ MACRO_CONFIG_INT(ClFilterchat, cl_filterchat, 0, 0, 2, CFGFLAG_CLIENT|CFGFLAG_SA
MACRO_CONFIG_INT(ClDisableWhisper, cl_disable_whisper, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Disable completely the whisper feature.")
MACRO_CONFIG_INT(ClShowsocial, cl_showsocial, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show social data like names, clans, chat etc.")
MACRO_CONFIG_INT(ClShowfps, cl_showfps, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show ingame FPS counter")
MACRO_CONFIG_INT(ClShowSkinChat, cl_show_skin_chat, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show player skin in the chat line")

MACRO_CONFIG_INT(ClAirjumpindicator, cl_airjumpindicator, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show double jump indicator")

Expand Down
Loading