Skip to content

Commit 1838a3f

Browse files
sapiersapier
sapier
authored and
sapier
committedApr 27, 2014
Add support for dpi based HUD scaling
Add support for (configurable) multiline hotbar Improved screensize handling Add userdefined gui scale by BlockMen
1 parent 8d31534 commit 1838a3f

13 files changed

+266
-151
lines changed
 

‎doc/menu_lua_api.txt

+9-1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ engine.file_open_dialog(formname,caption)
116116
^ -if dialog was canceled "_cancelled"
117117
^ will be added to fieldname value is set to formname itself
118118
^ returns nil or selected file/folder
119+
engine.get_screen_info()
120+
^ returns {
121+
density = <screen density 0.75,1.0,2.0,3.0 ... (dpi)>,
122+
display_width = <width of display>,
123+
display_height = <height of display>,
124+
window_width = <current window width>,
125+
window_height = <current window height>
126+
}
119127

120128
Games:
121129
engine.get_game(index)
@@ -198,7 +206,7 @@ engine.handle_async(async_job,parameters,finished)
198206
^ execute a function asynchronously
199207
^ async_job is a function receiving one parameter and returning one parameter
200208
^ parameters parameter table passed to async_job
201-
^ finished function to be called once async_job has finished
209+
^ finished function to be called once async_job has finished
202210
^ the result of async_job is passed to this function
203211

204212
Limitations of Async operations

‎minetest.conf.example

+6-1
Original file line numberDiff line numberDiff line change
@@ -140,13 +140,18 @@
140140
#crosshair_color = (255,255,255)
141141
# Cross alpha (opaqueness, between 0 and 255)
142142
#crosshair_alpha = 255
143+
# scale gui by a user specified value
144+
#gui_scaling = 1.0
143145
# Sensitivity multiplier
144146
#mouse_sensitivity = 0.2
145147
# Sound settings
146148
#enable_sound = true
147149
#sound_volume = 0.7
148150
# Whether node texture animations should be desynchronized per MapBlock
149151
#desynchronize_mapblock_texture_animation = true
152+
# maximum percentage of current window to be used for hotbar
153+
# (usefull if you've there's something to be displayed right or left of hotbar)
154+
#hud_hotbar_max_width = 1.0
150155
# Texture filtering settings
151156
#mip_map = false
152157
#anisotropic_filter = false
@@ -165,7 +170,7 @@
165170
#normalmaps_strength = 0.6
166171
# Strength of generated normalmaps
167172
#normalmaps_smooth = 1
168-
# Defines sampling step of texture (0 - 2)
173+
# Defines sampling step of texture (0 - 2)
169174
# Higher the value normal maps will be smoother
170175
#enable_parallax_occlusion = false
171176
# Scale of parallax occlusion effect

‎src/camera.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ void Camera::step(f32 dtime)
249249
}
250250

