]> git.lizzy.rs Git - minetest.git/blobdiff - src/client/clientlauncher.cpp
Built-in formspecs: Force version 1
[minetest.git] / src / client / clientlauncher.cpp
index 4fc8fb3ee908c51d028b1e111b6716a24ee2e972..2a9d6097f60760aac7405048644a0698bdc3a81d 100644 (file)
@@ -17,21 +17,30 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
-#include "mainmenumanager.h"
+#include "gui/mainmenumanager.h"
 #include "clouds.h"
 #include "server.h"
 #include "filesys.h"
-#include "guiMainMenu.h"
+#include "gui/guiMainMenu.h"
 #include "game.h"
+#include "player.h"
 #include "chat.h"
 #include "gettext.h"
 #include "profiler.h"
 #include "serverlist.h"
-#include "guiEngine.h"
+#include "gui/guiEngine.h"
 #include "fontengine.h"
 #include "clientlauncher.h"
 #include "version.h"
 #include "renderingengine.h"
+#include "network/networkexceptions.h"
+
+#if USE_SOUND
+       #include "sound_openal.h"
+#endif
+#ifdef __ANDROID__
+       #include "porting.h"
+#endif
 
 /* mainmenumanager.h
  */
@@ -58,6 +67,10 @@ ClientLauncher::~ClientLauncher()
        delete g_gamecallback;
 
        delete RenderingEngine::get_instance();
+
+#if USE_SOUND
+       g_sound_manager_singleton.reset();
+#endif
 }
 
 
@@ -69,6 +82,11 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
        if (list_video_modes)
                return RenderingEngine::print_video_modes();
 
+#if USE_SOUND
+       if (g_settings->getBool("enable_sound"))
+               g_sound_manager_singleton = createSoundManagerSingleton();
+#endif
+
        if (!init_engine()) {
                errorstream << "Could not initialize game engine." << std::endl;
                return false;
@@ -81,15 +99,13 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
                return true;
        }
 
