@@ -102,7 +102,7 @@ Hud::Hud(video::IVideoDriver *driver, scene::ISceneManager* smgr,
102
102
if (mode == " box" ) {
103
103
m_use_selection_mesh = false ;
104
104
m_selection_material.Thickness =
105
- rangelim (g_settings->getS16 (" selectionbox_width" ), 1 , 5 );
105
+ rangelim (g_settings->getS16 (" selectionbox_width" ), 1 , 5 );
106
106
} else if (mode == " halo" ) {
107
107
m_use_selection_mesh = true ;
108
108
m_selection_material.setTexture (0 , tsrc->getTextureForMesh (" halo.png" ));
@@ -196,24 +196,25 @@ void Hud::drawItem(const ItemStack &item, const core::rect<s32>& rect,
196
196
}
197
197
198
198
// 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 )
201
201
{
202
202
#ifdef HAVE_TOUCHSCREENGUI
203
- if ( ( g_touchscreengui) && (offset == 0 ) )
203
+ if (g_touchscreengui && inv_offset == 0 )
204
204
g_touchscreengui->resetHud ();
205
205
#endif
206
206
207
207
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 );
209
209
210
210
if (direction == HUD_DIR_TOP_BOTTOM || direction == HUD_DIR_BOTTOM_TOP) {
211
211
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 );
213
213
}
214
214
215
215
// 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 ();
217
218
218
219
if (hotbar_image != player->hotbar_image ) {
219
220
hotbar_image = player->hotbar_image ;
@@ -243,26 +244,25 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
243
244
NULL , hbar_colors, true );
244
245
}
245
246
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++) {
248
248
v2s32 steppos;
249
249
s32 fullimglen = m_hotbar_imagesize + m_padding * 2 ;
250
250
251
251
core::rect<s32> imgrect (0 , 0 , m_hotbar_imagesize, m_hotbar_imagesize);
252
252
253
253
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 ;
266
266
}
267
267
268
268
drawItem (mainlist->getItem (i), (imgrect + pos + steppos), (i +1 ) == selectitem );
@@ -275,7 +275,8 @@ void Hud::drawItems(v2s32 upperleftpos, s32 itemcount, s32 offset,
275
275
}
276
276
277
277
278
- void Hud::drawLuaElements (const v3s16 &camera_offset) {
278
+ void Hud::drawLuaElements (const v3s16 &camera_offset)
279
+ {
279
280
u32 text_height = g_fontengine->getTextHeight ();
280
281
irr::gui::IGUIFont* font = g_fontengine->getFont ();
281
282
for (size_t i = 0 ; i != player->maxHudId (); i++) {
@@ -326,7 +327,8 @@ void Hud::drawLuaElements(const v3s16 &camera_offset) {
326
327
break ; }
327
328
case HUD_ELEM_INVENTORY: {
328
329
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);
330
332
break ; }
331
333
case HUD_ELEM_WAYPOINT: {
332
334
v3f p_pos = player->getPosition () / BS;
@@ -508,9 +510,9 @@ void Hud::setSelectionPos(const v3f &pos, const v3s16 &camera_offset)
508
510
m_selection_pos = pos;
509
511
m_selection_pos_with_offset = pos - intToFloat (camera_offset, BS);
510
512
}
511
-
513
+
512
514
void Hud::drawSelectionMesh ()
513
- {
515
+ {
514
516
if (!m_use_selection_mesh) {
515
517
// Draw 3D selection boxes
516
518
video::SMaterial oldmaterial = driver->getMaterial2D ();
@@ -521,9 +523,9 @@ void Hud::drawSelectionMesh()
521
523
aabb3f box = aabb3f (
522
524
i->MinEdge + m_selection_pos_with_offset,
523
525
i->MaxEdge + m_selection_pos_with_offset);
524
-
526
+
525
527
u32 r = (selectionbox_argb.getRed () *
526
- m_selection_mesh_color.getRed () / 255 );
528
+ m_selection_mesh_color.getRed () / 255 );
527
529
u32 g = (selectionbox_argb.getGreen () *
528
530
m_selection_mesh_color.getGreen () / 255 );
529
531
u32 b = (selectionbox_argb.getBlue () *
0 commit comments