mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
added renderingfunction for tunelayer and tuneoverlay-function to display the zone-number
This commit is contained in:
parent
12ac06f1f2
commit
a4632e2c07
|
@ -84,9 +84,11 @@ public:
|
|||
void RenderTeleOverlay(CTeleTile *pTele, int w, int h, float Scale);
|
||||
void RenderSpeedupOverlay(CSpeedupTile *pTele, int w, int h, float Scale);
|
||||
void RenderSwitchOverlay(CSwitchTile *pSwitch, int w, int h, float Scale);
|
||||
void RenderTuneOverlay(CTuneTile *pTune, int w, int h, float Scale);
|
||||
void RenderTelemap(CTeleTile *pTele, int w, int h, float Scale, vec4 Color, int RenderFlags);
|
||||
void RenderSpeedupmap(CSpeedupTile *pTele, int w, int h, float Scale, vec4 Color, int RenderFlags);
|
||||
void RenderSwitchmap(CSwitchTile *pSwitch, int w, int h, float Scale, vec4 Color, int RenderFlags);
|
||||
void RenderTunemap(CTuneTile *pTune, int w, int h, float Scale, vec4 Color, int RenderFlags);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -466,6 +466,46 @@ void CRenderTools::RenderSwitchOverlay(CSwitchTile *pSwitch, int w, int h, float
|
|||
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
||||
}
|
||||
|
||||
void CRenderTools::RenderTuneOverlay(CTuneTile *pTune, int w, int h, float Scale)
|
||||
{
|
||||
float ScreenX0, ScreenY0, ScreenX1, ScreenY1;
|
||||
Graphics()->GetScreen(&ScreenX0, &ScreenY0, &ScreenX1, &ScreenY1);
|
||||
|
||||
int StartY = (int)(ScreenY0/Scale)-1;
|
||||
int StartX = (int)(ScreenX0/Scale)-1;
|
||||
int EndY = (int)(ScreenY1/Scale)+1;
|
||||
int EndX = (int)(ScreenX1/Scale)+1;
|
||||
|
||||
for(int y = StartY; y < EndY; y++)
|
||||
for(int x = StartX; x < EndX; x++)
|
||||
{
|
||||
int mx = x;
|
||||
int my = y;
|
||||
|
||||
|
||||
if(mx<0)
|
||||
continue; // mx = 0;
|
||||
if(mx>=w)
|
||||
continue; // mx = w-1;
|
||||
if(my<0)
|
||||
continue; // my = 0;
|
||||
if(my>=h)
|
||||
continue; // my = h-1;
|
||||
|
||||
int c = mx + my*w;
|
||||
|
||||
unsigned char Index = pTune[c].m_Number;
|
||||
if(Index)
|
||||
{
|
||||
char aBuf[16];
|
||||
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
||||
UI()->TextRender()->Text(0, mx*Scale+11.f, my*Scale+6.f, Scale/1.5f-5.f, aBuf, -1); // numbers shouldnt be too big and in the center of the tile
|
||||
}
|
||||
}
|
||||
|
||||
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
||||
}
|
||||
|
||||
void CRenderTools::RenderTelemap(CTeleTile *pTele, int w, int h, float Scale, vec4 Color, int RenderFlags)
|
||||
{
|
||||
float ScreenX0, ScreenY0, ScreenX1, ScreenY1;
|
||||
|
@ -782,3 +822,95 @@ void CRenderTools::RenderSwitchmap(CSwitchTile *pSwitchTile, int w, int h, float
|
|||
Graphics()->QuadsEnd();
|
||||
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
||||
}
|
||||
|
||||
void CRenderTools::RenderTunemap(CTuneTile *pTune, int w, int h, float Scale, vec4 Color, int RenderFlags)
|
||||
{
|
||||
float ScreenX0, ScreenY0, ScreenX1, ScreenY1;
|
||||
Graphics()->GetScreen(&ScreenX0, &ScreenY0, &ScreenX1, &ScreenY1);
|
||||
|
||||
// calculate the final pixelsize for the tiles
|
||||
float TilePixelSize = 1024/32.0f;
|
||||
float FinalTileSize = Scale/(ScreenX1-ScreenX0) * Graphics()->ScreenWidth();
|
||||
float FinalTilesetScale = FinalTileSize/TilePixelSize;
|
||||
|
||||
Graphics()->QuadsBegin();
|
||||
Graphics()->SetColor(Color.r, Color.g, Color.b, Color.a);
|
||||
|
||||
int StartY = (int)(ScreenY0/Scale)-1;
|
||||
int StartX = (int)(ScreenX0/Scale)-1;
|
||||
int EndY = (int)(ScreenY1/Scale)+1;
|
||||
int EndX = (int)(ScreenX1/Scale)+1;
|
||||
|
||||
// adjust the texture shift according to mipmap level
|
||||
float TexSize = 1024.0f;
|
||||
float Frac = (1.25f/TexSize) * (1/FinalTilesetScale);
|
||||
float Nudge = (0.5f/TexSize) * (1/FinalTilesetScale);
|
||||
|
||||
for(int y = StartY; y < EndY; y++)
|
||||
for(int x = StartX; x < EndX; x++)
|
||||
{
|
||||
int mx = x;
|
||||
int my = y;
|
||||
|
||||
if(RenderFlags&TILERENDERFLAG_EXTEND)
|
||||
{
|
||||
if(mx<0)
|
||||
mx = 0;
|
||||
if(mx>=w)
|
||||
mx = w-1;
|
||||
if(my<0)
|
||||
my = 0;
|
||||
if(my>=h)
|
||||
my = h-1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(mx<0)
|
||||
continue; // mx = 0;
|
||||
if(mx>=w)
|
||||
continue; // mx = w-1;
|
||||
if(my<0)
|
||||
continue; // my = 0;
|
||||
if(my>=h)
|
||||
continue; // my = h-1;
|
||||
}
|
||||
|
||||
int c = mx + my*w;
|
||||
|
||||
unsigned char Index = pTune[c].m_Type;
|
||||
if(Index)
|
||||
{
|
||||
bool Render = false;
|
||||
if(RenderFlags&LAYERRENDERFLAG_TRANSPARENT)
|
||||
Render = true;
|
||||
|
||||
if(Render)
|
||||
{
|
||||
|
||||
int tx = Index%16;
|
||||
int ty = Index/16;
|
||||
int Px0 = tx*(1024/16);
|
||||
int Py0 = ty*(1024/16);
|
||||
int Px1 = Px0+(1024/16)-1;
|
||||
int Py1 = Py0+(1024/16)-1;
|
||||
|
||||
float x0 = Nudge + Px0/TexSize+Frac;
|
||||
float y0 = Nudge + Py0/TexSize+Frac;
|
||||
float x1 = Nudge + Px1/TexSize-Frac;
|
||||
float y1 = Nudge + Py0/TexSize+Frac;
|
||||
float x2 = Nudge + Px1/TexSize-Frac;
|
||||
float y2 = Nudge + Py1/TexSize-Frac;
|
||||
float x3 = Nudge + Px0/TexSize+Frac;
|
||||
float y3 = Nudge + Py1/TexSize-Frac;
|
||||
|
||||
Graphics()->QuadsSetSubsetFree(x0, y0, x1, y1, x2, y2, x3, y3);
|
||||
IGraphics::CQuadItem QuadItem(x*Scale, y*Scale, Scale, Scale);
|
||||
Graphics()->QuadsDrawTL(&QuadItem, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Graphics()->QuadsEnd();
|
||||
Graphics()->MapScreen(ScreenX0, ScreenY0, ScreenX1, ScreenY1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue