mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
- the basics for creating font objects for the in-game bitmap fonts.
Definitions were added to RedNukem frontend for testing, not used yet.
This commit is contained in:
parent
7c3cac5721
commit
2f672da7ba
8 changed files with 89 additions and 11 deletions
|
@ -68,7 +68,7 @@
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
FFont::FFont (const char *name, const char *nametemplate, const char *filetemplate, int lfirst, int lcount, int start, int fdlump, int spacewidth, bool notranslate, bool iwadonly, bool doomtemplate)
|
||||
FFont::FFont (const char *name, const char *nametemplate, const char *filetemplate, int lfirst, int lcount, int start, int fdlump, int spacewidth, bool notranslate, bool iwadonly, bool doomtemplate, GlyphSet *baseGlyphs)
|
||||
{
|
||||
int i;
|
||||
FTextureID lump;
|
||||
|
@ -185,6 +185,22 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
|
|||
}
|
||||
else
|
||||
{
|
||||
if (baseGlyphs)
|
||||
{
|
||||
// First insert everything from the given glyph set.
|
||||
GlyphSet::Iterator it(*baseGlyphs);
|
||||
GlyphSet::Pair* pair;
|
||||
while (it.NextPair(pair))
|
||||
{
|
||||
if (pair->Value && pair->Value->GetTexelWidth() > 0 && pair->Value->GetTexelHeight() > 0)
|
||||
{
|
||||
auto position = pair->Key;
|
||||
if (position < minchar) minchar = position;
|
||||
if (position > maxchar) maxchar = position;
|
||||
charMap.Insert(position, pair->Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nametemplate != nullptr)
|
||||
{
|
||||
if (!iwadonly)
|
||||
|
|
|
@ -78,6 +78,7 @@ enum EColorRange : int
|
|||
|
||||
extern int NumTextColors;
|
||||
|
||||
using GlyphSet = TMap<int, FTexture*>;
|
||||
|
||||
class FFont
|
||||
{
|
||||
|
@ -94,7 +95,7 @@ public:
|
|||
Custom
|
||||
};
|
||||
|
||||
FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false, bool iwadonly = false, bool doomtemplate = false);
|
||||
FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false, bool iwadonly = false, bool doomtemplate = false, GlyphSet *baseGlpyphs = nullptr);
|
||||
virtual ~FFont ();
|
||||
|
||||
virtual FTexture *GetChar (int code, int translation, int *const width, bool *redirected = nullptr) const;
|
||||
|
|
|
@ -149,7 +149,7 @@ struct DrawParms
|
|||
double top;
|
||||
double left;
|
||||
float Alpha;
|
||||
int remap;
|
||||
int TranslationId;
|
||||
PalEntry fillcolor;
|
||||
PalEntry colorOverlay;
|
||||
PalEntry color;
|
||||
|
|
|
@ -261,7 +261,7 @@ void F2DDrawer::AddTexture(FTexture *img, DrawParms &parms)
|
|||
dg.mVertCount = 4;
|
||||
dg.mTexture = img;
|
||||
|
||||
dg.mRemapIndex = parms.remap;
|
||||
dg.mRemapIndex = parms.TranslationId;
|
||||
SetStyle(img, parms, vertexcolor, dg);
|
||||
|
||||
u1 = parms.srcx;
|
||||
|
|
|
@ -262,7 +262,7 @@ bool ParseDrawTextureTags(FTexture *img, double x, double y, uint32_t tag, Va_Li
|
|||
parms->burn = false;
|
||||
parms->monospace = EMonospacing::Off;
|
||||
parms->spacing = 0;
|
||||
parms->remap = -1;
|
||||
parms->TranslationId = -1;
|
||||
|
||||
// Parse the tag list for attributes. (For floating point attributes,
|
||||
// consider that the C ABI dictates that all floats be promoted to
|
||||
|
@ -412,7 +412,7 @@ bool ParseDrawTextureTags(FTexture *img, double x, double y, uint32_t tag, Va_Li
|
|||
break;
|
||||
|
||||
case DTA_TranslationIndex:
|
||||
parms->remap = ListGetInt(tags);
|
||||
parms->TranslationId = ListGetInt(tags);
|
||||
break;
|
||||
|
||||
case DTA_ColorOverlay:
|
||||
|
|
|
@ -102,7 +102,7 @@ void DrawChar (F2DDrawer* drawer, FFont *font, int normalcolor, double x, double
|
|||
return;
|
||||
}
|
||||
PalEntry color = 0xffffffff;
|
||||
parms.remap = font->GetColorTranslation((EColorRange)normalcolor, &color);
|
||||
parms.TranslationId = redirected? -1 : font->GetColorTranslation((EColorRange)normalcolor, &color);
|
||||
parms.color = PalEntry((color.a * parms.color.a) / 255, (color.r * parms.color.r) / 255, (color.g * parms.color.g) / 255, (color.b * parms.color.b) / 255);
|
||||
drawer->AddTexture(pic, parms);
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ void DrawTextCommon(F2DDrawer* drawer, FFont *font, int normalcolor, double x, d
|
|||
|
||||
PalEntry colorparm = parms.color;
|
||||
PalEntry color = 0xffffffff;
|
||||
parms.remap = font->GetColorTranslation((EColorRange)normalcolor, &color);
|
||||
parms.TranslationId = font->GetColorTranslation((EColorRange)normalcolor, &color);
|
||||
parms.color = PalEntry(colorparm.a, (color.r * colorparm.r) / 255, (color.g * colorparm.g) / 255, (color.b * colorparm.b) / 255);
|
||||
|
||||
kerning = font->GetDefaultKerning();
|
||||
|
@ -167,7 +167,7 @@ void DrawTextCommon(F2DDrawer* drawer, FFont *font, int normalcolor, double x, d
|
|||
EColorRange newcolor = V_ParseFontColor(ch, normalcolor, boldcolor);
|
||||
if (newcolor != CR_UNDEFINED)
|
||||
{
|
||||
parms.remap = font->GetColorTranslation(newcolor, &color);
|
||||
parms.TranslationId = font->GetColorTranslation(newcolor, &color);
|
||||
parms.color = PalEntry(colorparm.a, (color.r * colorparm.r) / 255, (color.g * colorparm.g) / 255, (color.b * colorparm.b) / 255);
|
||||
currentcolor = newcolor;
|
||||
}
|
||||
|
|
|
@ -6752,6 +6752,8 @@ void G_PostCreateGameState(void)
|
|||
A_InitEnemyFlags();
|
||||
}
|
||||
|
||||
void InitFonts();
|
||||
|
||||
static void G_Startup(void)
|
||||
{
|
||||
int32_t i;
|
||||
|
@ -6813,6 +6815,8 @@ static void G_Startup(void)
|
|||
if (TileFiles.artLoadFiles("tiles%03i.art") < 0)
|
||||
G_GameExit("Failed loading art.");
|
||||
|
||||
InitFonts();
|
||||
|
||||
// Make the fullscreen nuke logo background non-fullbright. Has to be
|
||||
// after dynamic tile remapping (from C_Compile) and loading tiles.
|
||||
picanm[LOADSCREEN].sf |= PICANM_NOFULLBRIGHT_BIT;
|
||||
|
@ -7020,6 +7024,7 @@ static const char* actions[] = {
|
|||
"Toggle_Crouch", // This is the last one used by EDuke32.
|
||||
};
|
||||
|
||||
|
||||
int GameInterface::app_main()
|
||||
{
|
||||
buttonMap.SetButtons(actions, NUM_ACTIONS);
|
||||
|
|
|
@ -21,12 +21,68 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
//-------------------------------------------------------------------------
|
||||
#include "ns.h" // Must come before everything else!
|
||||
|
||||
#include "v_font.h"
|
||||
#include "duke3d.h"
|
||||
#include "compat.h"
|
||||
#include "sbar.h"
|
||||
|
||||
BEGIN_RR_NS
|
||||
|
||||
|
||||
void InitFonts()
|
||||
{
|
||||
GlyphSet fontdata;
|
||||
|
||||
// Small font
|
||||
for (int i = 0; i < 95; i++)
|
||||
{
|
||||
auto tile = TileFiles.GetTile(STARTALPHANUM + i);
|
||||
if (tile && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
|
||||
fontdata.Insert('!' + i, tile);
|
||||
}
|
||||
SmallFont = new ::FFont("SmallFont", nullptr, "defsmallfont", 0, 0, 0, -1, -1, false, false, false, &fontdata);
|
||||
fontdata.Clear();
|
||||
|
||||
// Big font
|
||||
|
||||
// This font is VERY messy...
|
||||
fontdata.Insert('_', TileFiles.GetTile(BIGALPHANUM - 11));
|
||||
fontdata.Insert('-', TileFiles.GetTile(BIGALPHANUM - 11));
|
||||
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, TileFiles.GetTile(BIGALPHANUM - 10 + i));
|
||||
for (int i = 0; i < 26; i++) fontdata.Insert('A' + i, TileFiles.GetTile(BIGALPHANUM + i));
|
||||
fontdata.Insert('.', TileFiles.GetTile(BIGPERIOD));
|
||||
fontdata.Insert(',', TileFiles.GetTile(BIGCOMMA));
|
||||
fontdata.Insert('!', TileFiles.GetTile(BIGX_));
|
||||
fontdata.Insert('?', TileFiles.GetTile(BIGQ));
|
||||
fontdata.Insert(';', TileFiles.GetTile(BIGSEMI));
|
||||
fontdata.Insert(':', TileFiles.GetTile(BIGCOLIN));
|
||||
fontdata.Insert('\\', TileFiles.GetTile(BIGALPHANUM + 68));
|
||||
fontdata.Insert('/', TileFiles.GetTile(BIGALPHANUM + 68));
|
||||
fontdata.Insert('%', TileFiles.GetTile(BIGALPHANUM + 69));
|
||||
fontdata.Insert('`', TileFiles.GetTile(BIGAPPOS));
|
||||
fontdata.Insert('"', TileFiles.GetTile(BIGAPPOS));
|
||||
fontdata.Insert('\'', TileFiles.GetTile(BIGAPPOS));
|
||||
BigFont = new ::FFont("BigFont", nullptr, "defbigfont", 0, 0, 0, -1, -1, false, false, false, &fontdata);
|
||||
fontdata.Clear();
|
||||
|
||||
// Tiny font
|
||||
for (int i = 0; i < 95; i++)
|
||||
{
|
||||
auto tile = TileFiles.GetTile(MINIFONT + i);
|
||||
if (tile && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
|
||||
fontdata.Insert('!' + i, tile);
|
||||
}
|
||||
SmallFont2 = new ::FFont("SmallFont2", nullptr, "defsmallfont2", 0, 0, 0, -1, -1, false, false, false, &fontdata);
|
||||
fontdata.Clear();
|
||||
|
||||
// SBAR index font
|
||||
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, TileFiles.GetTile(THREEBYFIVE + i));
|
||||
fontdata.Insert(':', TileFiles.GetTile(THREEBYFIVE + 10));
|
||||
fontdata.Insert('/', TileFiles.GetTile(THREEBYFIVE + 11));
|
||||
new ::FFont("IndexFont", nullptr, nullptr, 0, 0, 0, -1, -1, false, false, false, &fontdata);
|
||||
|
||||
}
|
||||
|
||||
static int32_t sbarx(int32_t x)
|
||||
{
|
||||
if (ud.screen_size == 4) return sbarsc(x<<16);
|
||||
|
@ -42,7 +98,7 @@ static int32_t sbarxr(int32_t x)
|
|||
static int32_t sbary(int32_t y)
|
||||
{
|
||||
if (hud_position == 1 && ud.screen_size == 4 && ud.althud == 1) return sbarsc(y << 16);
|
||||
else return (200<<16) - sbarsc(200<<16) + sbarsc(y<<16);
|
||||
else return (100<<16) - sbarsc(200<<16) + sbarsc(y<<16);
|
||||
}
|
||||
|
||||
int32_t sbarx16(int32_t x)
|
||||
|
@ -67,7 +123,7 @@ static int32_t sbarxr16(int32_t x)
|
|||
|
||||
int32_t sbary16(int32_t y)
|
||||
{
|
||||
return (200<<16) - sbarsc(200<<16) + sbarsc(y);
|
||||
return (100<<16) - sbarsc(200<<16) + sbarsc(y);
|
||||
}
|
||||
|
||||
static void G_PatchStatusBar(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t aspectCorrect = 1)
|
||||
|
|
Loading…
Reference in a new issue