Only use game filter in singleplayer tab; use menu_{background, overlay, header, footer}.png for other tabs

This commit is contained in:
PilzAdam 2013-05-11 16:08:01 +02:00
parent 2c09e8a84c
commit efc9329033
3 changed files with 74 additions and 51 deletions

View File

@ -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;
} }

View File

@ -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

View File

@ -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){