Singleton class for generating and smoothly changing rainbow.
Offered API:
static CRainbowGenerator *GetInstance(); // Returns instance of generator
void Tick(); // Ticks Hue
unsigned Rainbow(int ClientId, unsigned OffsetMultiplier = 1) const; // Returns color in TW-code
Each ClientId holds individual offset to make different colors for every player.
If you want to make 2 different colors for single ClientId, use OffsetMultiplier, default is 1, increment it.
Smoothly 'ticking' hue:
void CGameContext::OnTick()
{
// some code
CRainbowGenerator::GetInstance()->Tick();
// some code
}
Apply rainbow to player skin and feet:
void CPlayer::Snap(int SnappingClient)
{
// some code
pClientInfo->m_UseCustomColor = m_Rainbow ? true : m_TeeInfos.m_UseCustomColor;
pClientInfo->m_ColorBody = m_Rainbow ? CRainbowGenerator::GetInstance()->Rainbow(m_ClientId) : m_TeeInfos.m_ColorBody;
pClientInfo->m_ColorFeet = m_Rainbow ? CRainbowGenerator::GetInstance()->Rainbow(m_ClientId) : m_TeeInfos.m_ColorFeet;
// some code
}
Apply rainbow to player skin and feet, make offset for feet:
void CPlayer::Snap(int SnappingClient)
{
// some code
pClientInfo->m_UseCustomColor = m_Rainbow ? true : m_TeeInfos.m_UseCustomColor;
pClientInfo->m_ColorBody = m_Rainbow ? CRainbowGenerator::GetInstance()->Rainbow(m_ClientId) : m_TeeInfos.m_ColorBody;
pClientInfo->m_ColorFeet = m_Rainbow ? CRainbowGenerator::GetInstance()->Rainbow(m_ClientId, 2) : m_TeeInfos.m_ColorFeet;
// some code
}