forked from Mirrorlandia_minetest/minetest
Only use game filter in singleplayer tab; use menu_{background, overlay, header, footer}.png for other tabs
This commit is contained in:
parent
2c09e8a84c
commit
efc9329033
@ -166,15 +166,6 @@ enum
|
|||||||
GUI_ID_GAME_BUTTON_MAX = 150,
|
GUI_ID_GAME_BUTTON_MAX = 150,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
TAB_SINGLEPLAYER=0,
|
|
||||||
TAB_MULTIPLAYER,
|
|
||||||
TAB_ADVANCED,
|
|
||||||
TAB_SETTINGS,
|
|
||||||
TAB_CREDITS
|
|
||||||
};
|
|
||||||
|
|
||||||
GUIMainMenu::GUIMainMenu(gui::IGUIEnvironment* env,
|
GUIMainMenu::GUIMainMenu(gui::IGUIEnvironment* env,
|
||||||
gui::IGUIElement* parent, s32 id,
|
gui::IGUIElement* parent, s32 id,
|
||||||
IMenuManager *menumgr,
|
IMenuManager *menumgr,
|
||||||
@ -258,7 +249,8 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
|
|||||||
core::rect<s32> rect(0, 0, size.X, 40);
|
core::rect<s32> rect(0, 0, size.X, 40);
|
||||||
rect += v2s32(4, 0);
|
rect += v2s32(4, 0);
|
||||||
std::string t = "Minetest " VERSION_STRING;
|
std::string t = "Minetest " VERSION_STRING;
|
||||||
if(m_data->selected_game_name != ""){
|
if(m_data->selected_game_name != "" &&
|
||||||
|
m_data->selected_tab == TAB_SINGLEPLAYER){
|
||||||
t += "/";
|
t += "/";
|
||||||
t += m_data->selected_game_name;
|
t += m_data->selected_game_name;
|
||||||
}
|
}
|
||||||
@ -428,6 +420,26 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
|
|||||||
delete[] text;
|
delete[] text;
|
||||||
}
|
}
|
||||||
changeCtype("C");
|
changeCtype("C");
|
||||||
|
|
||||||
|
/* Add game selection buttons */
|
||||||
|
video::IVideoDriver* driver = Environment->getVideoDriver();
|
||||||
|
for(size_t i=0; i<m_data->games.size(); i++){
|
||||||
|
const SubgameSpec *spec = &m_data->games[i];
|
||||||
|
v2s32 p(8 + i*(48+8), screensize.Y - (48+8));
|
||||||
|
core::rect<s32> rect(0, 0, 48, 48);
|
||||||
|
rect += p;
|
||||||
|
video::ITexture *bgtexture = NULL;
|
||||||
|
if(spec->menuicon_path != "")
|
||||||
|
bgtexture = driver->getTexture(spec->menuicon_path.c_str());
|
||||||
|
gui::IGUIButton *b = Environment->addButton(rect, this,
|
||||||
|
GUI_ID_GAME_BUTTON_FIRST+i, narrow_to_wide(wrap_rows(spec->id, 4)).c_str());
|
||||||
|
if(bgtexture){
|
||||||
|
b->setImage(bgtexture);
|
||||||
|
b->setText(L"");
|
||||||
|
b->setDrawBorder(false);
|
||||||
|
b->setUseAlphaChannel(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if(m_data->selected_tab == TAB_MULTIPLAYER)
|
else if(m_data->selected_tab == TAB_MULTIPLAYER)
|
||||||
{
|
{
|
||||||
@ -920,27 +932,6 @@ void GUIMainMenu::regenerateGui(v2u32 screensize)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add game selection buttons */
|
|
||||||
|
|
||||||
video::IVideoDriver* driver = Environment->getVideoDriver();
|
|
||||||
for(size_t i=0; i<m_data->games.size(); i++){
|
|
||||||
const SubgameSpec *spec = &m_data->games[i];
|
|
||||||
v2s32 p(8 + i*(48+8), screensize.Y - (48+8));
|
|
||||||
core::rect<s32> rect(0, 0, 48, 48);
|
|
||||||
rect += p;
|
|
||||||
video::ITexture *bgtexture = NULL;
|
|
||||||
if(spec->menuicon_path != "")
|
|
||||||
bgtexture = driver->getTexture(spec->menuicon_path.c_str());
|
|
||||||
gui::IGUIButton *b = Environment->addButton(rect, this,
|
|
||||||
GUI_ID_GAME_BUTTON_FIRST+i, narrow_to_wide(wrap_rows(spec->id, 4)).c_str());
|
|
||||||
if(bgtexture){
|
|
||||||
b->setImage(bgtexture);
|
|
||||||
b->setText(L"");
|
|
||||||
b->setDrawBorder(false);
|
|
||||||
b->setUseAlphaChannel(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_is_regenerating = false;
|
m_is_regenerating = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,15 @@ enum {
|
|||||||
SERVERLIST_PUBLIC,
|
SERVERLIST_PUBLIC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TAB_SINGLEPLAYER=0,
|
||||||
|
TAB_MULTIPLAYER,
|
||||||
|
TAB_ADVANCED,
|
||||||
|
TAB_SETTINGS,
|
||||||
|
TAB_CREDITS
|
||||||
|
};
|
||||||
|
|
||||||
struct MainMenuData
|
struct MainMenuData
|
||||||
{
|
{
|
||||||
// These are in the native format of the gui elements
|
// These are in the native format of the gui elements
|
||||||
|
63
src/main.cpp
63
src/main.cpp
@ -663,12 +663,14 @@ private:
|
|||||||
struct MenuTextures
|
struct MenuTextures
|
||||||
{
|
{
|
||||||
std::string current_gameid;
|
std::string current_gameid;
|
||||||
|
bool global_textures;
|
||||||
video::ITexture *background;
|
video::ITexture *background;
|
||||||
video::ITexture *overlay;
|
video::ITexture *overlay;
|
||||||
video::ITexture *header;
|
video::ITexture *header;
|
||||||
video::ITexture *footer;
|
video::ITexture *footer;
|
||||||
|
|
||||||
MenuTextures():
|
MenuTextures():
|
||||||
|
global_textures(false),
|
||||||
background(NULL),
|
background(NULL),
|
||||||
overlay(NULL),
|
overlay(NULL),
|
||||||
header(NULL),
|
header(NULL),
|
||||||
@ -678,28 +680,49 @@ struct MenuTextures
|
|||||||
static video::ITexture* getMenuTexture(const std::string &tname,
|
static video::ITexture* getMenuTexture(const std::string &tname,
|
||||||
video::IVideoDriver* driver, const SubgameSpec *spec)
|
video::IVideoDriver* driver, const SubgameSpec *spec)
|
||||||
{
|
{
|
||||||
std::string path;
|
if(spec){
|
||||||
// eg. minetest_menu_background.png (for texture packs)
|
std::string path;
|
||||||
std::string pack_tname = spec->id + "_menu_" + tname + ".png";
|
// eg. minetest_menu_background.png (for texture packs)
|
||||||
path = getTexturePath(pack_tname);
|
std::string pack_tname = spec->id + "_menu_" + tname + ".png";
|
||||||
if(path != "")
|
path = getTexturePath(pack_tname);
|
||||||
return driver->getTexture(path.c_str());
|
if(path != "")
|
||||||
// eg. games/minetest_game/menu/background.png
|
return driver->getTexture(path.c_str());
|
||||||
path = getImagePath(spec->path + DIR_DELIM + "menu" + DIR_DELIM + tname + ".png");
|
// eg. games/minetest_game/menu/background.png
|
||||||
if(path != "")
|
path = getImagePath(spec->path + DIR_DELIM + "menu" + DIR_DELIM + tname + ".png");
|
||||||
return driver->getTexture(path.c_str());
|
if(path != "")
|
||||||
|
return driver->getTexture(path.c_str());
|
||||||
|
} else {
|
||||||
|
std::string path;
|
||||||
|
// eg. menu_background.png
|
||||||
|
std::string pack_tname = "menu_" + tname + ".png";
|
||||||
|
path = getTexturePath(pack_tname);
|
||||||
|
if(path != "")
|
||||||
|
return driver->getTexture(path.c_str());
|
||||||
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void update(video::IVideoDriver* driver, const SubgameSpec *spec)
|
void update(video::IVideoDriver* driver, const SubgameSpec *spec, int tab)
|
||||||
{
|
{
|
||||||
if(spec->id == current_gameid)
|
if(tab == TAB_SINGLEPLAYER){
|
||||||
return;
|
if(spec->id == current_gameid)
|
||||||
current_gameid = spec->id;
|
return;
|
||||||
background = getMenuTexture("background", driver, spec);
|
current_gameid = spec->id;
|
||||||
overlay = getMenuTexture("overlay", driver, spec);
|
global_textures = false;
|
||||||
header = getMenuTexture("header", driver, spec);
|
background = getMenuTexture("background", driver, spec);
|
||||||
footer = getMenuTexture("footer", driver, spec);
|
overlay = getMenuTexture("overlay", driver, spec);
|
||||||
|
header = getMenuTexture("header", driver, spec);
|
||||||
|
footer = getMenuTexture("footer", driver, spec);
|
||||||
|
} else {
|
||||||
|
if(global_textures)
|
||||||
|
return;
|
||||||
|
current_gameid = "";
|
||||||
|
global_textures = true;
|
||||||
|
background = getMenuTexture("background", driver, NULL);
|
||||||
|
overlay = getMenuTexture("overlay", driver, NULL);
|
||||||
|
header = getMenuTexture("header", driver, NULL);
|
||||||
|
footer = getMenuTexture("footer", driver, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1778,7 +1801,7 @@ int main(int argc, char *argv[])
|
|||||||
const SubgameSpec *menugame = getMenuGame(menudata);
|
const SubgameSpec *menugame = getMenuGame(menudata);
|
||||||
|
|
||||||
MenuTextures menutextures;
|
MenuTextures menutextures;
|
||||||
menutextures.update(driver, menugame);
|
menutextures.update(driver, menugame, menudata.selected_tab);
|
||||||
|
|
||||||
if(skip_main_menu == false)
|
if(skip_main_menu == false)
|
||||||
{
|
{
|
||||||
@ -1839,7 +1862,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// Game can be selected in the menu
|
// Game can be selected in the menu
|
||||||
menugame = getMenuGame(menudata);
|
menugame = getMenuGame(menudata);
|
||||||
menutextures.update(driver, menugame);
|
menutextures.update(driver, menugame, menu->getTab());
|
||||||
// Clouds for the main menu
|
// Clouds for the main menu
|
||||||
bool cloud_menu_background = g_settings->getBool("menu_clouds");
|
bool cloud_menu_background = g_settings->getBool("menu_clouds");
|
||||||
if(menugame){
|
if(menugame){
|
||||||
|
Loading…
Reference in New Issue
Block a user