mirror of
https://github.com/luanti-org/luanti.git
synced 2026-04-17 08:37:33 +00:00
Add new setting to enable/disable dark mode in main menu (#16787)
Co-authored-by: Zenon Seth <Zenon.Seth@gmail.com>
This commit is contained in:
@@ -4,6 +4,11 @@
|
||||
|
||||
mm_game_theme = {}
|
||||
|
||||
local COLORS = {
|
||||
dark = { clouds = "#1c2a47", sky = "#090b1a" },
|
||||
light = { clouds = "#f0f0ff", sky = "#8cbafa" },
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function mm_game_theme.init()
|
||||
mm_game_theme.texturepack = core.settings:get("texture_path")
|
||||
@@ -36,12 +41,16 @@ function mm_game_theme.set_engine(hide_decorations)
|
||||
mm_game_theme.set_engine_single("footer")
|
||||
end
|
||||
|
||||
local c = COLORS[core.settings:get("menu_theme")]
|
||||
if not c then
|
||||
core.log("warning", "Invalid menu theme: " .. core.settings:get("menu_theme"))
|
||||
else
|
||||
core.set_clouds_color(c.clouds)
|
||||
core.set_sky_color(c.sky)
|
||||
end
|
||||
|
||||
if not have_bg then
|
||||
if core.settings:get_bool("menu_clouds") then
|
||||
core.set_clouds(true)
|
||||
else
|
||||
mm_game_theme.set_dirt_bg()
|
||||
end
|
||||
core.set_clouds(core.settings:get_bool("menu_clouds"))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -71,12 +80,16 @@ function mm_game_theme.set_game(gamedetails)
|
||||
mm_game_theme.set_game_single("header", gamedetails)
|
||||
mm_game_theme.set_game_single("footer", gamedetails)
|
||||
|
||||
local c = COLORS[core.settings:get("menu_theme")]
|
||||
if not c then
|
||||
core.log("warning", "Invalid menu theme: " .. core.settings:get("menu_theme"))
|
||||
else
|
||||
core.set_clouds_color(c.clouds)
|
||||
core.set_sky_color(c.sky)
|
||||
end
|
||||
|
||||
if not have_bg then
|
||||
if core.settings:get_bool("menu_clouds") then
|
||||
core.set_clouds(true)
|
||||
else
|
||||
mm_game_theme.set_dirt_bg()
|
||||
end
|
||||
core.set_clouds(core.settings:get_bool("menu_clouds"))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -92,7 +105,6 @@ local valid_image_extensions = {
|
||||
".jpeg",
|
||||
}
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function mm_game_theme.set_engine_single(identifier)
|
||||
--try texture pack first
|
||||
if mm_game_theme.texturepack ~= nil then
|
||||
@@ -113,8 +125,6 @@ function mm_game_theme.set_engine_single(identifier)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
function mm_game_theme.set_game_single(identifier, gamedetails)
|
||||
local extensions_randomised = table.copy(valid_image_extensions)
|
||||
table.shuffle(extensions_randomised)
|
||||
@@ -156,20 +166,6 @@ function mm_game_theme.set_game_single(identifier, gamedetails)
|
||||
return false
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function mm_game_theme.set_dirt_bg()
|
||||
if mm_game_theme.texturepack ~= nil then
|
||||
local path = mm_game_theme.texturepack .. DIR_DELIM .. "default_dirt.png"
|
||||
if core.set_background("background", path, true, 128) then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
-- Use universal fallback texture in textures/base/pack
|
||||
local minimalpath = defaulttexturedir .. "menu_bg.png"
|
||||
core.set_background("background", minimalpath, true, 128)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function mm_game_theme.stop_music()
|
||||
if mm_game_theme.music_handle ~= nil then
|
||||
|
||||
@@ -885,6 +885,9 @@ tooltip_append_itemname (Append item name) bool false
|
||||
# Use a cloud animation for the main menu background.
|
||||
menu_clouds (Clouds in menu) bool true
|
||||
|
||||
# Choose theme colors for the main menu background.
|
||||
menu_theme (Menu theme) enum light dark,light
|
||||
|
||||
[**HUD]
|
||||
|
||||
# Modifies the size of the HUD elements.
|
||||
|
||||
@@ -218,6 +218,9 @@ GUI
|
||||
* `minsize`: minimum tile size, images are scaled to at least this size prior
|
||||
doing tiling (background only)
|
||||
* `core.set_clouds(<true/false>)`
|
||||
* `core.set_clouds_color(colorString)`
|
||||
* `core.set_sky_color(colorString)`
|
||||
* `colorString`: `"#RRGGBB"` format
|
||||
* `core.set_topleft_text(text)`
|
||||
* `core.show_touchscreen_layout()`
|
||||
* `core.show_path_select_dialog(formname, caption, is_file_select)`
|
||||
|
||||
@@ -131,7 +131,6 @@ are placeholders intended to be overwritten by the game.
|
||||
|
||||
### Mainmenu textures
|
||||
|
||||
* `menu_bg.png`: used as mainmenu background when the clouds are disabled
|
||||
* `menu_header.png`: header texture when no texture pack is selected
|
||||
|
||||
* `no_screenshot.png`
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "version.h"
|
||||
#include "renderingengine.h"
|
||||
#include "settings.h"
|
||||
#include "gettime.h"
|
||||
#include "util/numeric.h"
|
||||
#include "util/tracy_wrapper.h"
|
||||
#include <IGUISpriteBank.h>
|
||||
@@ -125,9 +126,13 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
|
||||
std::unique_ptr<IWritableShaderSource> ssrc(createShaderSource());
|
||||
ssrc->addShaderUniformSetterFactory(std::make_unique<FogShaderUniformSetterFactory>());
|
||||
g_menucloudsmgr = m_rendering_engine->get_scene_manager()->createNewSceneManager();
|
||||
g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, rand());
|
||||
{
|
||||
struct tm tm = mt_localtime();
|
||||
u32 seed = (tm.tm_year << 16) | tm.tm_yday; // unique clouds every day
|
||||
g_menuclouds = new Clouds(g_menucloudsmgr, ssrc.get(), -1, seed);
|
||||
}
|
||||
g_menuclouds->setHeight(100.0f);
|
||||
g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255));
|
||||
g_menuclouds->update(v3f(0, 0, 0), m_rendering_engine->m_menu_clouds_color);
|
||||
scene::ICameraSceneNode* camera;
|
||||
camera = g_menucloudsmgr->addCameraSceneNode(NULL, v3f(0, 0, 0), v3f(0, 60, 100));
|
||||
camera->setFarValue(10000);
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
#include "irr_ptr.h"
|
||||
|
||||
RenderingEngine *RenderingEngine::s_singleton = nullptr;
|
||||
const video::SColor RenderingEngine::MENU_SKY_COLOR = video::SColor(255, 140, 186, 250);
|
||||
|
||||
/* Helper classes */
|
||||
|
||||
@@ -310,8 +309,9 @@ void RenderingEngine::draw_load_screen(const std::wstring &text,
|
||||
|
||||
auto *driver = get_video_driver();
|
||||
|
||||
driver->setFog(RenderingEngine::MENU_SKY_COLOR);
|
||||
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
|
||||
driver->setFog(m_menu_sky_color);
|
||||
driver->beginScene(true, true, m_menu_sky_color);
|
||||
|
||||
if (g_settings->getBool("menu_clouds")) {
|
||||
g_menuclouds->step(dtime * 3);
|
||||
g_menucloudsmgr->drawAll();
|
||||
|
||||
@@ -63,8 +63,6 @@ public:
|
||||
class RenderingEngine
|
||||
{
|
||||
public:
|
||||
static const video::SColor MENU_SKY_COLOR;
|
||||
|
||||
RenderingEngine(MyEventReceiver *eventReceiver);
|
||||
~RenderingEngine();
|
||||
|
||||
@@ -156,6 +154,9 @@ public:
|
||||
return s_singleton->m_receiver->getLastPointerType();
|
||||
}
|
||||
|
||||
video::SColor m_menu_sky_color = video::SColor(255, 140, 186, 250);
|
||||
video::SColor m_menu_clouds_color = video::SColor(255, 240, 240, 255);
|
||||
|
||||
private:
|
||||
static void settingChangedCallback(const std::string &name, void *data);
|
||||
v2u32 _getWindowSize() const;
|
||||
|
||||
@@ -276,6 +276,7 @@ void set_default_settings()
|
||||
settings->setDefault("soft_clouds", "false");
|
||||
settings->setDefault("cloud_radius", "12");
|
||||
settings->setDefault("menu_clouds", "true");
|
||||
settings->setDefault("menu_theme", "light");
|
||||
settings->setDefault("translucent_liquids", "true");
|
||||
settings->setDefault("console_height", "0.6");
|
||||
settings->setDefault("console_color", "(0,0,0)");
|
||||
|
||||
+15
-24
@@ -306,22 +306,6 @@ void GUIEngine::run()
|
||||
|
||||
unsigned int text_height = g_fontengine->getTextHeight();
|
||||
|
||||
// Reset fog color
|
||||
{
|
||||
video::SColor fog_color;
|
||||
video::E_FOG_TYPE fog_type = video::EFT_FOG_LINEAR;
|
||||
f32 fog_start = 0;
|
||||
f32 fog_end = 0;
|
||||
f32 fog_density = 0;
|
||||
bool fog_pixelfog = false;
|
||||
bool fog_rangefog = false;
|
||||
driver->getFog(fog_color, fog_type, fog_start, fog_end, fog_density,
|
||||
fog_pixelfog, fog_rangefog);
|
||||
|
||||
driver->setFog(RenderingEngine::MENU_SKY_COLOR, fog_type, fog_start,
|
||||
fog_end, fog_density, fog_pixelfog, fog_rangefog);
|
||||
}
|
||||
|
||||
const core::dimension2d<u32> initial_screen_size(
|
||||
g_settings->getU16("screen_w"),
|
||||
g_settings->getU16("screen_h")
|
||||
@@ -356,7 +340,8 @@ void GUIEngine::run()
|
||||
last_window_info = window_info;
|
||||
}
|
||||
|
||||
driver->beginScene(true, true, RenderingEngine::MENU_SKY_COLOR);
|
||||
driver->setFog(m_rendering_engine->m_menu_sky_color);
|
||||
driver->beginScene(true, true, m_rendering_engine->m_menu_sky_color);
|
||||
|
||||
if (m_clouds_enabled) {
|
||||
drawClouds(dtime);
|
||||
@@ -419,10 +404,22 @@ GUIEngine::~GUIEngine()
|
||||
/******************************************************************************/
|
||||
void GUIEngine::drawClouds(float dtime)
|
||||
{
|
||||
g_menuclouds->update(v3f(0, 0, 0), m_rendering_engine->m_menu_clouds_color);
|
||||
g_menuclouds->step(dtime * 3);
|
||||
g_menucloudsmgr->drawAll();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void GUIEngine::setMenuCloudsColor(video::SColor color)
|
||||
{
|
||||
m_rendering_engine->m_menu_clouds_color = color;
|
||||
}
|
||||
|
||||
void GUIEngine::setMenuSkyColor(video::SColor color)
|
||||
{
|
||||
m_rendering_engine->m_menu_sky_color = color;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void GUIEngine::setFormspecPrepend(const std::string &fs)
|
||||
{
|
||||
@@ -438,14 +435,8 @@ void GUIEngine::drawBackground(video::IVideoDriver *driver)
|
||||
v2u32 screensize = driver->getScreenSize();
|
||||
|
||||
video::ITexture* texture = m_textures[TEX_LAYER_BACKGROUND].texture;
|
||||
|
||||
/* If no texture, draw background of solid color */
|
||||
if(!texture){
|
||||
video::SColor color(255,80,58,37);
|
||||
core::rect<s32> rect(0, 0, screensize.X, screensize.Y);
|
||||
driver->draw2DRectangle(color, rect, NULL);
|
||||
if (!texture)
|
||||
return;
|
||||
}
|
||||
|
||||
v2u32 sourcesize = texture->getOriginalSize();
|
||||
|
||||
|
||||
@@ -279,5 +279,8 @@ private:
|
||||
/** is drawing of clouds enabled atm */
|
||||
bool m_clouds_enabled = true;
|
||||
|
||||
void setMenuCloudsColor(video::SColor color);
|
||||
void setMenuSkyColor(video::SColor color);
|
||||
|
||||
static void fullscreenChangedCallback(const std::string &name, void *data);
|
||||
};
|
||||
|
||||
@@ -219,6 +219,32 @@ int ModApiMainMenu::l_set_clouds(lua_State *L)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
int ModApiMainMenu::l_set_clouds_color(lua_State* L)
|
||||
{
|
||||
GUIEngine* engine = getGuiEngine(L);
|
||||
sanity_check(engine != NULL);
|
||||
|
||||
video::SColor color;
|
||||
parseColorString(readParam<std::string>(L, 1), color, false);
|
||||
|
||||
engine->setMenuCloudsColor(color);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ModApiMainMenu::l_set_sky_color(lua_State* L)
|
||||
{
|
||||
GUIEngine* engine = getGuiEngine(L);
|
||||
sanity_check(engine != NULL);
|
||||
|
||||
video::SColor color;
|
||||
parseColorString(readParam<std::string>(L, 1), color, false);
|
||||
|
||||
engine->setMenuSkyColor(color);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
int ModApiMainMenu::l_get_textlist_index(lua_State *L)
|
||||
{
|
||||
@@ -1078,6 +1104,8 @@ void ModApiMainMenu::Initialize(lua_State *L, int top)
|
||||
API_FCT(update_formspec);
|
||||
API_FCT(set_formspec_prepend);
|
||||
API_FCT(set_clouds);
|
||||
API_FCT(set_sky_color);
|
||||
API_FCT(set_clouds_color);
|
||||
API_FCT(get_textlist_index);
|
||||
API_FCT(get_table_index);
|
||||
API_FCT(get_worlds);
|
||||
|
||||
@@ -74,6 +74,10 @@ private:
|
||||
|
||||
static int l_set_clouds(lua_State *L);
|
||||
|
||||
static int l_set_clouds_color(lua_State *L);
|
||||
|
||||
static int l_set_sky_color(lua_State *L);
|
||||
|
||||
static int l_get_textlist_index(lua_State *L);
|
||||
|
||||
static int l_get_table_index(lua_State *L);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 83 B |
Reference in New Issue
Block a user