Skip to content

Commit eae3395

Browse files
rubenwardykwolekr
authored andcommittedApr 11, 2016
Hud: Fix offset being ignored by inventory bar
1 parent 9a04dfd commit eae3395

File tree

3 files changed

+34
-30
lines changed

3 files changed

+34
-30
lines changed
 

‎doc/lua_api.txt

+1
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,7 @@ Displays a horizontal bar made up of half-images.
945945
* `number`: Number of items in the inventory to be displayed.
946946
* `item`: Position of item that is selected.
947947
* `direction`
948+
* `offset`: offset in pixels from position.
948949

949950
### `waypoint`
950951
Displays distance to selected world position.

‎src/hud.cpp

+29-27
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
102102
if (mode == "box") {
103103
m_use_selection_mesh = false;
104104
m_selection_material.Thickness =
105-
rangelim(g_settings->getS16("selectionbox_width"), 1, 5);
105+
rangelim(g_settings->getS16("selectionbox_width"), 1, 5);
106106
} else if (mode == "halo") {
107107
m_use_selection_mesh = true;
108108
m_selection_material.setTexture(0, tsrc->getTextureForMesh("halo.png"));
@@ -196,24 +196,25 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect,
196196
}
197197

198198
//NOTE: selectitem = 0 -> no selected; selectitem 1-based
199-
void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
200-
InventoryList *mainlist, u16 selectitem, u16 direction)
199+
void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 inv_offset,
200+
InventoryList *mainlist, u16 selectitem, u16 direction, const v2s32 &offset)
201201
{
202202
#ifdef HAVE_TOUCHSCREENGUI
203-
if ( (g_touchscreengui) && (offset == 0))
203+
if (g_touchscreengui && inv_offset == 0)
204204
g_touchscreengui->resetHud();
205205
#endif
206206

207207
s32 height = m_hotbar_imagesize + m_padding * 2;
208-
s32 width = (itemcount - offset) * (m_hotbar_imagesize + m_padding * 2);
208+
s32 width = (itemcount - inv_offset) * (m_hotbar_imagesize + m_padding * 2);
209209

210210
if (direction == HUD_DIR_TOP_BOTTOM || direction == HUD_DIR_BOTTOM_TOP) {
211211
width = m_hotbar_imagesize + m_padding * 2;
212-
height = (itemcount - offset) * (m_hotbar_imagesize + m_padding * 2);
212+
height = (itemcount - inv_offset) * (m_hotbar_imagesize + m_padding * 2);
213213
}
214214

215215
// Position of upper left corner of bar
216-
v2s32 pos = upperleftpos;
216+
v2s32 pos = upperleftpos + offset;
217+
pos *= g_settings->getFloat("hud_scaling") * porting::getDisplayDensity();
217218

218219
if (hotbar_image != player->hotbar_image) {
219220
hotbar_image = player->hotbar_image;
@@ -243,26 +244,25 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
243244
NULL, hbar_colors, true);
244245
}
245246