251251
void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
252-
v2u32 screensize, f32 tool_reload_ratio,
252+
f32 tool_reload_ratio,
253253
int current_camera_mode, ClientEnvironment &c_env)
254254
{
255255
// Get player position
@@ -422,7 +422,7 @@ void Camera::update(LocalPlayer* player, f32 frametime, f32 busytime,
422422
fov_degrees = MYMIN(fov_degrees, 170.0);
423423

424424
// FOV and aspect ratio
425-
m_aspect = (f32)screensize.X / (f32) screensize.Y;
425+
m_aspect = (f32) porting::getWindowSize().X / (f32) porting::getWindowSize().Y;
426426
m_fov_y = fov_degrees * M_PI / 180.0;
427427
// Increase vertical FOV on lower aspect ratios (<16:10)
428428
m_fov_y *= MYMAX(1.0, MYMIN(1.4, sqrt(16./10. / m_aspect)));

‎src/camera.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ class Camera
117117
// Update the camera from the local player's position.
118118
// busytime is used to adjust the viewing range.
119119
void update(LocalPlayer* player, f32 frametime, f32 busytime,
120-
v2u32 screensize, f32 tool_reload_ratio,
120+
f32 tool_reload_ratio,
121121
int current_camera_mode, ClientEnvironment &c_env);
122122

123123
// Render distance feedback loop

‎src/defaultsettings.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,12 @@ void set_default_settings(Settings *settings)
119119
settings->setDefault("selectionbox_color", "(0,0,0)");
120120
settings->setDefault("crosshair_color", "(255,255,255)");
121121
settings->setDefault("crosshair_alpha", "255");
122+
settings->setDefault("gui_scaling", "1.0");
122123
settings->setDefault("mouse_sensitivity", "0.2");
123124
settings->setDefault("enable_sound", "true");
124125
settings->setDefault("sound_volume", "0.8");
125126
settings->setDefault("desynchronize_mapblock_texture_animation", "true");
127+
settings->setDefault("hud_hotbar_max_width","1.0");
126128

127129
settings->setDefault("mip_map", "false");
128130
settings->setDefault("anisotropic_filter", "false");

‎src/game.cpp

+9-17
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,6 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
10991099
// Calculate text height using the font
11001100
u32 text_height = font->getDimension(L"Random test string").Height;
11011101

1102-
v2u32 last_screensize(0,0);
11031102
v2u32 screensize = driver->getScreenSize();
11041103

11051104
/*
@@ -1842,15 +1841,6 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
18421841
/*
18431842
Random calculations
18441843
*/
1845-
last_screensize = screensize;
1846-
screensize = driver->getScreenSize();
1847-
v2s32 displaycenter(screensize.X/2,screensize.Y/2);
1848-
//bool screensize_changed = screensize != last_screensize;
1849-
1850-
1851-
// Update HUD values
1852-
hud.screensize = screensize;
1853-
hud.displaycenter = displaycenter;
18541844
hud.resizeHotbar();
18551845

18561846
// Hilight boxes collected during the loop and displayed
@@ -2267,10 +2257,11 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
22672257
first_loop_after_window_activation = false;
22682258
}
22692259
else{
2270-
s32 dx = input->getMousePos().X - displaycenter.X;
2271-
s32 dy = input->getMousePos().Y - displaycenter.Y;
2272-
if(invert_mouse || player->camera_mode == CAMERA_MODE_THIRD_FRONT)
2260+
s32 dx = input->getMousePos().X - (driver->getScreenSize().Width/2);
2261+
s32 dy = input->getMousePos().Y - (driver->getScreenSize().Height/2);
2262+
if(invert_mouse || player->camera_mode == CAMERA_MODE_THIRD_FRONT) {
22732263
dy = -dy;
2264+
}
22742265
//infostream<<"window active, pos difference "<<dx<<","<<dy<<std::endl;
22752266

22762267
/*const float keyspeed = 500;
@@ -2292,7 +2283,8 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
22922283

22932284
turn_amount = v2f(dx, dy).getLength() * d;
22942285
}
2295-
input->setMousePos(displaycenter.X, displaycenter.Y);
2286+
input->setMousePos((driver->getScreenSize().Width/2),
2287+
(driver->getScreenSize().Height/2));
22962288
}
22972289
else{
22982290
// Mac OSX gets upset if this is set every frame
@@ -2657,7 +2649,7 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
26572649
}
26582650
player->camera_mode = current_camera_mode;
26592651
tool_reload_ratio = MYMIN(tool_reload_ratio, 1.0);
2660-
camera.update(player, dtime, busytime, screensize, tool_reload_ratio,
2652+
camera.update(player, dtime, busytime, tool_reload_ratio,
26612653
current_camera_mode, client.getEnv());
26622654
camera.step(dtime);
26632655

@@ -3538,8 +3530,8 @@ void the_game(bool &kill, bool random_input, InputHandler *input,
35383530
*/
35393531
if (show_hud)
35403532
{
3541-
hud.drawHotbar(v2s32(displaycenter.X, screensize.Y),
3542-
client.getHP(), client.getPlayerItem(), client.getBreath());
3533+
hud.drawHotbar(client.getHP(), client.getPlayerItem(),
3534+
client.getBreath());
35433535
}
35443536

35453537
/*

0 commit comments

Comments
 (0)
Please sign in to comment.