mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Minor refactoring of CAnimState
and tee rendering functions
- Use `nullptr` instead of `0`. - Remove dead code. - Mark functions and pointers as `const` when possible. - Remove unused argument of `CRenderTools::GetRenderTeeAnimScaleAndBaseSize` function. - Copy tee render info when rendering emote wheel instead of modifying global render info. - Fix names of static variables.
This commit is contained in:
parent
80c32061a7
commit
883fb8818c
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
#include "animstate.h"
|
#include "animstate.h"
|
||||||
|
|
||||||
static void AnimSeqEval(CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
|
static void AnimSeqEval(const CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
|
||||||
{
|
{
|
||||||
if(pSeq->m_NumFrames == 0)
|
if(pSeq->m_NumFrames == 0)
|
||||||
{
|
{
|
||||||
|
@ -21,9 +21,8 @@ static void AnimSeqEval(CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//time = maximum(0.0f, minimum(1.0f, time / duration)); // TODO: use clamp
|
CAnimKeyframe *pFrame1 = nullptr;
|
||||||
CAnimKeyframe *pFrame1 = 0;
|
CAnimKeyframe *pFrame2 = nullptr;
|
||||||
CAnimKeyframe *pFrame2 = 0;
|
|
||||||
float Blend = 0.0f;
|
float Blend = 0.0f;
|
||||||
|
|
||||||
// TODO: make this smarter.. binary search
|
// TODO: make this smarter.. binary search
|
||||||
|
@ -38,7 +37,7 @@ static void AnimSeqEval(CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(pFrame1 && pFrame2)
|
if(pFrame1 != nullptr && pFrame2 != nullptr)
|
||||||
{
|
{
|
||||||
pFrame->m_Time = Time;
|
pFrame->m_Time = Time;
|
||||||
pFrame->m_X = mix(pFrame1->m_X, pFrame2->m_X, Blend);
|
pFrame->m_X = mix(pFrame1->m_X, pFrame2->m_X, Blend);
|
||||||
|
@ -48,7 +47,7 @@ static void AnimSeqEval(CAnimSequence *pSeq, float Time, CAnimKeyframe *pFrame)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AnimAddKeyframe(CAnimKeyframe *pSeq, CAnimKeyframe *pAdded, float Amount)
|
static void AnimAddKeyframe(CAnimKeyframe *pSeq, const CAnimKeyframe *pAdded, float Amount)
|
||||||
{
|
{
|
||||||
// AnimSeqEval fills m_X for any case, clang-analyzer assumes going into the
|
// AnimSeqEval fills m_X for any case, clang-analyzer assumes going into the
|
||||||
// final else branch with pSeq->m_NumFrames < 2, which is impossible.
|
// final else branch with pSeq->m_NumFrames < 2, which is impossible.
|
||||||
|
@ -57,12 +56,12 @@ static void AnimAddKeyframe(CAnimKeyframe *pSeq, CAnimKeyframe *pAdded, float Am
|
||||||
pSeq->m_Angle += pAdded->m_Angle * Amount;
|
pSeq->m_Angle += pAdded->m_Angle * Amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AnimAdd(CAnimState *pState, CAnimState *pAdded, float Amount)
|
void CAnimState::AnimAdd(CAnimState *pState, const CAnimState *pAdded, float Amount)
|
||||||
{
|
{
|
||||||
AnimAddKeyframe(pState->GetBody(), pAdded->GetBody(), Amount);
|
AnimAddKeyframe(&pState->m_Body, pAdded->GetBody(), Amount);
|
||||||
AnimAddKeyframe(pState->GetBackFoot(), pAdded->GetBackFoot(), Amount);
|
AnimAddKeyframe(&pState->m_BackFoot, pAdded->GetBackFoot(), Amount);
|
||||||
AnimAddKeyframe(pState->GetFrontFoot(), pAdded->GetFrontFoot(), Amount);
|
AnimAddKeyframe(&pState->m_FrontFoot, pAdded->GetFrontFoot(), Amount);
|
||||||
AnimAddKeyframe(pState->GetAttach(), pAdded->GetAttach(), Amount);
|
AnimAddKeyframe(&pState->m_Attach, pAdded->GetAttach(), Amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAnimState::Set(CAnimation *pAnim, float Time)
|
void CAnimState::Set(CAnimation *pAnim, float Time)
|
||||||
|
@ -80,17 +79,17 @@ void CAnimState::Add(CAnimation *pAnim, float Time, float Amount)
|
||||||
AnimAdd(this, &Add, Amount);
|
AnimAdd(this, &Add, Amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
CAnimState *CAnimState::GetIdle()
|
const CAnimState *CAnimState::GetIdle()
|
||||||
{
|
{
|
||||||
static CAnimState State;
|
static CAnimState s_State;
|
||||||
static bool Init = true;
|
static bool s_Init = true;
|
||||||
|
|
||||||
if(Init)
|
if(s_Init)
|
||||||
{
|
{
|
||||||
State.Set(&g_pData->m_aAnimations[ANIM_BASE], 0);
|
s_State.Set(&g_pData->m_aAnimations[ANIM_BASE], 0.0f);
|
||||||
State.Add(&g_pData->m_aAnimations[ANIM_IDLE], 0, 1.0f);
|
s_State.Add(&g_pData->m_aAnimations[ANIM_IDLE], 0.0f, 1.0f);
|
||||||
Init = false;
|
s_Init = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return &State;
|
return &s_State;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,15 +12,17 @@ class CAnimState
|
||||||
CAnimKeyframe m_FrontFoot;
|
CAnimKeyframe m_FrontFoot;
|
||||||
CAnimKeyframe m_Attach;
|
CAnimKeyframe m_Attach;
|
||||||
|
|
||||||
|
void AnimAdd(CAnimState *pState, const CAnimState *pAdded, float Amount);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CAnimKeyframe *GetBody() { return &m_Body; }
|
const CAnimKeyframe *GetBody() const { return &m_Body; }
|
||||||
CAnimKeyframe *GetBackFoot() { return &m_BackFoot; }
|
const CAnimKeyframe *GetBackFoot() const { return &m_BackFoot; }
|
||||||
CAnimKeyframe *GetFrontFoot() { return &m_FrontFoot; }
|
const CAnimKeyframe *GetFrontFoot() const { return &m_FrontFoot; }
|
||||||
CAnimKeyframe *GetAttach() { return &m_Attach; }
|
const CAnimKeyframe *GetAttach() const { return &m_Attach; }
|
||||||
void Set(CAnimation *pAnim, float Time);
|
void Set(CAnimation *pAnim, float Time);
|
||||||
void Add(CAnimation *pAnim, float Time, float Amount);
|
void Add(CAnimation *pAnim, float Time, float Amount);
|
||||||
|
|
||||||
static CAnimState *GetIdle();
|
const static CAnimState *GetIdle();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1179,7 +1179,7 @@ void CChat::OnRender()
|
||||||
float OffsetTeeY = MESSAGE_TEE_SIZE / 2.0f;
|
float OffsetTeeY = MESSAGE_TEE_SIZE / 2.0f;
|
||||||
float FullHeightMinusTee = RowHeight - MESSAGE_TEE_SIZE;
|
float FullHeightMinusTee = RowHeight - MESSAGE_TEE_SIZE;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &RenderInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &RenderInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(x + (RealMsgPaddingX + MESSAGE_TEE_SIZE) / 2.0f, y + OffsetTeeY + FullHeightMinusTee / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(x + (RealMsgPaddingX + MESSAGE_TEE_SIZE) / 2.0f, y + OffsetTeeY + FullHeightMinusTee / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -135,7 +135,7 @@ void CEmoticon::OnRender()
|
||||||
Graphics()->DrawCircle(Screen.w / 2, Screen.h / 2, 100.0f, 64);
|
Graphics()->DrawCircle(Screen.w / 2, Screen.h / 2, 100.0f, 64);
|
||||||
Graphics()->QuadsEnd();
|
Graphics()->QuadsEnd();
|
||||||
|
|
||||||
CTeeRenderInfo *pTeeInfo = &m_pClient->m_aClients[m_pClient->m_aLocalIDs[g_Config.m_ClDummy]].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[m_pClient->m_aLocalIDs[g_Config.m_ClDummy]].m_RenderInfo;
|
||||||
|
|
||||||
for(int i = 0; i < NUM_EMOTES; i++)
|
for(int i = 0; i < NUM_EMOTES; i++)
|
||||||
{
|
{
|
||||||
|
@ -143,12 +143,11 @@ void CEmoticon::OnRender()
|
||||||
if(Angle > pi)
|
if(Angle > pi)
|
||||||
Angle -= 2 * pi;
|
Angle -= 2 * pi;
|
||||||
|
|
||||||
bool Selected = m_SelectedEyeEmote == i;
|
const bool Selected = m_SelectedEyeEmote == i;
|
||||||
|
|
||||||
const vec2 Nudge = direction(Angle) * 70.0f;
|
const vec2 Nudge = direction(Angle) * 70.0f;
|
||||||
pTeeInfo->m_Size = Selected ? 64.0f : 48.0f;
|
TeeInfo.m_Size = Selected ? 64.0f : 48.0f;
|
||||||
RenderTools()->RenderTee(CAnimState::GetIdle(), pTeeInfo, i, vec2(-1, 0), vec2(Screen.w / 2 + Nudge.x, Screen.h / 2 + Nudge.y));
|
RenderTools()->RenderTee(CAnimState::GetIdle(), &TeeInfo, i, vec2(-1, 0), vec2(Screen.w / 2 + Nudge.x, Screen.h / 2 + Nudge.y));
|
||||||
pTeeInfo->m_Size = 64.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Graphics()->TextureClear();
|
Graphics()->TextureClear();
|
||||||
|
|
|
@ -269,7 +269,7 @@ void CHud::RenderScoreHud()
|
||||||
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[ID].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[ID].m_RenderInfo;
|
||||||
TeeInfo.m_Size = ScoreSingleBoxHeight;
|
TeeInfo.m_Size = ScoreSingleBoxHeight;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(m_Width - ScoreWidthMax - TeeInfo.m_Size / 2 - Split, StartY + (t * 20) + ScoreSingleBoxHeight / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(m_Width - ScoreWidthMax - TeeInfo.m_Size / 2 - Split, StartY + (t * 20) + ScoreSingleBoxHeight / 2.0f + OffsetToMid.y);
|
||||||
|
@ -432,7 +432,7 @@ void CHud::RenderScoreHud()
|
||||||
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[ID].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[ID].m_RenderInfo;
|
||||||
TeeInfo.m_Size = ScoreSingleBoxHeight;
|
TeeInfo.m_Size = ScoreSingleBoxHeight;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(m_Width - ScoreWidthMax - TeeInfo.m_Size / 2 - Split, StartY + (t * 20) + ScoreSingleBoxHeight / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(m_Width - ScoreWidthMax - TeeInfo.m_Size / 2 - Split, StartY + (t * 20) + ScoreSingleBoxHeight / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -320,7 +320,7 @@ void CKillMessages::OnRender()
|
||||||
{
|
{
|
||||||
CTeeRenderInfo TeeInfo = m_aKillmsgs[r].m_VictimRenderInfo[j];
|
CTeeRenderInfo TeeInfo = m_aKillmsgs[r].m_VictimRenderInfo[j];
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(x, y + 46.0f / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(x, y + 46.0f / 2.0f + OffsetToMid.y);
|
||||||
|
@ -366,7 +366,7 @@ void CKillMessages::OnRender()
|
||||||
{
|
{
|
||||||
CTeeRenderInfo TeeInfo = m_aKillmsgs[r].m_KillerRenderInfo;
|
CTeeRenderInfo TeeInfo = m_aKillmsgs[r].m_KillerRenderInfo;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(x, y + 46.0f / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(x, y + 46.0f / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -1237,7 +1237,7 @@ void CMenus::RenderServerbrowserServerDetail(CUIRect View)
|
||||||
}
|
}
|
||||||
TeeInfo.m_Size = minimum(Skin.w, Skin.h);
|
TeeInfo.m_Size = minimum(Skin.w, Skin.h);
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(Skin.x + TeeInfo.m_Size / 2, Skin.y + Skin.h / 2 + OffsetToMid.y);
|
vec2 TeeRenderPos(Skin.x + TeeInfo.m_Size / 2, Skin.y + Skin.h / 2 + OffsetToMid.y);
|
||||||
|
@ -1497,7 +1497,7 @@ void CMenus::RenderServerbrowserFriends(CUIRect View)
|
||||||
}
|
}
|
||||||
TeeInfo.m_Size = minimum(Skin.w, Skin.h);
|
TeeInfo.m_Size = minimum(Skin.w, Skin.h);
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(Skin.x + Skin.w / 2.0f, Skin.y + Skin.h * 0.55f + OffsetToMid.y);
|
vec2 TeeRenderPos(Skin.x + Skin.w / 2.0f, Skin.y + Skin.h * 0.55f + OffsetToMid.y);
|
||||||
|
|
|
@ -301,7 +301,7 @@ void CMenus::RenderPlayers(CUIRect MainView)
|
||||||
CTeeRenderInfo TeeInfo = CurrentClient.m_RenderInfo;
|
CTeeRenderInfo TeeInfo = CurrentClient.m_RenderInfo;
|
||||||
TeeInfo.m_Size = Button.h;
|
TeeInfo.m_Size = Button.h;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(Button.x + Button.h / 2, Button.y + Button.h / 2 + OffsetToMid.y);
|
vec2 TeeRenderPos(Button.x + Button.h / 2, Button.y + Button.h / 2 + OffsetToMid.y);
|
||||||
|
@ -603,7 +603,7 @@ bool CMenus::RenderServerControlKick(CUIRect MainView, bool FilterSpectators)
|
||||||
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[aPlayerIDs[i]].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[aPlayerIDs[i]].m_RenderInfo;
|
||||||
TeeInfo.m_Size = TeeRect.h;
|
TeeInfo.m_Size = TeeRect.h;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(TeeRect.x + TeeInfo.m_Size / 2, TeeRect.y + TeeInfo.m_Size / 2 + OffsetToMid.y);
|
vec2 TeeRenderPos(TeeRect.x + TeeInfo.m_Size / 2, TeeRect.y + TeeInfo.m_Size / 2 + OffsetToMid.y);
|
||||||
|
|
|
@ -586,7 +586,7 @@ void CMenus::RenderSettingsTee(CUIRect MainView)
|
||||||
|
|
||||||
MainView.HSplitTop(50.0f, &Label, &MainView);
|
MainView.HSplitTop(50.0f, &Label, &MainView);
|
||||||
Label.VSplitLeft(260.0f, &Label, 0);
|
Label.VSplitLeft(260.0f, &Label, 0);
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &OwnSkinInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &OwnSkinInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(Label.x + 30.0f, Label.y + Label.h / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(Label.x + 30.0f, Label.y + Label.h / 2.0f + OffsetToMid.y);
|
||||||
|
@ -2688,7 +2688,7 @@ void CMenus::RenderSettingsAppearance(CUIRect MainView)
|
||||||
|
|
||||||
str_copy(aBuf, Client()->PlayerName());
|
str_copy(aBuf, Client()->PlayerName());
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
constexpr int PreviewTeeCount = 4;
|
constexpr int PreviewTeeCount = 4;
|
||||||
constexpr float RealTeeSize = CChat::MESSAGE_TEE_SIZE * 2;
|
constexpr float RealTeeSize = CChat::MESSAGE_TEE_SIZE * 2;
|
||||||
constexpr float RealTeeSizeHalved = CChat::MESSAGE_TEE_SIZE;
|
constexpr float RealTeeSizeHalved = CChat::MESSAGE_TEE_SIZE;
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include <base/color.h>
|
#include <base/color.h>
|
||||||
#include <base/math.h>
|
#include <base/math.h>
|
||||||
|
|
||||||
void CPlayers::RenderHand(CTeeRenderInfo *pInfo, vec2 CenterPos, vec2 Dir, float AngleOffset, vec2 PostRotOffset, float Alpha)
|
void CPlayers::RenderHand(const CTeeRenderInfo *pInfo, vec2 CenterPos, vec2 Dir, float AngleOffset, vec2 PostRotOffset, float Alpha)
|
||||||
{
|
{
|
||||||
vec2 HandPos = CenterPos + Dir;
|
vec2 HandPos = CenterPos + Dir;
|
||||||
float Angle = angle(Dir);
|
float Angle = angle(Dir);
|
||||||
|
@ -666,7 +666,7 @@ void CPlayers::RenderPlayer(
|
||||||
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
|
RenderTools()->RenderTee(&State, &RenderInfo, Player.m_Emote, Direction, Position, Alpha);
|
||||||
|
|
||||||
float TeeAnimScale, TeeBaseSize;
|
float TeeAnimScale, TeeBaseSize;
|
||||||
RenderTools()->GetRenderTeeAnimScaleAndBaseSize(&State, &RenderInfo, TeeAnimScale, TeeBaseSize);
|
RenderTools()->GetRenderTeeAnimScaleAndBaseSize(&RenderInfo, TeeAnimScale, TeeBaseSize);
|
||||||
vec2 BodyPos = Position + vec2(State.GetBody()->m_X, State.GetBody()->m_Y) * TeeAnimScale;
|
vec2 BodyPos = Position + vec2(State.GetBody()->m_X, State.GetBody()->m_Y) * TeeAnimScale;
|
||||||
if(RenderInfo.m_TeeRenderFlags & TEE_EFFECT_FROZEN)
|
if(RenderInfo.m_TeeRenderFlags & TEE_EFFECT_FROZEN)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,7 @@ class CPlayers : public CComponent
|
||||||
|
|
||||||
CTeeRenderInfo m_RenderInfoSpec;
|
CTeeRenderInfo m_RenderInfoSpec;
|
||||||
CTeeRenderInfo m_aRenderInfo[MAX_CLIENTS];
|
CTeeRenderInfo m_aRenderInfo[MAX_CLIENTS];
|
||||||
void RenderHand(class CTeeRenderInfo *pInfo, vec2 CenterPos, vec2 Dir, float AngleOffset, vec2 PostRotOffset, float Alpha = 1.0f);
|
void RenderHand(const CTeeRenderInfo *pInfo, vec2 CenterPos, vec2 Dir, float AngleOffset, vec2 PostRotOffset, float Alpha = 1.0f);
|
||||||
void RenderPlayer(
|
void RenderPlayer(
|
||||||
const CNetObj_Character *pPrevChar,
|
const CNetObj_Character *pPrevChar,
|
||||||
const CNetObj_Character *pPlayerChar,
|
const CNetObj_Character *pPlayerChar,
|
||||||
|
|
|
@ -432,7 +432,7 @@ void CScoreboard::RenderScoreboard(float x, float y, float w, int Team, const ch
|
||||||
// avatar
|
// avatar
|
||||||
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[pInfo->m_ClientID].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[pInfo->m_ClientID].m_RenderInfo;
|
||||||
TeeInfo.m_Size *= TeeSizeMod;
|
TeeInfo.m_Size *= TeeSizeMod;
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(TeeOffset + TeeLength / 2, y + LineHeight / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(TeeOffset + TeeLength / 2, y + LineHeight / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -390,7 +390,7 @@ void CSpectator::OnRender()
|
||||||
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[m_pClient->m_Snap.m_apInfoByDDTeamName[i]->m_ClientID].m_RenderInfo;
|
CTeeRenderInfo TeeInfo = m_pClient->m_aClients[m_pClient->m_Snap.m_apInfoByDDTeamName[i]->m_ClientID].m_RenderInfo;
|
||||||
TeeInfo.m_Size *= TeeSizeMod;
|
TeeInfo.m_Size *= TeeSizeMod;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &TeeInfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(Width / 2.0f + x + 20.0f, Height / 2.0f + y + BoxMove + LineHeight / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(Width / 2.0f + x + 20.0f, Height / 2.0f + y + BoxMove + LineHeight / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -276,7 +276,7 @@ void CStatboard::RenderGlobalStats()
|
||||||
CTeeRenderInfo Teeinfo = m_pClient->m_aClients[pInfo->m_ClientID].m_RenderInfo;
|
CTeeRenderInfo Teeinfo = m_pClient->m_aClients[pInfo->m_ClientID].m_RenderInfo;
|
||||||
Teeinfo.m_Size *= TeeSizemod;
|
Teeinfo.m_Size *= TeeSizemod;
|
||||||
|
|
||||||
CAnimState *pIdleState = CAnimState::GetIdle();
|
const CAnimState *pIdleState = CAnimState::GetIdle();
|
||||||
vec2 OffsetToMid;
|
vec2 OffsetToMid;
|
||||||
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &Teeinfo, OffsetToMid);
|
RenderTools()->GetRenderTeeOffsetToRenderedTee(pIdleState, &Teeinfo, OffsetToMid);
|
||||||
vec2 TeeRenderPos(x + Teeinfo.m_Size / 2, y + LineHeight / 2.0f + OffsetToMid.y);
|
vec2 TeeRenderPos(x + Teeinfo.m_Size / 2, y + LineHeight / 2.0f + OffsetToMid.y);
|
||||||
|
|
|
@ -176,7 +176,7 @@ int CRenderTools::QuadContainerAddSprite(int QuadContainerIndex, float X, float
|
||||||
return Graphics()->QuadContainerAddQuads(QuadContainerIndex, &QuadItem, 1);
|
return Graphics()->QuadContainerAddQuads(QuadContainerIndex, &QuadItem, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderTools::GetRenderTeeAnimScaleAndBaseSize(CAnimState *pAnim, CTeeRenderInfo *pInfo, float &AnimScale, float &BaseSize)
|
void CRenderTools::GetRenderTeeAnimScaleAndBaseSize(const CTeeRenderInfo *pInfo, float &AnimScale, float &BaseSize)
|
||||||
{
|
{
|
||||||
AnimScale = pInfo->m_Size * 1.0f / 64.0f;
|
AnimScale = pInfo->m_Size * 1.0f / 64.0f;
|
||||||
BaseSize = pInfo->m_Size;
|
BaseSize = pInfo->m_Size;
|
||||||
|
@ -194,10 +194,10 @@ void CRenderTools::GetRenderTeeFeetScale(float BaseSize, float &FeetScaleWidth,
|
||||||
FeetScaleHeight = (BaseSize / 2) / 32.0f;
|
FeetScaleHeight = (BaseSize / 2) / 32.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderTools::GetRenderTeeBodySize(CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &BodyOffset, float &Width, float &Height)
|
void CRenderTools::GetRenderTeeBodySize(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &BodyOffset, float &Width, float &Height)
|
||||||
{
|
{
|
||||||
float AnimScale, BaseSize;
|
float AnimScale, BaseSize;
|
||||||
GetRenderTeeAnimScaleAndBaseSize(pAnim, pInfo, AnimScale, BaseSize);
|
GetRenderTeeAnimScaleAndBaseSize(pInfo, AnimScale, BaseSize);
|
||||||
|
|
||||||
float BodyScale;
|
float BodyScale;
|
||||||
GetRenderTeeBodyScale(BaseSize, BodyScale);
|
GetRenderTeeBodyScale(BaseSize, BodyScale);
|
||||||
|
@ -208,10 +208,10 @@ void CRenderTools::GetRenderTeeBodySize(CAnimState *pAnim, CTeeRenderInfo *pInfo
|
||||||
BodyOffset.y = pInfo->m_SkinMetrics.m_Body.OffsetYNormalized() * 64.0f * BodyScale;
|
BodyOffset.y = pInfo->m_SkinMetrics.m_Body.OffsetYNormalized() * 64.0f * BodyScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderTools::GetRenderTeeFeetSize(CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &FeetOffset, float &Width, float &Height)
|
void CRenderTools::GetRenderTeeFeetSize(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &FeetOffset, float &Width, float &Height)
|
||||||
{
|
{
|
||||||
float AnimScale, BaseSize;
|
float AnimScale, BaseSize;
|
||||||
GetRenderTeeAnimScaleAndBaseSize(pAnim, pInfo, AnimScale, BaseSize);
|
GetRenderTeeAnimScaleAndBaseSize(pInfo, AnimScale, BaseSize);
|
||||||
|
|
||||||
float FeetScaleWidth, FeetScaleHeight;
|
float FeetScaleWidth, FeetScaleHeight;
|
||||||
GetRenderTeeFeetScale(BaseSize, FeetScaleWidth, FeetScaleHeight);
|
GetRenderTeeFeetScale(BaseSize, FeetScaleWidth, FeetScaleHeight);
|
||||||
|
@ -222,17 +222,17 @@ void CRenderTools::GetRenderTeeFeetSize(CAnimState *pAnim, CTeeRenderInfo *pInfo
|
||||||
FeetOffset.y = pInfo->m_SkinMetrics.m_Feet.OffsetYNormalized() * 32.0f * FeetScaleHeight;
|
FeetOffset.y = pInfo->m_SkinMetrics.m_Feet.OffsetYNormalized() * 32.0f * FeetScaleHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderTools::GetRenderTeeOffsetToRenderedTee(CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &TeeOffsetToMid)
|
void CRenderTools::GetRenderTeeOffsetToRenderedTee(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &TeeOffsetToMid)
|
||||||
{
|
{
|
||||||
float AnimScale, BaseSize;
|
float AnimScale, BaseSize;
|
||||||
GetRenderTeeAnimScaleAndBaseSize(pAnim, pInfo, AnimScale, BaseSize);
|
GetRenderTeeAnimScaleAndBaseSize(pInfo, AnimScale, BaseSize);
|
||||||
vec2 BodyPos = vec2(pAnim->GetBody()->m_X, pAnim->GetBody()->m_Y) * AnimScale;
|
vec2 BodyPos = vec2(pAnim->GetBody()->m_X, pAnim->GetBody()->m_Y) * AnimScale;
|
||||||
|
|
||||||
float AssumedScale = BaseSize / 64.0f;
|
float AssumedScale = BaseSize / 64.0f;
|
||||||
|
|
||||||
// just use the lowest feet
|
// just use the lowest feet
|
||||||
vec2 FeetPos;
|
vec2 FeetPos;
|
||||||
CAnimKeyframe *pFoot = pAnim->GetFrontFoot();
|
const CAnimKeyframe *pFoot = pAnim->GetFrontFoot();
|
||||||
FeetPos = vec2(pFoot->m_X * AnimScale, pFoot->m_Y * AnimScale);
|
FeetPos = vec2(pFoot->m_X * AnimScale, pFoot->m_Y * AnimScale);
|
||||||
pFoot = pAnim->GetBackFoot();
|
pFoot = pAnim->GetBackFoot();
|
||||||
FeetPos = vec2(FeetPos.x, maximum(FeetPos.y, pFoot->m_Y * AnimScale));
|
FeetPos = vec2(FeetPos.x, maximum(FeetPos.y, pFoot->m_Y * AnimScale));
|
||||||
|
@ -270,7 +270,7 @@ void CRenderTools::GetRenderTeeOffsetToRenderedTee(CAnimState *pAnim, CTeeRender
|
||||||
TeeOffsetToMid.y = -MidOfRendered;
|
TeeOffsetToMid.y = -MidOfRendered;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CRenderTools::RenderTee(CAnimState *pAnim, CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha)
|
void CRenderTools::RenderTee(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha)
|
||||||
{
|
{
|
||||||
vec2 Direction = Dir;
|
vec2 Direction = Dir;
|
||||||
vec2 Position = Pos;
|
vec2 Position = Pos;
|
||||||
|
@ -286,7 +286,7 @@ void CRenderTools::RenderTee(CAnimState *pAnim, CTeeRenderInfo *pInfo, int Emote
|
||||||
for(int f = 0; f < 2; f++)
|
for(int f = 0; f < 2; f++)
|
||||||
{
|
{
|
||||||
float AnimScale, BaseSize;
|
float AnimScale, BaseSize;
|
||||||
GetRenderTeeAnimScaleAndBaseSize(pAnim, pInfo, AnimScale, BaseSize);
|
GetRenderTeeAnimScaleAndBaseSize(pInfo, AnimScale, BaseSize);
|
||||||
if(f == 1)
|
if(f == 1)
|
||||||
{
|
{
|
||||||
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
|
Graphics()->QuadsSetRotation(pAnim->GetBody()->m_Angle * pi * 2);
|
||||||
|
@ -341,7 +341,7 @@ void CRenderTools::RenderTee(CAnimState *pAnim, CTeeRenderInfo *pInfo, int Emote
|
||||||
}
|
}
|
||||||
|
|
||||||
// draw feet
|
// draw feet
|
||||||
CAnimKeyframe *pFoot = f ? pAnim->GetFrontFoot() : pAnim->GetBackFoot();
|
const CAnimKeyframe *pFoot = f ? pAnim->GetFrontFoot() : pAnim->GetBackFoot();
|
||||||
|
|
||||||
float w = BaseSize;
|
float w = BaseSize;
|
||||||
float h = BaseSize / 2;
|
float h = BaseSize / 2;
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <game/client/skin.h>
|
#include <game/client/skin.h>
|
||||||
#include <game/client/ui_rect.h>
|
#include <game/client/ui_rect.h>
|
||||||
|
|
||||||
|
class CAnimState;
|
||||||
class CSpeedupTile;
|
class CSpeedupTile;
|
||||||
class CSwitchTile;
|
class CSwitchTile;
|
||||||
class CTeleTile;
|
class CTeleTile;
|
||||||
|
@ -106,14 +107,14 @@ public:
|
||||||
int QuadContainerAddSprite(int QuadContainerIndex, float X, float Y, float Width, float Height);
|
int QuadContainerAddSprite(int QuadContainerIndex, float X, float Y, float Width, float Height);
|
||||||
|
|
||||||
// larger rendering methods
|
// larger rendering methods
|
||||||
void GetRenderTeeBodySize(class CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &BodyOffset, float &Width, float &Height);
|
void GetRenderTeeBodySize(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &BodyOffset, float &Width, float &Height);
|
||||||
void GetRenderTeeFeetSize(class CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &FeetOffset, float &Width, float &Height);
|
void GetRenderTeeFeetSize(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &FeetOffset, float &Width, float &Height);
|
||||||
void GetRenderTeeAnimScaleAndBaseSize(class CAnimState *pAnim, CTeeRenderInfo *pInfo, float &AnimScale, float &BaseSize);
|
void GetRenderTeeAnimScaleAndBaseSize(const CTeeRenderInfo *pInfo, float &AnimScale, float &BaseSize);
|
||||||
|
|
||||||
// returns the offset to use, to render the tee with @see RenderTee exactly in the mid
|
// returns the offset to use, to render the tee with @see RenderTee exactly in the mid
|
||||||
void GetRenderTeeOffsetToRenderedTee(class CAnimState *pAnim, CTeeRenderInfo *pInfo, vec2 &TeeOffsetToMid);
|
void GetRenderTeeOffsetToRenderedTee(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, vec2 &TeeOffsetToMid);
|
||||||
// object render methods
|
// object render methods
|
||||||
void RenderTee(class CAnimState *pAnim, CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha = 1.0f);
|
void RenderTee(const CAnimState *pAnim, const CTeeRenderInfo *pInfo, int Emote, vec2 Dir, vec2 Pos, float Alpha = 1.0f);
|
||||||
|
|
||||||
// map render methods (render_map.cpp)
|
// map render methods (render_map.cpp)
|
||||||
static void RenderEvalEnvelope(CEnvPoint *pPoints, int NumPoints, int Channels, std::chrono::nanoseconds TimeNanos, ColorRGBA &Result);
|
static void RenderEvalEnvelope(CEnvPoint *pPoints, int NumPoints, int Channels, std::chrono::nanoseconds TimeNanos, ColorRGBA &Result);
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
struct SSkinMetricVariableInt
|
struct SSkinMetricVariableInt
|
||||||
{
|
{
|
||||||
int m_Value;
|
int m_Value;
|
||||||
operator int() { return m_Value; }
|
operator int() const { return m_Value; }
|
||||||
SSkinMetricVariableInt &operator=(int NewVal)
|
SSkinMetricVariableInt &operator=(int NewVal)
|
||||||
{
|
{
|
||||||
if(IsSizeType)
|
if(IsSizeType)
|
||||||
|
@ -82,22 +82,22 @@ public:
|
||||||
SSkinMetricVariableInt<true> m_MaxWidth;
|
SSkinMetricVariableInt<true> m_MaxWidth;
|
||||||
SSkinMetricVariableInt<true> m_MaxHeight;
|
SSkinMetricVariableInt<true> m_MaxHeight;
|
||||||
|
|
||||||
float WidthNormalized()
|
float WidthNormalized() const
|
||||||
{
|
{
|
||||||
return (float)m_Width / (float)m_MaxWidth;
|
return (float)m_Width / (float)m_MaxWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
float HeightNormalized()
|
float HeightNormalized() const
|
||||||
{
|
{
|
||||||
return (float)m_Height / (float)m_MaxHeight;
|
return (float)m_Height / (float)m_MaxHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
float OffsetXNormalized()
|
float OffsetXNormalized() const
|
||||||
{
|
{
|
||||||
return (float)m_OffsetX / (float)m_MaxWidth;
|
return (float)m_OffsetX / (float)m_MaxWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
float OffsetYNormalized()
|
float OffsetYNormalized() const
|
||||||
{
|
{
|
||||||
return (float)m_OffsetY / (float)m_MaxHeight;
|
return (float)m_OffsetY / (float)m_MaxHeight;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue