diff --git a/src/graphics/Font.cpp b/src/graphics/Font.cpp index b501c206..96d9c30e 100644 --- a/src/graphics/Font.cpp +++ b/src/graphics/Font.cpp @@ -43,34 +43,10 @@ bool Font::isPrintableChar(int c) { #define RES 16 void Font::draw(Batch2D* batch, std::wstring text, int x, int y) { - int page = 0; - int next = 10000; - int init_x = x; - do { - for (unsigned c : text){ - if (isPrintableChar(c)){ - int charpage = c >> 8; - if (charpage == page){ - Texture* texture = pages[charpage]; - if (texture == nullptr){ - texture = pages[0]; - } - batch->texture(pages[charpage]); - batch->sprite(x, y, RES, RES, 16, c, vec4(1.0f)); - } - else if (charpage > page && charpage < next){ - next = charpage; - } - } - x += getGlyphWidth(c); - } - page = next; - next = 10000; - x = init_x; - } while (page < 10000); + draw(batch, text, x, y, STYLE_NONE); } -void Font::drawWithOutline(Batch2D* batch, std::wstring text, int x, int y) { +void Font::draw(Batch2D* batch, std::wstring text, int x, int y, int style) { int page = 0; int next = 10000; int init_x = x; @@ -84,15 +60,20 @@ void Font::drawWithOutline(Batch2D* batch, std::wstring text, int x, int y) { texture = pages[0]; } batch->texture(pages[charpage]); - batch->sprite(x+1, y+1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x+1, y-1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x-1, y, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x+1, y, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x-1, y-1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x+1, y-1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x+1, y+1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(x-1, y+1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); + switch (style){ + case STYLE_SHADOW: + batch->sprite(x+1, y+1, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); + break; + case STYLE_OUTLINE: + for (int oy = -1; oy <= 1; oy++){ + for (int ox = -1; ox <= 1; ox++){ + if (ox || oy) + batch->sprite(x+ox, y+oy, RES, RES, 16, c, vec4(0.0f, 0.0f, 0.0f, 1.0f)); + } + } + break; + } batch->sprite(x, y, RES, RES, 16, c, vec4(1.0f)); } diff --git a/src/graphics/Font.h b/src/graphics/Font.h index c2f15b87..db1fdcda 100644 --- a/src/graphics/Font.h +++ b/src/graphics/Font.h @@ -7,6 +7,10 @@ class Texture; class Batch2D; +#define STYLE_NONE 0 +#define STYLE_SHADOW 1 +#define STYLE_OUTLINE 2 + class Font { public: std::vector pages; @@ -16,7 +20,7 @@ public: int getGlyphWidth(char c); bool isPrintableChar(int c); void draw(Batch2D* batch, std::wstring text, int x, int y); - void drawWithOutline(Batch2D* batch, std::wstring text, int x, int y); + void draw(Batch2D* batch, std::wstring text, int x, int y, int style); }; #endif /* GRAPHICS_FONT_H_ */ diff --git a/src/world_render.h b/src/world_render.h index bf304540..c3c50a45 100644 --- a/src/world_render.h +++ b/src/world_render.h @@ -128,12 +128,12 @@ void draw_hud(World* world, Level* level, Assets* assets, bool devdata, int fps) Font* font = assets->getFont("normal"); batch->begin(); if (devdata){ - font->drawWithOutline(batch, L"chunks: "+std::to_wstring(chunks->chunksCount), 16, 16); - font->drawWithOutline(batch, std::to_wstring((int)player->camera->position.x), 10, 30); - font->drawWithOutline(batch, std::to_wstring((int)player->camera->position.y), 50, 30); - font->drawWithOutline(batch, std::to_wstring((int)player->camera->position.z), 90, 30); - font->drawWithOutline(batch, L"fps:", 16, 42); - font->drawWithOutline(batch, std::to_wstring(fps), 40, 42); + font->draw(batch, L"chunks: "+std::to_wstring(chunks->chunksCount), 16, 16, STYLE_OUTLINE); + font->draw(batch, std::to_wstring((int)player->camera->position.x), 10, 30, STYLE_OUTLINE); + font->draw(batch, std::to_wstring((int)player->camera->position.y), 50, 30, STYLE_OUTLINE); + font->draw(batch, std::to_wstring((int)player->camera->position.z), 90, 30, STYLE_OUTLINE); + font->draw(batch, L"fps:", 16, 42, STYLE_OUTLINE); + font->draw(batch, std::to_wstring(fps), 40, 42, STYLE_OUTLINE); } batch->render();