246-
for (s32 i = offset; i < itemcount && (size_t)i < mainlist->getSize(); i++)
247-
{
247+
for (s32 i = inv_offset; i < itemcount && (size_t)i < mainlist->getSize(); i++) {
248248
v2s32 steppos;
249249
s32 fullimglen = m_hotbar_imagesize + m_padding * 2;
250250

251251
core::rect<s32> imgrect(0, 0, m_hotbar_imagesize, m_hotbar_imagesize);
252252

253253
switch (direction) {
254-
case HUD_DIR_RIGHT_LEFT:
255-
steppos = v2s32(-(m_padding + (i - offset) * fullimglen), m_padding);
256-
break;
257-
case HUD_DIR_TOP_BOTTOM:
258-
steppos = v2s32(m_padding, m_padding + (i - offset) * fullimglen);
259-
break;
260-
case HUD_DIR_BOTTOM_TOP:
261-
steppos = v2s32(m_padding, -(m_padding + (i - offset) * fullimglen));
262-
break;
263-
default:
264-
steppos = v2s32(m_padding + (i - offset) * fullimglen, m_padding);
265-
break;
254+
case HUD_DIR_RIGHT_LEFT:
255+
steppos = v2s32(-(m_padding + (i - inv_offset) * fullimglen), m_padding);
256+
break;
257+
case HUD_DIR_TOP_BOTTOM:
258+
steppos = v2s32(m_padding, m_padding + (i - inv_offset) * fullimglen);
259+
break;
260+
case HUD_DIR_BOTTOM_TOP:
261+
steppos = v2s32(m_padding, -(m_padding + (i - inv_offset) * fullimglen));
262+
break;
263+
default:
264+
steppos = v2s32(m_padding + (i - inv_offset) * fullimglen, m_padding);
265+
break;
266266
}
267267

268268
drawItem(mainlist->getItem(i), (imgrect + pos + steppos), (i +1) == selectitem );
@@ -275,7 +275,8 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
275275
}
276276

277277

278-
void Hud::drawLuaElements(const v3s16 &camera_offset) {
278+
void Hud::drawLuaElements(const v3s16 &camera_offset)
279+
{
279280
u32 text_height = g_fontengine->getTextHeight();
280281
irr::gui::IGUIFont* font = g_fontengine->getFont();
281282
for (size_t i = 0; i != player->maxHudId(); i++) {
@@ -326,7 +327,8 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) {
326327
break; }
327328
case HUD_ELEM_INVENTORY: {
328329
InventoryList *inv = inventory->getList(e->text);
329-
drawItems(pos, e->number, 0, inv, e->item, e->dir);
330+
v2s32 offs(e->offset.X, e->offset.Y);
331+
drawItems(pos, e->number, 0, inv, e->item, e->dir, offs);
330332
break; }
331333
case HUD_ELEM_WAYPOINT: {
332334
v3f p_pos = player->getPosition() / BS;
@@ -508,9 +510,9 @@ void Hud::setSelectionPos(const v3f &pos, const v3s16 &camera_offset)
508510
m_selection_pos = pos;
509511
m_selection_pos_with_offset = pos - intToFloat(camera_offset, BS);
510512
}
511-
513+
512514
void Hud::drawSelectionMesh()
513-
{
515+
{
514516
if (!m_use_selection_mesh) {
515517
// Draw 3D selection boxes
516518
video::SMaterial oldmaterial = driver->getMaterial2D();
@@ -521,9 +523,9 @@ void Hud::drawSelectionMesh()
521523
aabb3f box = aabb3f(
522524
i->MinEdge + m_selection_pos_with_offset,
523525
i->MaxEdge + m_selection_pos_with_offset);
524-
526+
525527
u32 r = (selectionbox_argb.getRed() *
526-
m_selection_mesh_color.getRed() / 255);
528+
m_selection_mesh_color.getRed() / 255);
527529
u32 g = (selectionbox_argb.getGreen() *
528530
m_selection_mesh_color.getGreen() / 255);
529531
u32 b = (selectionbox_argb.getBlue() *

‎src/hud.h

+4-3
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ class Hud {
130130
void drawCrosshair();
131131
void drawSelectionMesh();
132132
void updateSelectionMesh(const v3s16 &camera_offset);
133-
133+
134134
std::vector<aabb3f> *getSelectionBoxes()
135135
{ return &m_selection_boxes; }
136136

@@ -148,8 +148,9 @@ class Hud {
148148
void drawStatbar(v2s32 pos, u16 corner, u16 drawdir, std::string texture,
149149
s32 count, v2s32 offset, v2s32 size=v2s32());
150150

151-
void drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
152-
InventoryList *mainlist, u16 selectitem, u16 direction);
151+
void drawItems(v2s32 upperleftpos, s32 itemcount, s32 inv_offset,
152+
InventoryList *mainlist, u16 selectitem, u16 direction,
153+
const v2s32 &offset = v2s32(0, 0));
153154

154155
void drawItem(const ItemStack &item, const core::rect<s32>& rect,
155156
bool selected);

0 commit comments

Comments
 (0)
Please sign in to comment.