diff --git a/src/hud.cpp b/src/hud.cpp index 58a6c7cf8..273da9c92 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -64,6 +64,8 @@ Hud::Hud(video::IVideoDriver *driver, gui::IGUIEnvironment* guienv, selectionbox_argb = video::SColor(255, sbox_r, sbox_g, sbox_b); use_crosshair_image = tsrc->isKnownSourceImage("crosshair.png"); + use_hotbar_bg_img = tsrc->isKnownSourceImage("hotbar.png"); + use_hotbar_border_img = tsrc->isKnownSourceImage("hotbar_selected.png"); } @@ -90,6 +92,18 @@ void Hud::drawItem(v2s32 upperleftpos, s32 imgsize, s32 itemcount, driver->draw2DRectangle(bgcolor, barrect, NULL);*/ core::rect imgrect(0, 0, imgsize, imgsize); + const video::SColor hbar_color(255, 255, 255, 255); + const video::SColor hbar_colors[] = {hbar_color, hbar_color, hbar_color, hbar_color}; + + if (use_hotbar_bg_img) { + core::rect imgrect2(-padding/2, -padding/2, width+padding/2, height+padding/2); + core::rect rect2 = imgrect2 + pos; + video::ITexture *texture = tsrc->getTexture("hotbar.png"); + core::dimension2di imgsize(texture->getOriginalSize()); + driver->draw2DImage(texture, rect2, + core::rect(core::position2d(0,0), imgsize), + NULL, hbar_colors, true); + } for (s32 i = 0; i < itemcount; i++) { @@ -112,62 +126,74 @@ void Hud::drawItem(v2s32 upperleftpos, s32 imgsize, s32 itemcount, core::rect rect = imgrect + pos + steppos; - if (selectitem == i + 1) - { - video::SColor c_outside(255,255,0,0); - //video::SColor c_outside(255,0,0,0); - //video::SColor c_inside(255,192,192,192); - s32 x1 = rect.UpperLeftCorner.X; - s32 y1 = rect.UpperLeftCorner.Y; - s32 x2 = rect.LowerRightCorner.X; - s32 y2 = rect.LowerRightCorner.Y; - // Black base borders - driver->draw2DRectangle(c_outside, + if (selectitem == i + 1) { + if (use_hotbar_border_img) { + core::rect imgrect2(-padding*2, -padding*2, height, height); + rect = imgrect2 + pos + steppos; + video::ITexture *texture = tsrc->getTexture("hotbar_selected.png"); + core::dimension2di imgsize(texture->getOriginalSize()); + driver->draw2DImage(texture, rect, + core::rect(core::position2d(0,0), imgsize), + NULL, hbar_colors, true); + rect = imgrect + pos + steppos; + } else { + rect = imgrect + pos + steppos; + video::SColor c_outside(255,255,0,0); + //video::SColor c_outside(255,0,0,0); + //video::SColor c_inside(255,192,192,192); + s32 x1 = rect.UpperLeftCorner.X; + s32 y1 = rect.UpperLeftCorner.Y; + s32 x2 = rect.LowerRightCorner.X; + s32 y2 = rect.LowerRightCorner.Y; + // Black base borders + driver->draw2DRectangle(c_outside, core::rect( v2s32(x1 - padding, y1 - padding), v2s32(x2 + padding, y1) ), NULL); - driver->draw2DRectangle(c_outside, + driver->draw2DRectangle(c_outside, core::rect( v2s32(x1 - padding, y2), v2s32(x2 + padding, y2 + padding) ), NULL); - driver->draw2DRectangle(c_outside, + driver->draw2DRectangle(c_outside, core::rect( v2s32(x1 - padding, y1), v2s32(x1, y2) ), NULL); - driver->draw2DRectangle(c_outside, + driver->draw2DRectangle(c_outside, core::rect( v2s32(x2, y1), v2s32(x2 + padding, y2) ), NULL); - /*// Light inside borders - driver->draw2DRectangle(c_inside, + /*// Light inside borders + driver->draw2DRectangle(c_inside, core::rect( v2s32(x1 - padding/2, y1 - padding/2), v2s32(x2 + padding/2, y1) ), NULL); - driver->draw2DRectangle(c_inside, + driver->draw2DRectangle(c_inside, core::rect( v2s32(x1 - padding/2, y2), v2s32(x2 + padding/2, y2 + padding/2) ), NULL); - driver->draw2DRectangle(c_inside, + driver->draw2DRectangle(c_inside, core::rect( v2s32(x1 - padding/2, y1), v2s32(x1, y2) ), NULL); - driver->draw2DRectangle(c_inside, + driver->draw2DRectangle(c_inside, core::rect( v2s32(x2, y1), v2s32(x2 + padding/2, y2) ), NULL); - */ + */ + } } video::SColor bgcolor2(128, 0, 0, 0); - driver->draw2DRectangle(bgcolor2, rect, NULL); + if (!use_hotbar_bg_img) + driver->draw2DRectangle(bgcolor2, rect, NULL); drawItemStack(driver, font, item, rect, NULL, gamedef); } } @@ -222,7 +248,7 @@ void Hud::drawLuaElements() { break; } default: infostream << "Hud::drawLuaElements: ignoring drawform " << e->type << - "of hud element ID " << i << " due to unrecognized type" << std::endl; + " of hud element ID " << i << " due to unrecognized type" << std::endl; } } } diff --git a/src/hud.h b/src/hud.h index 27e239297..92ee9a62c 100644 --- a/src/hud.h +++ b/src/hud.h @@ -106,6 +106,8 @@ public: video::SColor crosshair_argb; video::SColor selectionbox_argb; bool use_crosshair_image; + bool use_hotbar_border_img; + bool use_hotbar_bg_img; Hud(video::IVideoDriver *driver, gui::IGUIEnvironment* guienv, gui::IGUIFont *font, u32 text_height, IGameDef *gamedef,