diff options
author | Nathanaƫl Courant <Ekdohibs@users.noreply.github.com> | 2017-08-27 19:06:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-27 19:06:40 +0200 |
commit | 520b4813832f3623f7b0b0408ecf26f36cda720b (patch) | |
tree | 03e63ac4dbac7f9bc2ee5775f965e5f8f733038c | |
parent | 1f207a3ddbb5fbe903996a924443d9f9522b48a8 (diff) | |
download | minetest-520b4813832f3623f7b0b0408ecf26f36cda720b.tar.gz minetest-520b4813832f3623f7b0b0408ecf26f36cda720b.tar.bz2 minetest-520b4813832f3623f7b0b0408ecf26f36cda720b.zip |
Statbars: fix incorrect half-images in non-standard orientations (fixes #6198)
-rw-r--r-- | src/hud.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/src/hud.cpp b/src/hud.cpp index 7135bc42a..29beef16a 100644 --- a/src/hud.cpp +++ b/src/hud.cpp @@ -399,24 +399,32 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture, p += offset; v2s32 steppos; + core::rect<s32> srchalfrect, dsthalfrect; switch (drawdir) { case HUD_DIR_RIGHT_LEFT: steppos = v2s32(-1, 0); + srchalfrect = core::rect<s32>(srcd.Width / 2, 0, srcd.Width, srcd.Height); + dsthalfrect = core::rect<s32>(dstd.Width / 2, 0, dstd.Width, dstd.Height); break; case HUD_DIR_TOP_BOTTOM: steppos = v2s32(0, 1); + srchalfrect = core::rect<s32>(0, 0, srcd.Width, srcd.Height / 2); + dsthalfrect = core::rect<s32>(0, 0, dstd.Width, dstd.Height / 2); break; case HUD_DIR_BOTTOM_TOP: steppos = v2s32(0, -1); + srchalfrect = core::rect<s32>(0, srcd.Height / 2, srcd.Width, srcd.Height); + dsthalfrect = core::rect<s32>(0, dstd.Height / 2, dstd.Width, dstd.Height); break; default: steppos = v2s32(1, 0); + srchalfrect = core::rect<s32>(0, 0, srcd.Width / 2, srcd.Height); + dsthalfrect = core::rect<s32>(0, 0, dstd.Width / 2, dstd.Height); } steppos.X *= dstd.Width; steppos.Y *= dstd.Height; - for (s32 i = 0; i < count / 2; i++) - { + for (s32 i = 0; i < count / 2; i++) { core::rect<s32> srcrect(0, 0, srcd.Width, srcd.Height); core::rect<s32> dstrect(0,0, dstd.Width, dstd.Height); @@ -425,13 +433,9 @@ void Hud::drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture, p += steppos; } - if (count % 2 == 1) - { - core::rect<s32> srcrect(0, 0, srcd.Width / 2, srcd.Height); - core::rect<s32> dstrect(0,0, dstd.Width / 2, dstd.Height); - - dstrect += p; - draw2DImageFilterScaled(driver, stat_texture, dstrect, srcrect, NULL, colors, true); + if (count % 2 == 1) { + dsthalfrect += p; + draw2DImageFilterScaled(driver, stat_texture, dsthalfrect, srchalfrect, NULL, colors, true); } } |