diff --git a/src/guiengine/engine.cpp b/src/guiengine/engine.cpp index 63ec09d8e..5c12232c1 100644 --- a/src/guiengine/engine.cpp +++ b/src/guiengine/engine.cpp @@ -687,11 +687,11 @@ namespace GUIEngine { IGUIEnvironment* g_env; Skin* g_skin = NULL; - ScalableFont* g_font; - ScalableFont* g_large_font; - ScalableFont* g_title_font; - ScalableFont* g_small_font; - ScalableFont* g_digit_font; + ScalableFont *g_font; + ScalableFont *g_large_font; + ScalableFont *g_title_font; + ScalableFont *g_small_font; + ScalableFont *g_digit_font; IrrlichtDevice* g_device; IVideoDriver* g_driver; @@ -1062,7 +1062,7 @@ namespace GUIEngine ScalableFont* sfont = new ScalableFont(g_env, file_manager->getAssetChecked(FileManager::FONT, - "StkFont.xml",true).c_str() ); + "StkFont.xml",true) ); sfont->setScale(normal_text_scale); sfont->setKerningHeight(-5); g_font = sfont; @@ -1070,13 +1070,12 @@ namespace GUIEngine ScalableFont* digit_font = new ScalableFont(g_env, file_manager->getAssetChecked(FileManager::FONT, - "BigDigitFont.xml",true).c_str()); + "BigDigitFont.xml",true)); digit_font->lazyLoadTexture(0); // make sure the texture is loaded for this one g_digit_font = digit_font; Private::font_height = g_font->getDimension( L"X" ).Height; - ScalableFont* sfont_larger = sfont->getHollowCopy(); sfont_larger->setScale(normal_text_scale*1.4f); sfont_larger->setKerningHeight(-5); @@ -1097,7 +1096,7 @@ namespace GUIEngine new ScalableFont(g_env, file_manager->getAssetChecked(FileManager::FONT, "title_font.xml", - true).c_str() ); + true) ); sfont2->m_fallback_font = sfont; // Because the fallback font is much smaller than the title font: sfont2->m_fallback_font_scale = 4.0f; diff --git a/src/guiengine/scalable_font.cpp b/src/guiengine/scalable_font.cpp index 8f4701847..f31a933fe 100644 --- a/src/guiengine/scalable_font.cpp +++ b/src/guiengine/scalable_font.cpp @@ -21,9 +21,9 @@ namespace gui { //! constructor -ScalableFont::ScalableFont(IGUIEnvironment *env, const io::path& filename) -: Driver(0), SpriteBank(0), Environment(env), WrongCharacter(0), - MaxHeight(0), GlobalKerningWidth(0), GlobalKerningHeight(0) +ScalableFont::ScalableFont(IGUIEnvironment *env, const std::string &filename) + : Driver(0), SpriteBank(0), Environment(env), WrongCharacter(0), + MaxHeight(0), GlobalKerningWidth(0), GlobalKerningHeight(0) { #ifdef _DEBUG setDebugName("ScalableFont"); @@ -44,7 +44,7 @@ ScalableFont::ScalableFont(IGUIEnvironment *env, const io::path& filename) // don't grab environment, to avoid circular references Driver = Environment->getVideoDriver(); - SpriteBank = Environment->addEmptySpriteBank(filename); + SpriteBank = Environment->addEmptySpriteBank(io::path(filename.c_str())); if (SpriteBank) SpriteBank->grab(); } @@ -676,7 +676,6 @@ void ScalableFont::draw(const core::stringw& text, source, clip, color, true); - #ifdef FONT_DEBUG driver->draw2DLine(core::position2d(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y), core::position2d(dest.UpperLeftCorner.X, dest.LowerRightCorner.Y), diff --git a/src/guiengine/scalable_font.hpp b/src/guiengine/scalable_font.hpp index 431dad384..7cf893c46 100644 --- a/src/guiengine/scalable_font.hpp +++ b/src/guiengine/scalable_font.hpp @@ -72,7 +72,7 @@ public: int m_fallback_kerning_width; //! constructor - ScalableFont(IGUIEnvironment* env, const io::path& filename); + ScalableFont(IGUIEnvironment* env, const std::string &filename); /** Creates a hollow copy of this font; i.e. the underlying font data is the *same* for * both fonts. The advantage of doing this is that you can change "view" parameters diff --git a/src/states_screens/race_gui.cpp b/src/states_screens/race_gui.cpp index 5486589d4..ceb5d313c 100644 --- a/src/states_screens/race_gui.cpp +++ b/src/states_screens/race_gui.cpp @@ -219,6 +219,8 @@ void RaceGUI::renderPlayerView(const Camera *camera, float dt) } // renderPlayerView //----------------------------------------------------------------------------- +/** Shows the current soccer result. + */ void RaceGUI::drawScores() { SoccerWorld* soccerWorld = (SoccerWorld*)World::getWorld(); @@ -271,7 +273,8 @@ void RaceGUI::drawScores() numLeader++; offsetX += position.LowerRightCorner.X; } -} +} // drawScores + //----------------------------------------------------------------------------- /** Displays the racing time on the screen.s */ @@ -388,10 +391,10 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart, const core::recti &viewport, const core::vector2df &scaling) { - float minRatio = std::min(scaling.X, scaling.Y); + float min_ratio = std::min(scaling.X, scaling.Y); const int GAUGEWIDTH = 78; - int gauge_width = (int)(GAUGEWIDTH*minRatio); - int gauge_height = (int)(GAUGEWIDTH*minRatio); + int gauge_width = (int)(GAUGEWIDTH*min_ratio); + int gauge_height = (int)(GAUGEWIDTH*min_ratio); float state = (float)(kart->getEnergy()) / kart->getKartProperties()->getNitroMax(); @@ -581,10 +584,8 @@ void RaceGUI::drawEnergyMeter(int x, int y, const AbstractKart *kart, irr_driver->getVideoDriver()->draw2DVertexPrimitiveList(vertices, count, index, count-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN); - } - } // drawEnergyMeter //----------------------------------------------------------------------------- @@ -593,10 +594,10 @@ void RaceGUI::drawSpeedAndEnergy(const AbstractKart* kart, const core::recti &viewport, const core::vector2df &scaling) { - float minRatio = std::min(scaling.X, scaling.Y); + float min_ratio = std::min(scaling.X, scaling.Y); const int SPEEDWIDTH = 128; - int meter_width = (int)(SPEEDWIDTH*minRatio); - int meter_height = (int)(SPEEDWIDTH*minRatio); + int meter_width = (int)(SPEEDWIDTH*min_ratio); + int meter_height = (int)(SPEEDWIDTH*min_ratio); drawEnergyMeter(viewport.LowerRightCorner.X , (int)(viewport.LowerRightCorner.Y), @@ -699,30 +700,35 @@ void RaceGUI::drawSpeedAndEnergy(const AbstractKart* kart, index, count-2, video::EVT_STANDARD, scene::EPT_TRIANGLE_FAN); - // Draw Speed in Numbers + // Draw rank + WorldWithRank *world = dynamic_cast(World::getWorld()); - core::recti pos; - pos.UpperLeftCorner.X=(int)(offset.X + 0.5f*meter_width); - pos.UpperLeftCorner.Y=(int)(offset.Y - 0.62f*meter_height); - pos.LowerRightCorner.X=(int)(offset.X + 0.8f*meter_width); - pos.LowerRightCorner.Y=(int)(offset.X - 0.5f*meter_height); + if (world && world->displayRank()) + { + core::recti pos; + pos.UpperLeftCorner.X = (int)(offset.X + 0.5f*meter_width); + pos.UpperLeftCorner.Y = (int)(offset.Y - 0.62f*meter_height); + pos.LowerRightCorner.X = (int)(offset.X + 0.8f*meter_width); + pos.LowerRightCorner.Y = (int)(offset.X - 0.5f*meter_height); - gui::ScalableFont* font; + gui::ScalableFont* font; - if (pos.getWidth() > 55) - font = GUIEngine::getLargeFont(); - else if (pos.getWidth() > 40) - font = GUIEngine::getFont(); - else - font = GUIEngine::getSmallFont(); + font = GUIEngine::getHighresDigitFont(); + font->setScale(min_ratio * 0.7f); + font->setShadow(video::SColor(255, 128, 0, 0)); + static video::SColor color = video::SColor(255, 255, 255, 255); + std::ostringstream oss; + oss << kart->getPosition(); // the current font has no . :( << "."; - static video::SColor color = video::SColor(255, 255, 255, 255); - std::ostringstream oss; - oss << (int)(speed*10); + pos.LowerRightCorner = core::vector2di(offset.X+int(0.6f*meter_width), + offset.Y-0.5f*meter_height); + pos.UpperLeftCorner = core::vector2di(offset.X+int(0.6f*meter_width), + offset.Y-0.5f*meter_height); - font->draw(oss.str().c_str(), pos, color); + font->draw(oss.str().c_str(), pos, color, true, true); + } -} +} // drawSpeedAndEnergy //----------------------------------------------------------------------------- /** Displays the rank and the lap of the kart. @@ -755,21 +761,6 @@ void RaceGUI::drawRankLap(const AbstractKart* kart, static video::SColor color = video::SColor(255, 255, 255, 255); WorldWithRank *world = (WorldWithRank*)(World::getWorld()); - if (world->displayRank()) - { - const int rank = kart->getPosition(); - - font->draw(m_string_rank.c_str(), pos, color); - pos.UpperLeftCorner.Y += font_height; - pos.LowerRightCorner.Y += font_height; - - char str[256]; - const unsigned int kart_amount = world->getCurrentNumKarts(); - sprintf(str, "%d/%d", rank, kart_amount); - font->draw(core::stringw(str).c_str(), pos, color); - pos.UpperLeftCorner.Y += font_height; - pos.LowerRightCorner.Y += font_height; - } // Don't display laps in follow the leader mode if(world->raceHasLaps())