This commit is contained in:
chmodsayshello 2024-05-16 22:10:58 +07:00 committed by GitHub
commit 6a8d3f7fee
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 29 additions and 21 deletions

View File

@ -790,7 +790,7 @@ protected:
// Misc
void showOverlayMessage(const char *msg, float dtime, int percent,
bool draw_clouds = true);
float *indef_pos = nullptr);
inline bool fogEnabled()
{
@ -1245,7 +1245,7 @@ void Game::shutdown()
if (g_touchscreengui)
g_touchscreengui->hide();
showOverlayMessage(N_("Shutting down..."), 0, 0, false);
showOverlayMessage(N_("Shutting down..."), 0, 0);
if (clouds)
clouds->drop();
@ -1292,12 +1292,13 @@ void Game::shutdown()
FpsControl fps_control;
fps_control.reset();
float indef_pos = 0;
while (stop_thread->isRunning()) {
m_rendering_engine->run();
f32 dtime;
fps_control.limit(device, &dtime);
showOverlayMessage(N_("Shutting down..."), dtime, 0, false);
showOverlayMessage(N_("Shutting down..."), dtime, 0, &indef_pos);
}
stop_thread->rethrow();
@ -1419,6 +1420,7 @@ bool Game::createSingleplayerServer(const std::string &map_dir,
FpsControl fps_control;
fps_control.reset();
float indef_pos = 0;
while (start_thread->isRunning()) {
if (!m_rendering_engine->run() || input->cancelPressed())
@ -1429,7 +1431,7 @@ bool Game::createSingleplayerServer(const std::string &map_dir,
if (success)
showOverlayMessage(N_("Creating server..."), dtime, 5);
else
showOverlayMessage(N_("Shutting down..."), dtime, 0, false);
showOverlayMessage(N_("Shutting down..."), dtime, 0, &indef_pos);
}
start_thread->rethrow();
@ -4366,10 +4368,10 @@ void Game::drawScene(ProfilerGraph *graph, RunStats *stats)
Misc
****************************************************************************/
void Game::showOverlayMessage(const char *msg, float dtime, int percent, bool draw_sky)
void Game::showOverlayMessage(const char *msg, float dtime, int percent, float *indef_pos)
{
m_rendering_engine->draw_load_screen(wstrgettext(msg), guienv, texture_src,
dtime, percent, draw_sky);
dtime, percent, indef_pos);
}
void Game::settingChangedCallback(const std::string &setting_name, void *data)

View File

@ -308,7 +308,7 @@ bool RenderingEngine::setWindowIcon()
*/
void RenderingEngine::draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc, float dtime,
int percent, bool sky)
int percent, float *indef_pos)
{
v2u32 screensize = getWindowSize();
@ -322,18 +322,22 @@ void RenderingEngine::draw_load_screen(const std::wstring &text,
auto *driver = get_video_driver();
if (sky) {
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
if (g_settings->getBool("menu_clouds")) {
g_menuclouds->step(dtime * 3);
g_menucloudsmgr->drawAll();
}
} else {
driver->beginScene(true, true, video::SColor(255, 0, 0, 0));
driver->setFog(RenderingEngine::MENU_SKY_COLOR);
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
if (g_settings->getBool("menu_clouds")) {
g_menuclouds->step(dtime * 3);
g_menucloudsmgr->drawAll();
}
int percent_min = 0;
int percent_max = percent;
if (indef_pos) {
*indef_pos = fmodf(*indef_pos + (dtime * 50.0f), 140.0f);
percent_max = std::min((int) *indef_pos, 100);
percent_min = std::max((int) *indef_pos - 40, 0);
}
// draw progress bar
if ((percent >= 0) && (percent <= 100)) {
if ((percent_min >= 0) && (percent_max <= 100)) {
video::ITexture *progress_img = tsrc->getTexture("progress_bar.png");
video::ITexture *progress_img_bg =
tsrc->getTexture("progress_bar_bg.png");
@ -364,11 +368,11 @@ void RenderingEngine::draw_load_screen(const std::wstring &text,
0, 0, true);
draw2DImageFilterScaled(get_video_driver(), progress_img,
core::rect<s32>(img_pos.X, img_pos.Y,
img_pos.X + (percent * imgW) / 100,
core::rect<s32>(img_pos.X + (percent_min * imgW) / 100, img_pos.Y,
img_pos.X + (percent_max * imgW) / 100,
img_pos.Y + imgH),
core::rect<s32>(0, 0,
(percent * img_size.Width) / 100,
core::rect<s32>(percent_min * img_size.Width / 100, 0,
percent_max * img_size.Width / 100,
img_size.Height),
0, 0, true);
}

View File

@ -137,9 +137,11 @@ public:
return m_device->getGUIEnvironment();
}
// If "indef_pos" is given, the value of "percent" is ignored and an indefinite
// progress bar is drawn.
void draw_load_screen(const std::wstring &text,
gui::IGUIEnvironment *guienv, ITextureSource *tsrc,
float dtime = 0, int percent = 0, bool sky = true);
float dtime = 0, int percent = 0, float *indef_pos = nullptr);
void draw_scene(video::SColor skycolor, bool show_hud,
bool draw_wield_tool, bool draw_crosshair);