mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-18 22:18:19 +00:00
Cl_text_entities_size (#1632)
* new command added * fix code duplication after merge * merge #1632 suggestions * align the texture to the center vertically * refactor * fix RenderSwitchOverlay * Update src/engine/client/text.cpp Co-Authored-By: BannZay <bannzay3@gmail.com> * Apply suggestions from code review Co-Authored-By: BannZay <bannzay3@gmail.com> * Apply suggestions from code review * Apply suggestions from code review Co-Authored-By: BannZay <bannzay3@gmail.com> * Apply suggestions from code review
This commit is contained in:
parent
76f2a5965f
commit
0fffd7705f
|
@ -1698,64 +1698,14 @@ public:
|
||||||
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UploadEntityLayerText(int TextureID, const char *pText, int Length, float x, float y, int Size, int MaxWidth, int MaxSize = -1, int MinSize = -1)
|
virtual void UploadEntityLayerText(int TextureID, const char *pText, int Length, float x, float y, int FontSize)
|
||||||
{
|
{
|
||||||
|
const char *pCurrent = (char *)pText;
|
||||||
|
const char *pEnd = pCurrent + Length;
|
||||||
CFont *pFont = m_pDefaultFont;
|
CFont *pFont = m_pDefaultFont;
|
||||||
FT_Bitmap *pBitmap;
|
FT_Bitmap *pBitmap;
|
||||||
|
|
||||||
if(!pFont)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// set length
|
|
||||||
if(Length < 0)
|
|
||||||
Length = str_length(pText);
|
|
||||||
|
|
||||||
const char *pCurrent = (char *)pText;
|
|
||||||
const char *pEnd = pCurrent+Length;
|
|
||||||
|
|
||||||
int WidthLastChars = 0;
|
int WidthLastChars = 0;
|
||||||
|
|
||||||
int FontSize = Size;
|
|
||||||
|
|
||||||
//adjust font size by the full space
|
|
||||||
if(Size == -1)
|
|
||||||
{
|
|
||||||
int WidthOfText = 0;
|
|
||||||
FT_Set_Pixel_Sizes(pFont->m_FtFace, 0, 100);
|
|
||||||
while(pCurrent < pEnd)
|
|
||||||
{
|
|
||||||
const char *pTmp = pCurrent;
|
|
||||||
int NextCharacter = str_utf8_decode(&pTmp);
|
|
||||||
|
|
||||||
if(NextCharacter)
|
|
||||||
{
|
|
||||||
FT_Int32 FTFlags = 0;
|
|
||||||
#if FREETYPE_MAJOR >= 2 && FREETYPE_MINOR >= 7 && (FREETYPE_MINOR > 7 || FREETYPE_PATCH >= 1)
|
|
||||||
FTFlags = FT_LOAD_BITMAP_METRICS_ONLY | FT_LOAD_NO_BITMAP;
|
|
||||||
#else
|
|
||||||
FTFlags = FT_LOAD_RENDER | FT_LOAD_NO_BITMAP;
|
|
||||||
#endif
|
|
||||||
if(FT_Load_Char(pFont->m_FtFace, NextCharacter, FTFlags))
|
|
||||||
{
|
|
||||||
dbg_msg("pFont", "error loading glyph %d", NextCharacter);
|
|
||||||
pCurrent = pTmp;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
WidthOfText += (pFont->m_FtFace->glyph->metrics.width >> 6) + 1;
|
|
||||||
}
|
|
||||||
pCurrent = pTmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
FontSize = 100.f / ((float)WidthOfText / (float)MaxWidth);
|
|
||||||
if(FontSize > MaxSize)
|
|
||||||
FontSize = MaxSize;
|
|
||||||
|
|
||||||
pCurrent = (char *)pText;
|
|
||||||
pEnd = pCurrent + Length;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while(pCurrent < pEnd)
|
while(pCurrent < pEnd)
|
||||||
{
|
{
|
||||||
const char *pTmp = pCurrent;
|
const char *pTmp = pCurrent;
|
||||||
|
@ -1776,17 +1726,14 @@ public:
|
||||||
|
|
||||||
pBitmap = &pFont->m_FtFace->glyph->bitmap; // ignore_convention
|
pBitmap = &pFont->m_FtFace->glyph->bitmap; // ignore_convention
|
||||||
|
|
||||||
int MaxSizeWidth = (MaxWidth - WidthLastChars);
|
int SlotW = pBitmap->width;
|
||||||
if(MaxSizeWidth > 0)
|
int SlotH = pBitmap->rows;
|
||||||
{
|
int SlotSize = SlotW*SlotH;
|
||||||
int SlotW = ((((unsigned int)MaxSizeWidth) < pBitmap->width) ? MaxSizeWidth : pBitmap->width);
|
|
||||||
int SlotH = pBitmap->rows;
|
|
||||||
int SlotSize = SlotW*SlotH;
|
|
||||||
|
|
||||||
// prepare glyph data
|
// prepare glyph data
|
||||||
mem_zero(ms_aGlyphData, SlotSize);
|
mem_zero(ms_aGlyphData, SlotSize);
|
||||||
|
|
||||||
if(pBitmap->pixel_mode == FT_PIXEL_MODE_GRAY) // ignore_convention
|
if(pBitmap->pixel_mode == FT_PIXEL_MODE_GRAY) // ignore_convention
|
||||||
{
|
{
|
||||||
for(py = 0; py < (unsigned)SlotH; py++) // ignore_convention
|
for(py = 0; py < (unsigned)SlotH; py++) // ignore_convention
|
||||||
for(px = 0; px < (unsigned)SlotW; px++)
|
for(px = 0; px < (unsigned)SlotW; px++)
|
||||||
|
@ -1795,14 +1742,62 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Graphics()->LoadTextureRawSub(TextureID, x + WidthLastChars, y, SlotW, SlotH, CImageInfo::FORMAT_ALPHA, ms_aGlyphData);
|
Graphics()->LoadTextureRawSub(TextureID, x + WidthLastChars, y, SlotW, SlotH, CImageInfo::FORMAT_ALPHA, ms_aGlyphData);
|
||||||
WidthLastChars += (SlotW + 1);
|
WidthLastChars += (SlotW + 1);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pCurrent = pTmp;
|
pCurrent = pTmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual int AdjustFontSize(const char *pText, int TextLength, int MaxSize = -1)
|
||||||
|
{
|
||||||
|
int WidthOfText = CalculateTextWidth(pText, TextLength, 0, 100);
|
||||||
|
|
||||||
|
int FontSize = 100.f / ((float)WidthOfText / (float)MaxSize);
|
||||||
|
|
||||||
|
if (MaxSize > 0 && FontSize > MaxSize)
|
||||||
|
FontSize = MaxSize;
|
||||||
|
|
||||||
|
return FontSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int CalculateTextWidth(const char *pText, int TextLength, int FontWidth, int FontHeight)
|
||||||
|
{
|
||||||
|
CFont *pFont = m_pDefaultFont;
|
||||||
|
const char *pCurrent = (char *)pText;
|
||||||
|
const char *pEnd = pCurrent + TextLength;
|
||||||
|
|
||||||
|
int WidthOfText = 0;
|
||||||
|
FT_Set_Pixel_Sizes(pFont->m_FtFace, FontWidth, FontHeight);
|
||||||
|
while (pCurrent < pEnd)
|
||||||
|
{
|
||||||
|
const char *pTmp = pCurrent;
|
||||||
|
int NextCharacter = str_utf8_decode(&pTmp);
|
||||||
|
|
||||||
|
if(NextCharacter)
|
||||||
|
{
|
||||||
|
FT_Int32 FTFlags = 0;
|
||||||
|
#if FREETYPE_MAJOR >= 2 && FREETYPE_MINOR >= 7 && (FREETYPE_MINOR > 7 || FREETYPE_PATCH >= 1)
|
||||||
|
FTFlags = FT_LOAD_BITMAP_METRICS_ONLY | FT_LOAD_NO_BITMAP;
|
||||||
|
#else
|
||||||
|
FTFlags = FT_LOAD_RENDER | FT_LOAD_NO_BITMAP;
|
||||||
|
#endif
|
||||||
|
if(FT_Load_Char(pFont->m_FtFace, NextCharacter, FTFlags))
|
||||||
|
{
|
||||||
|
dbg_msg("pFont", "error loading glyph %d", NextCharacter);
|
||||||
|
pCurrent = pTmp;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
WidthOfText += (pFont->m_FtFace->glyph->metrics.width >> 6) + 1;
|
||||||
|
}
|
||||||
|
pCurrent = pTmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
return WidthOfText;
|
||||||
|
}
|
||||||
|
|
||||||
virtual void OnWindowResize()
|
virtual void OnWindowResize()
|
||||||
{
|
{
|
||||||
bool FoundTextContainer = false;
|
bool FoundTextContainer = false;
|
||||||
|
|
|
@ -98,7 +98,8 @@ public:
|
||||||
virtual void RenderTextContainer(int TextContainerIndex, STextRenderColor *pTextColor, STextRenderColor *pTextOutlineColor) = 0;
|
virtual void RenderTextContainer(int TextContainerIndex, STextRenderColor *pTextColor, STextRenderColor *pTextOutlineColor) = 0;
|
||||||
virtual void RenderTextContainer(int TextContainerIndex, STextRenderColor *pTextColor, STextRenderColor *pTextOutlineColor, float X, float Y) = 0;
|
virtual void RenderTextContainer(int TextContainerIndex, STextRenderColor *pTextColor, STextRenderColor *pTextOutlineColor, float X, float Y) = 0;
|
||||||
|
|
||||||
virtual void UploadEntityLayerText(int TextureID, const char *pText, int Length, float x, float y, int Size, int MaxWidth, int MaxSize = -1, int MinSize = -1) = 0;
|
virtual void UploadEntityLayerText(int TextureID, const char *pText, int Length, float x, float y, int FontHeight) = 0;
|
||||||
|
virtual int AdjustFontSize(const char *pText, int TextLength, int MaxSize = -1) = 0;
|
||||||
|
|
||||||
// old foolish interface
|
// old foolish interface
|
||||||
virtual void TextColor(float r, float g, float b, float a) = 0;
|
virtual void TextColor(float r, float g, float b, float a) = 0;
|
||||||
|
|
|
@ -10,72 +10,23 @@
|
||||||
|
|
||||||
#include "mapimages.h"
|
#include "mapimages.h"
|
||||||
|
|
||||||
CMapImages::CMapImages()
|
CMapImages::CMapImages() : CMapImages(100)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CMapImages::CMapImages(int TextureSize)
|
||||||
{
|
{
|
||||||
m_Count = 0;
|
m_Count = 0;
|
||||||
m_EntitiesTextures = -1;
|
m_EntitiesTextures = -1;
|
||||||
m_OverlayBottomTexture = -1;
|
m_OverlayBottomTexture = -1;
|
||||||
m_OverlayTopTexture = -1;
|
m_OverlayTopTexture = -1;
|
||||||
m_OverlayCenterTexture = -1;
|
m_OverlayCenterTexture = -1;
|
||||||
|
m_TextureScale = TextureSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMapImages::OnInit()
|
void CMapImages::OnInit()
|
||||||
{
|
{
|
||||||
//TODO: improve this a bit -- with better from sizes etc.
|
InitOverlayTextures();
|
||||||
if(m_OverlayBottomTexture == -1)
|
|
||||||
{
|
|
||||||
void *pMem = calloc(1024 * 1024, 1);
|
|
||||||
m_OverlayBottomTexture = Graphics()->LoadTextureRaw(1024, 1024, CImageInfo::FORMAT_ALPHA, pMem, CImageInfo::FORMAT_ALPHA, IGraphics::TEXLOAD_NOMIPMAPS);
|
|
||||||
free(pMem);
|
|
||||||
|
|
||||||
for(int i = 0; i < 256; ++i)
|
|
||||||
{
|
|
||||||
char buff[4];
|
|
||||||
str_format(buff, 4, "%d", i);
|
|
||||||
|
|
||||||
float x = (i%16) * 64;
|
|
||||||
float y = (i/16) * 64;
|
|
||||||
TextRender()->UploadEntityLayerText(m_OverlayBottomTexture, buff, -1, x+1, y + 12 + 32, 20, 64-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(m_OverlayTopTexture == -1)
|
|
||||||
{
|
|
||||||
void *pMem = calloc(1024 * 1024, 1);
|
|
||||||
m_OverlayTopTexture = Graphics()->LoadTextureRaw(1024, 1024, CImageInfo::FORMAT_ALPHA, pMem, CImageInfo::FORMAT_ALPHA, IGraphics::TEXLOAD_NOMIPMAPS);
|
|
||||||
free(pMem);
|
|
||||||
|
|
||||||
for(int i = 0; i < 256; ++i)
|
|
||||||
{
|
|
||||||
char buff[4];
|
|
||||||
str_format(buff, 4, "%d", i);
|
|
||||||
|
|
||||||
float x = (i%16) * 64;
|
|
||||||
float y = (i/16) * 64;
|
|
||||||
TextRender()->UploadEntityLayerText(m_OverlayTopTexture, buff, -1, x+1, y+1, 20, 64-1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(m_OverlayCenterTexture == -1)
|
|
||||||
{
|
|
||||||
void *pMem = calloc(1024 * 1024, 1);
|
|
||||||
m_OverlayCenterTexture = Graphics()->LoadTextureRaw(1024, 1024, CImageInfo::FORMAT_ALPHA, pMem, CImageInfo::FORMAT_ALPHA, IGraphics::TEXLOAD_NOMIPMAPS);
|
|
||||||
free(pMem);
|
|
||||||
|
|
||||||
for(int i = 0; i < 256; ++i)
|
|
||||||
{
|
|
||||||
char buff[4];
|
|
||||||
str_format(buff, 4, "%d", i);
|
|
||||||
int len = str_length(buff);
|
|
||||||
|
|
||||||
float x = (i%16) * 64;
|
|
||||||
float y = (i/16) * 64;
|
|
||||||
|
|
||||||
int MinSize = (len == 3 ? 20 : 50);
|
|
||||||
int OffY = (len == 3 ? 10 : 5);
|
|
||||||
int OffX = (len == 3 ? 5 : 1);
|
|
||||||
|
|
||||||
TextRender()->UploadEntityLayerText(m_OverlayCenterTexture, buff, -1, x + OffX, y + OffY, -1, 64-(OffX*2), 64, MinSize);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMapImages::OnMapLoad()
|
void CMapImages::OnMapLoad()
|
||||||
|
@ -196,3 +147,74 @@ int CMapImages::GetOverlayCenter()
|
||||||
{
|
{
|
||||||
return m_OverlayCenterTexture;
|
return m_OverlayCenterTexture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMapImages::SetTextureScale(int Scale)
|
||||||
|
{
|
||||||
|
if(m_TextureScale == Scale)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_TextureScale = Scale;
|
||||||
|
|
||||||
|
if(Graphics() && m_OverlayCenterTexture != -1) // check if component was initialized
|
||||||
|
{
|
||||||
|
// reinitialize component
|
||||||
|
Graphics()->UnloadTexture(m_OverlayBottomTexture);
|
||||||
|
Graphics()->UnloadTexture(m_OverlayTopTexture);
|
||||||
|
Graphics()->UnloadTexture(m_OverlayCenterTexture);
|
||||||
|
m_OverlayBottomTexture = m_OverlayTopTexture = m_OverlayCenterTexture = -1;
|
||||||
|
|
||||||
|
InitOverlayTextures();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int CMapImages::GetTextureScale()
|
||||||
|
{
|
||||||
|
return m_TextureScale;
|
||||||
|
}
|
||||||
|
|
||||||
|
int CMapImages::UploadEntityLayerText(int TextureSize, int YOffset)
|
||||||
|
{
|
||||||
|
void *pMem = calloc(1024 * 1024, 1);
|
||||||
|
int TextureID = Graphics()->LoadTextureRaw(1024, 1024, CImageInfo::FORMAT_ALPHA, pMem, CImageInfo::FORMAT_ALPHA, IGraphics::TEXLOAD_NOMIPMAPS);
|
||||||
|
free(pMem);
|
||||||
|
|
||||||
|
char aBuf[4];
|
||||||
|
int Len = str_format(aBuf, 4, "%d", 255);
|
||||||
|
|
||||||
|
int FontSize = TextRender()->AdjustFontSize(aBuf, Len, TextureSize);
|
||||||
|
YOffset += ((TextureSize - FontSize)/2);
|
||||||
|
|
||||||
|
for(int i = 0; i < 256; ++i)
|
||||||
|
{
|
||||||
|
int Len = str_format(aBuf, 4, "%d", i);
|
||||||
|
|
||||||
|
float x = (i%16)*64;
|
||||||
|
float y = (i/16)*64;
|
||||||
|
|
||||||
|
TextRender()->UploadEntityLayerText(TextureID, aBuf, Len, x, y + YOffset, FontSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TextureID;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CMapImages::InitOverlayTextures()
|
||||||
|
{
|
||||||
|
int TextureSize = 64*m_TextureScale/100;
|
||||||
|
int TextureToVerticalCenterOffset = (64-TextureSize)/2; // should be used to move texture to the center of 64 pixels area
|
||||||
|
|
||||||
|
if(m_OverlayBottomTexture == -1)
|
||||||
|
{
|
||||||
|
m_OverlayBottomTexture = UploadEntityLayerText(TextureSize/2, 32+TextureToVerticalCenterOffset/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_OverlayTopTexture == -1)
|
||||||
|
{
|
||||||
|
m_OverlayTopTexture = UploadEntityLayerText(TextureSize/2, TextureToVerticalCenterOffset/2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_OverlayCenterTexture == -1)
|
||||||
|
{
|
||||||
|
m_OverlayCenterTexture = UploadEntityLayerText(TextureSize, TextureToVerticalCenterOffset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ class CMapImages : public CComponent
|
||||||
char m_aEntitiesGameType[16];
|
char m_aEntitiesGameType[16];
|
||||||
public:
|
public:
|
||||||
CMapImages();
|
CMapImages();
|
||||||
|
CMapImages(int ImageSize);
|
||||||
|
|
||||||
int Get(int Index) const { return m_aTextures[Index]; }
|
int Get(int Index) const { return m_aTextures[Index]; }
|
||||||
int Num() const { return m_Count; }
|
int Num() const { return m_Count; }
|
||||||
|
@ -23,19 +24,25 @@ public:
|
||||||
void LoadBackground(class IMap *pMap);
|
void LoadBackground(class IMap *pMap);
|
||||||
|
|
||||||
// DDRace
|
// DDRace
|
||||||
|
|
||||||
int GetEntities();
|
int GetEntities();
|
||||||
|
|
||||||
int GetOverlayBottom();
|
int GetOverlayBottom();
|
||||||
int GetOverlayTop();
|
int GetOverlayTop();
|
||||||
int GetOverlayCenter();
|
int GetOverlayCenter();
|
||||||
|
|
||||||
|
void SetTextureScale(int Size);
|
||||||
|
int GetTextureScale();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
int m_EntitiesTextures;
|
int m_EntitiesTextures;
|
||||||
int m_OverlayBottomTexture;
|
int m_OverlayBottomTexture;
|
||||||
int m_OverlayTopTexture;
|
int m_OverlayTopTexture;
|
||||||
int m_OverlayCenterTexture;
|
int m_OverlayCenterTexture;
|
||||||
|
int m_TextureScale;
|
||||||
|
|
||||||
|
void InitOverlayTextures();
|
||||||
|
int UploadEntityLayerText(int TextureSize, int YOffset);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -266,6 +266,7 @@ void CGameClient::OnConsoleInit()
|
||||||
Console()->Chain("dummy_skin", ConchainSpecialDummyInfoupdate, this);
|
Console()->Chain("dummy_skin", ConchainSpecialDummyInfoupdate, this);
|
||||||
|
|
||||||
Console()->Chain("cl_dummy", ConchainSpecialDummy, this);
|
Console()->Chain("cl_dummy", ConchainSpecialDummy, this);
|
||||||
|
Console()->Chain("cl_text_entities_size", ConchainClTextEntitiesSize, this);
|
||||||
|
|
||||||
//
|
//
|
||||||
m_SuppressEvents = false;
|
m_SuppressEvents = false;
|
||||||
|
@ -350,6 +351,8 @@ void CGameClient::OnInit()
|
||||||
m_GameWorld.m_GameTickSpeed = SERVER_TICK_SPEED;
|
m_GameWorld.m_GameTickSpeed = SERVER_TICK_SPEED;
|
||||||
m_GameWorld.m_pCollision = Collision();
|
m_GameWorld.m_pCollision = Collision();
|
||||||
m_GameWorld.m_pTeams = &m_TeamsPredicted;
|
m_GameWorld.m_pTeams = &m_TeamsPredicted;
|
||||||
|
|
||||||
|
m_pMapimages->SetTextureScale(g_Config.m_ClTextEntitiesSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CGameClient::OnUpdate()
|
void CGameClient::OnUpdate()
|
||||||
|
@ -1793,6 +1796,17 @@ void CGameClient::ConchainSpecialDummy(IConsole::IResult *pResult, void *pUserDa
|
||||||
g_Config.m_ClDummy = 0;
|
g_Config.m_ClDummy = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CGameClient::ConchainClTextEntitiesSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData)
|
||||||
|
{
|
||||||
|
pfnCallback(pResult, pCallbackUserData);
|
||||||
|
|
||||||
|
if(pResult->NumArguments())
|
||||||
|
{
|
||||||
|
CGameClient *pGameClient = (CGameClient*)pUserData;
|
||||||
|
pGameClient->m_pMapimages->SetTextureScale(g_Config.m_ClTextEntitiesSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IGameClient *CreateGameClient()
|
IGameClient *CreateGameClient()
|
||||||
{
|
{
|
||||||
return &g_GameClient;
|
return &g_GameClient;
|
||||||
|
|
|
@ -118,6 +118,7 @@ class CGameClient : public IGameClient
|
||||||
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
static void ConchainSpecialInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
||||||
static void ConchainSpecialDummyInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
static void ConchainSpecialDummyInfoupdate(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
||||||
static void ConchainSpecialDummy(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
static void ConchainSpecialDummy(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
||||||
|
static void ConchainClTextEntitiesSize(IConsole::IResult *pResult, void *pUserData, IConsole::FCommandCallback pfnCallback, void *pCallbackUserData);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
IKernel *Kernel() { return IInterface::Kernel(); }
|
IKernel *Kernel() { return IInterface::Kernel(); }
|
||||||
|
|
|
@ -415,6 +415,9 @@ void CRenderTools::RenderTeleOverlay(CTeleTile *pTele, int w, int h, float Scale
|
||||||
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
||||||
return; // its useless to render text at this distance
|
return; // its useless to render text at this distance
|
||||||
|
|
||||||
|
float Size = g_Config.m_ClTextEntitiesSize/100.f;
|
||||||
|
float ToCenterOffset = (1-Size)/2.f;
|
||||||
|
|
||||||
for(int y = StartY; y < EndY; y++)
|
for(int y = StartY; y < EndY; y++)
|
||||||
for(int x = StartX; x < EndX; x++)
|
for(int x = StartX; x < EndX; x++)
|
||||||
{
|
{
|
||||||
|
@ -439,7 +442,7 @@ void CRenderTools::RenderTeleOverlay(CTeleTile *pTele, int w, int h, float Scale
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale - 3.f, my*Scale, Scale - 5.f, aBuf, -1);
|
UI()->TextRender()->Text(0, mx*Scale - 3.f, (my+ToCenterOffset)*Scale, Size*Scale, aBuf, -1);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -460,6 +463,9 @@ void CRenderTools::RenderSpeedupOverlay(CSpeedupTile *pSpeedup, int w, int h, fl
|
||||||
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
||||||
return; // its useless to render text at this distance
|
return; // its useless to render text at this distance
|
||||||
|
|
||||||
|
float Size = g_Config.m_ClTextEntitiesSize / 100.f;
|
||||||
|
float ToCenterOffset = (1-Size)/2.f;
|
||||||
|
|
||||||
for(int y = StartY; y < EndY; y++)
|
for(int y = StartY; y < EndY; y++)
|
||||||
for(int x = StartX; x < EndX; x++)
|
for(int x = StartX; x < EndX; x++)
|
||||||
{
|
{
|
||||||
|
@ -498,13 +504,13 @@ void CRenderTools::RenderSpeedupOverlay(CSpeedupTile *pSpeedup, int w, int h, fl
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Force);
|
str_format(aBuf, sizeof(aBuf), "%d", Force);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale, (my*Scale) + 16.f + ((16.f - (Scale - 20.f)) / 2.f), Scale - 20.f, aBuf, -1);
|
UI()->TextRender()->Text(0, mx*Scale, (my+0.5+ToCenterOffset/2)*Scale, Size*Scale/2.f, aBuf, -1);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
if(MaxSpeed)
|
if(MaxSpeed)
|
||||||
{
|
{
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", MaxSpeed);
|
str_format(aBuf, sizeof(aBuf), "%d", MaxSpeed);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale, (my*Scale) + ((16.f - (Scale - 20.f)) / 2.f), Scale - 20.f, aBuf, -1);
|
UI()->TextRender()->Text(0, mx*Scale, (my+ToCenterOffset/2)*Scale, Size*Scale/2.f, aBuf, -1);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -529,6 +535,9 @@ void CRenderTools::RenderSwitchOverlay(CSwitchTile *pSwitch, int w, int h, float
|
||||||
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
||||||
return; // its useless to render text at this distance
|
return; // its useless to render text at this distance
|
||||||
|
|
||||||
|
float Size = g_Config.m_ClTextEntitiesSize/100.f;
|
||||||
|
float ToCenterOffset = (1-Size)/2.f;
|
||||||
|
|
||||||
for(int y = StartY; y < EndY; y++)
|
for(int y = StartY; y < EndY; y++)
|
||||||
for(int x = StartX; x < EndX; x++)
|
for(int x = StartX; x < EndX; x++)
|
||||||
{
|
{
|
||||||
|
@ -553,7 +562,7 @@ void CRenderTools::RenderSwitchOverlay(CSwitchTile *pSwitch, int w, int h, float
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale, my*Scale + 16.f + ((16.f - (Scale - 20.f)) / 2.f), Scale - 20.f, aBuf, -1);
|
UI()->TextRender()->Text(0, mx*Scale, (my+ToCenterOffset/2)*Scale, Size*Scale/2.f, aBuf, -1);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,7 +572,7 @@ void CRenderTools::RenderSwitchOverlay(CSwitchTile *pSwitch, int w, int h, float
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Delay);
|
str_format(aBuf, sizeof(aBuf), "%d", Delay);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale, my*Scale + ((16.f - (Scale - 20.f)) / 2.f), Scale - 20.f, aBuf, -1);
|
UI()->TextRender()->Text(0, mx*Scale, (my+0.5f+ToCenterOffset/2)* Scale, Size*Scale/2.f, aBuf, -1);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -587,6 +596,8 @@ void CRenderTools::RenderTuneOverlay(CTuneTile *pTune, int w, int h, float Scale
|
||||||
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
if(EndX - StartX > Graphics()->ScreenWidth() / g_Config.m_GfxTextOverlay || EndY - StartY > Graphics()->ScreenHeight() / g_Config.m_GfxTextOverlay)
|
||||||
return; // its useless to render text at this distance
|
return; // its useless to render text at this distance
|
||||||
|
|
||||||
|
float Size = g_Config.m_ClTextEntitiesSize/100.f;
|
||||||
|
|
||||||
for(int y = StartY; y < EndY; y++)
|
for(int y = StartY; y < EndY; y++)
|
||||||
for(int x = StartX; x < EndX; x++)
|
for(int x = StartX; x < EndX; x++)
|
||||||
{
|
{
|
||||||
|
@ -611,7 +622,7 @@ void CRenderTools::RenderTuneOverlay(CTuneTile *pTune, int w, int h, float Scale
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, Alpha);
|
||||||
UI()->TextRender()->Text(0, mx*Scale+11.f, my*Scale+6.f, Scale/1.5f-5.f, aBuf, -1); // numbers shouldn't be too big and in the center of the tile
|
UI()->TextRender()->Text(0, mx*Scale+11.f, my*Scale+6.f, Size*Scale/1.5f-5.f, aBuf, -1); // numbers shouldn't be too big and in the center of the tile
|
||||||
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
UI()->TextRender()->TextColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,11 @@ MACRO_CONFIG_INT(ClNameplatesClan, cl_nameplates_clan, 0, 0, 1, CFGFLAG_CLIENT|C
|
||||||
MACRO_CONFIG_INT(ClNameplatesClanSize, cl_nameplates_clan_size, 30, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Size of the clan plates from 0 to 100%")
|
MACRO_CONFIG_INT(ClNameplatesClanSize, cl_nameplates_clan_size, 30, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Size of the clan plates from 0 to 100%")
|
||||||
MACRO_CONFIG_INT(ClNameplatesOwn, cl_nameplates_own, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show own name plate (useful for demo recording)")
|
MACRO_CONFIG_INT(ClNameplatesOwn, cl_nameplates_own, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Show own name plate (useful for demo recording)")
|
||||||
MACRO_CONFIG_INT(ClTextEntities, cl_text_entities, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Render textual entity data")
|
MACRO_CONFIG_INT(ClTextEntities, cl_text_entities, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Render textual entity data")
|
||||||
|
MACRO_CONFIG_INT(ClTextEntitiesSize, cl_text_entities_size, 70, 0, 100, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Size of textual entity data from 0 to 100%")
|
||||||
|
|
||||||
MACRO_CONFIG_COL(ClAuthedPlayerColor, cl_authed_player_color, 5898211, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Color of name of authenticated player in scoreboard")
|
MACRO_CONFIG_COL(ClAuthedPlayerColor, cl_authed_player_color, 5898211, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Color of name of authenticated player in scoreboard")
|
||||||
MACRO_CONFIG_COL(ClSameClanColor, cl_same_clan_color, 5898211, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Clan color of players with the same clan as you in scoreboard.")
|
MACRO_CONFIG_COL(ClSameClanColor, cl_same_clan_color, 5898211, 0, 0xFFFFFF, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Clan color of players with the same clan as you in scoreboard.")
|
||||||
|
|
||||||
MACRO_CONFIG_INT(ClEnablePingColor, cl_enable_ping_color, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Whether ping is colored in scoreboard.")
|
MACRO_CONFIG_INT(ClEnablePingColor, cl_enable_ping_color, 1, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Whether ping is colored in scoreboard.")
|
||||||
MACRO_CONFIG_INT(ClAutoswitchWeapons, cl_autoswitch_weapons, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Auto switch weapon on pickup")
|
MACRO_CONFIG_INT(ClAutoswitchWeapons, cl_autoswitch_weapons, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Auto switch weapon on pickup")
|
||||||
MACRO_CONFIG_INT(ClAutoswitchWeaponsOutOfAmmo, cl_autoswitch_weapons_out_of_ammo, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Auto switch weapon when out of ammo")
|
MACRO_CONFIG_INT(ClAutoswitchWeaponsOutOfAmmo, cl_autoswitch_weapons_out_of_ammo, 0, 0, 1, CFGFLAG_CLIENT|CFGFLAG_SAVE, "Auto switch weapon when out of ammo")
|
||||||
|
|
Loading…
Reference in a new issue