-       video::IVideoDriver *video_driver = RenderingEngine::get_video_driver();
-       if (video_driver == NULL) {
+       if (RenderingEngine::get_video_driver() == NULL) {
                errorstream << "Could not initialize video driver." << std::endl;
                return false;
        }
 
-       RenderingEngine::setXorgClassHint(video_driver->getExposedVideoData(), PROJECT_NAME_C);
-       RenderingEngine::get_instance()->setWindowIcon();
-
+       RenderingEngine::get_instance()->setupTopLevelWindow(PROJECT_NAME_C);
+       
        /*
                This changes the minimum allowed number of vertices in a VBO.
                Default is 500.
@@ -114,7 +130,30 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
        skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0));
        skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50));
        skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255));
-
+#ifdef __ANDROID__
+       float density = porting::getDisplayDensity();
+       skin->setSize(gui::EGDS_CHECK_BOX_WIDTH, (s32)(17.0f * density));
+       skin->setSize(gui::EGDS_SCROLLBAR_SIZE, (s32)(14.0f * density));
+       skin->setSize(gui::EGDS_WINDOW_BUTTON_WIDTH, (s32)(15.0f * density));
+       if (density > 1.5f) {
+               std::string sprite_path = porting::path_user + "/textures/base/pack/";
+               if (density > 3.5f)
+                       sprite_path.append("checkbox_64.png");
+               else if (density > 2.0f)
+                       sprite_path.append("checkbox_32.png");
+               else
+                       sprite_path.append("checkbox_16.png");
+               // Texture dimensions should be a power of 2
+               gui::IGUISpriteBank *sprites = skin->getSpriteBank();
+               video::IVideoDriver *driver = RenderingEngine::get_video_driver();
+               video::ITexture *sprite_texture = driver->getTexture(sprite_path.c_str());
+               if (sprite_texture) {
+                       s32 sprite_id = sprites->addTextureAsSprite(sprite_texture);
+                       if (sprite_id != -1)
+                               skin->setIcon(gui::EGDI_CHECK_BOX_CHECKED, sprite_id);
+               }
+       }
+#endif
        g_fontengine = new FontEngine(g_settings, guienv);
        FATAL_ERROR_IF(g_fontengine == NULL, "Font engine creation failed.");
 
@@ -128,11 +167,11 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
        if (!g_menucloudsmgr)
                g_menucloudsmgr = RenderingEngine::get_scene_manager()->createNewSceneManager();
        if (!g_menuclouds)
-               g_menuclouds = new Clouds(g_menucloudsmgr, -1, rand(), 100);
-       g_menuclouds->update(v2f(0, 0), video::SColor(255, 200, 200, 255));
+               g_menuclouds = new Clouds(g_menucloudsmgr, -1, rand());
+       g_menuclouds->setHeight(100.0f);
+       g_menuclouds->update(v3f(0, 0, 0), video::SColor(255, 240, 240, 255));
        scene::ICameraSceneNode* camera;
-       camera = g_menucloudsmgr->addCameraSceneNode(0,
-                               v3f(0, 0, 0), v3f(0, 60, 100));
+       camera = g_menucloudsmgr->addCameraSceneNode(NULL, v3f(0, 0, 0), v3f(0, 60, 100));
        camera->setFarValue(10000);
 
        /*
@@ -191,13 +230,13 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
                        if (!game_has_run) {
                                if (skip_main_menu)
                                        break;
-                               else
-                                       continue;
+
+                               continue;
                        }
 
                        // Break out of menu-game loop to shut down cleanly
                        if (!RenderingEngine::get_raw_device()->run() || *kill) {
-                               if (g_settings_path != "")
+                               if (!g_settings_path.empty())
                                        g_settings->updateConfigFile(g_settings_path.c_str());
                                break;
                        }
@@ -213,7 +252,7 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args)
                                        video::ETCF_CREATE_MIP_MAPS, g_settings->getBool("mip_map"));
 
 #ifdef HAVE_TOUCHSCREENGUI
-                       receiver->m_touchscreengui = new TouchScreenGUI(device, receiver);
+                       receiver->m_touchscreengui = new TouchScreenGUI(RenderingEngine::get_raw_device(), receiver);
                        g_touchscreengui = receiver->m_touchscreengui;
 #endif
 
@@ -284,7 +323,7 @@ void ClientLauncher::init_args(GameParams &game_params, const Settings &cmd_args
         * supplied on the command line
         */
        address = g_settings->get("address");
-       if (game_params.world_path != "" && !skip_main_menu)
+       if (!game_params.world_path.empty() && !skip_main_menu)
                address = "";
        else if (cmd_args.exists("address"))
                address = cmd_args.get("address");
@@ -353,12 +392,26 @@ bool ClientLauncher::launch_game(std::string &error_message,
        if (cmd_args.exists("password"))
                menudata.password = cmd_args.get("password");
 
+
+       if (cmd_args.exists("password-file")) {
+               std::ifstream passfile(cmd_args.get("password-file"));
+               if (passfile.good()) {
+                       getline(passfile, menudata.password);
+               } else {
+                       error_message = gettext("Provided password file "
+                                       "failed to open: ")
+                                       + cmd_args.get("password-file");
+                       errorstream << error_message << std::endl;
+                       return false;
+               }
+       }
+
        // If a world was commanded, append and select it
-       if (game_params.world_path != "") {
+       if (!game_params.world_path.empty()) {
                worldspec.gameid = getWorldGameId(game_params.world_path, true);
                worldspec.name = _("[--world parameter]");
 
-               if (worldspec.gameid == "") {   // Create new
+               if (worldspec.gameid.empty()) { // Create new
                        worldspec.gameid = g_settings->get("default_game");
                        worldspec.name += " [new]";
                }
@@ -399,8 +452,9 @@ bool ClientLauncher::launch_game(std::string &error_message,
                return false;
        }
 
-       if (menudata.name == "" && !simple_singleplayer_mode) {
+       if (menudata.name.empty() && !simple_singleplayer_mode) {
                error_message = gettext("Please choose a name!");
+               errorstream << error_message << std::endl;
                return false;
        }
 
@@ -414,14 +468,14 @@ bool ClientLauncher::launch_game(std::string &error_message,
 
        // If using simple singleplayer mode, override
        if (simple_singleplayer_mode) {
-               assert(skip_main_menu == false);
+               assert(!skip_main_menu);
                current_playername = "singleplayer";
                current_password = "";
                current_address = "";
                current_port = myrand_range(49152, 65535);
        } else {
                g_settings->set("name", playername);
-               if (address != "") {
+               if (!address.empty()) {
                        ServerListSpec server;
                        server["name"] = menudata.servername;
                        server["address"] = menudata.address;
@@ -434,8 +488,8 @@ bool ClientLauncher::launch_game(std::string &error_message,
        infostream << "Selected world: " << worldspec.name
                   << " [" << worldspec.path << "]" << std::endl;
 
-       if (current_address == "") { // If local game
-               if (worldspec.path == "") {
+       if (current_address.empty()) { // If local game
+               if (worldspec.path.empty()) {
                        error_message = gettext("No world selected and no address "
                                        "provided. Nothing to do.");
                        errorstream << error_message << std::endl;
@@ -486,7 +540,7 @@ void ClientLauncher::main_menu(MainMenuData *menudata)
        video::IVideoDriver *driver = RenderingEngine::get_video_driver();
 
        infostream << "Waiting for other menus" << std::endl;
-       while (RenderingEngine::get_raw_device()->run() && *kill == false) {
+       while (RenderingEngine::get_raw_device()->run() && !*kill) {
                if (!isMenuActive())
                        break;
                driver->beginScene(true, true, video::SColor(255, 128, 128, 128));