]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/game.cpp
Minor fixes in translations
[dragonfireclient.git] / src / game.cpp
index b292ad1bfabc3d92318c147ab6b88d496573dbbd..0645a7b809367925074a2ca0e6089d204d3a16ec 100644 (file)
@@ -809,16 +809,35 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
        bool *m_force_fog_off;
        f32 *m_fog_range;
        Client *m_client;
+       bool m_fogEnabled;
 
 public:
+       void onSettingsChange(const std::string &name)
+       {
+               if (name == "enable_fog")
+                       m_fogEnabled = g_settings->getBool("enable_fog");
+       }
+
+       static void SettingsCallback(const std::string name, void *userdata)
+       {
+               reinterpret_cast<GameGlobalShaderConstantSetter*>(userdata)->onSettingsChange(name);
+       }
+
        GameGlobalShaderConstantSetter(Sky *sky, bool *force_fog_off,
                        f32 *fog_range, Client *client) :
                m_sky(sky),
                m_force_fog_off(force_fog_off),
                m_fog_range(fog_range),
                m_client(client)
-       {}
-       ~GameGlobalShaderConstantSetter() {}
+       {
+               g_settings->registerChangedCallback("enable_fog", SettingsCallback, this);
+               m_fogEnabled = g_settings->getBool("enable_fog");
+       }
+
+       ~GameGlobalShaderConstantSetter()
+       {
+               g_settings->deregisterChangedCallback("enable_fog", SettingsCallback, this);
+       }
 
        virtual void onSetConstants(video::IMaterialRendererServices *services,
                        bool is_highlevel)
@@ -840,7 +859,7 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter
                // Fog distance
                float fog_distance = 10000 * BS;
 
-               if (g_settings->getBool("enable_fog") && !*m_force_fog_off)
+               if (m_fogEnabled && !*m_force_fog_off)
                        fog_distance = *m_fog_range;
 
                services->setPixelShaderConstant("fogDistance", &fog_distance, 1);
@@ -1024,11 +1043,7 @@ static inline void create_formspec_menu(GUIFormSpecMenu **cur_formspec,
        }
 }
 
-#ifdef __ANDROID__
 #define SIZE_TAG "size[11,5.5]"
-#else
-#define SIZE_TAG "size[11,5.5,true]"
-#endif
 
 static void show_chat_menu(GUIFormSpecMenu **cur_formspec,
                InventoryManager *invmgr, IGameDef *gamedef,
@@ -1059,7 +1074,7 @@ static void show_deathscreen(GUIFormSpecMenu **cur_formspec,
                std::string(FORMSPEC_VERSION_STRING) +
                SIZE_TAG
                "bgcolor[#320000b4;true]"
-               "label[4.85,1.35;You died.]"
+               "label[4.85,1.35;" + gettext("You died.") + "]"
                "button_exit[4,3;3,0.5;btn_respawn;" + gettext("Respawn") + "]"
                ;
 
@@ -1118,11 +1133,13 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
                os << "button_exit[4," << (ypos++) << ";3,0.5;btn_change_password;"
                   << wide_to_narrow(wstrgettext("Change Password")) << "]";
        }
-
+       
+#ifndef __ANDROID__
        os              << "button_exit[4," << (ypos++) << ";3,0.5;btn_sound;"
                        << wide_to_narrow(wstrgettext("Sound Volume")) << "]";
        os              << "button_exit[4," << (ypos++) << ";3,0.5;btn_key_config;"
                        << wide_to_narrow(wstrgettext("Change Keys"))  << "]";
+#endif
        os              << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_menu;"
                        << wide_to_narrow(wstrgettext("Exit to Menu")) << "]";
        os              << "button_exit[4," << (ypos++) << ";3,0.5;btn_exit_os;"
@@ -1140,7 +1157,7 @@ static void show_pause_menu(GUIFormSpecMenu **cur_formspec,
        LocalFormspecHandler *txt_dst = new LocalFormspecHandler("MT_PAUSE_MENU");
 
        create_formspec_menu(cur_formspec, invmgr, gamedef, tsrc, device,  fs_src, txt_dst, NULL);
-
+       (*cur_formspec)->setFocus(L"btn_continue");
        (*cur_formspec)->doPause = true;
 }
 
@@ -1522,7 +1539,7 @@ class Game
        // Misc
        void limitFps(FpsControl *fps_timings, f32 *dtime);
 
-       void showOverlayMessage(const char *msg, float dtime, int percent,
+       void showOverlayMessage(const wchar_t *msg, float dtime, int percent,
                        bool draw_clouds = true);
 
 private:
@@ -1789,7 +1806,7 @@ void Game::run()
 
 void Game::shutdown()
 {
-       showOverlayMessage("Shutting down...", 0, 0, false);
+       showOverlayMessage(wgettext("Shutting down..."), 0, 0, false);
 
        if (clouds)
                clouds->drop();
@@ -1838,7 +1855,7 @@ bool Game::init(
                u16 port,
                const SubgameSpec &gamespec)
 {
-       showOverlayMessage("Loading...", 0, 0);
+       showOverlayMessage(wgettext("Loading..."), 0, 0);
 
        texture_src = createTextureSource(device);
        shader_src = createShaderSource(device);
@@ -1895,7 +1912,7 @@ bool Game::initSound()
 bool Game::createSingleplayerServer(const std::string map_dir,
                const SubgameSpec &gamespec, u16 port, std::string *address)
 {
-       showOverlayMessage("Creating server...", 0, 5);
+       showOverlayMessage(wgettext("Creating server..."), 0, 5);
 
        std::string bind_str = g_settings->get("bind_address");
        Address bind_addr(0, 0, 0, 0, port);
@@ -1906,7 +1923,6 @@ bool Game::createSingleplayerServer(const std::string map_dir,
 
        try {
                bind_addr.Resolve(bind_str.c_str());
-               *address = bind_str;
        } catch (ResolveError &e) {
                infostream << "Resolving bind address \"" << bind_str
                           << "\" failed: " << e.what()
@@ -1933,7 +1949,7 @@ bool Game::createClient(const std::string &playername,
                const std::string &password, std::string *address, u16 port,
                std::wstring *error_message)
 {
-       showOverlayMessage("Creating client...", 0, 10);
+       showOverlayMessage(wgettext("Creating client..."), 0, 10);
 
        draw_control = new MapDrawControl;
        if (!draw_control)
@@ -1986,7 +2002,7 @@ bool Game::createClient(const std::string &playername,
 
        /* Skybox
         */
-       sky = new Sky(smgr->getRootSceneNode(), smgr, -1);
+       sky = new Sky(smgr->getRootSceneNode(), smgr, -1, texture_src);
        skybox = NULL;  // This is used/set later on in the main run loop
 
        local_inventory = new Inventory(itemdef_manager);
@@ -2102,7 +2118,11 @@ bool Game::connectToServer(const std::string &playername,
                const std::string &password, std::string *address, u16 port,
                bool *connect_ok, bool *aborted)
 {
-       showOverlayMessage("Resolving address...", 0, 15);
+       *connect_ok = false;    // Let's not be overly optimistic
+       *aborted = false;
+       bool local_server_mode = false;
+
+       showOverlayMessage(wgettext("Resolving address..."), 0, 15);
 
        Address connect_address(0, 0, 0, 0, port);
 
@@ -2118,6 +2138,7 @@ bool Game::connectToServer(const std::string &playername,
                        } else {
                                connect_address.setAddress(127, 0, 0, 1);
                        }
+                       local_server_mode = true;
                }
        } catch (ResolveError &e) {
                *error_message = L"Couldn't resolve address: " + narrow_to_wide(e.what());
@@ -2134,7 +2155,7 @@ bool Game::connectToServer(const std::string &playername,
        }
 
        client = new Client(device,
-                       playername.c_str(), password, simple_singleplayer_mode,
+                       playername.c_str(), password,
                        *draw_control, texture_src, shader_src,
                        itemdef_manager, nodedef_manager, sound, eventmgr,
                        connect_address.isIPv6());
@@ -2144,13 +2165,12 @@ bool Game::connectToServer(const std::string &playername,
 
        gamedef = client;       // Client acts as our GameDef
 
-
        infostream << "Connecting to server at ";
        connect_address.print(&infostream);
        infostream << std::endl;
 
-       client->connect(connect_address);
-
+       client->connect(connect_address, *address,
+               simple_singleplayer_mode || local_server_mode);
 
        /*
                Wait for server to accept connection
@@ -2193,7 +2213,7 @@ bool Game::connectToServer(const std::string &playername,
                        }
 
                        // Update status
-                       showOverlayMessage("Connecting to server...", dtime, 20);
+                       showOverlayMessage(wgettext("Connecting to server..."), dtime, 20);
                }
        } catch (con::PeerNotFoundException &e) {
                // TODO: Should something be done here? At least an info/error
@@ -2251,12 +2271,12 @@ bool Game::getServerContent(bool *aborted)
                int progress = 25;
 
                if (!client->itemdefReceived()) {
-                       wchar_t *text = wgettext("Item definitions...");
+                       const wchar_t *text = wgettext("Item definitions...");
                        progress = 25;
                        draw_load_screen(text, device, guienv, dtime, progress);
                        delete[] text;
                } else if (!client->nodedefReceived()) {
-                       wchar_t *text = wgettext("Node definitions...");
+                       const wchar_t *text = wgettext("Node definitions...");
                        progress = 30;
                        draw_load_screen(text, device, guienv, dtime, progress);
                        delete[] text;
@@ -2279,7 +2299,7 @@ bool Game::getServerContent(bool *aborted)
                        }
 
                        progress = 30 + client->mediaReceiveProgress() * 35 + 0.5;
-                       draw_load_screen(narrow_to_wide(message.str().c_str()), device,
+                       draw_load_screen(narrow_to_wide(message.str()), device,
                                        guienv, dtime, progress);
                }
        }
@@ -2649,6 +2669,15 @@ void Game::dropSelectedItem()
 
 void Game::openInventory()
 {
+       /*
+        * Don't permit to open inventory is CAO or player doesn't exists.
+        * This prevent showing an empty inventory at player load
+        */
+
+       LocalPlayer *player = client->getEnv().getLocalPlayer();
+       if (player == NULL || player->getCAO() == NULL)
+               return;
+
        infostream << "the_game: " << "Launching inventory" << std::endl;
 
        PlayerInventoryFormSource *fs_src = new PlayerInventoryFormSource(client);
@@ -3198,10 +3227,13 @@ void Game::updateCamera(VolatileRunFlags *flags, u32 busy_time,
        v3s16 old_camera_offset = camera->getOffset();
 
        if (input->wasKeyDown(keycache.key[KeyCache::KEYMAP_ID_CAMERA_MODE])) {
-               camera->toggleCameraMode();
                GenericCAO *playercao = player->getCAO();
 
-               assert(playercao != NULL);
+               // If playercao not loaded, don't change camera
+               if (playercao == NULL)
+                       return;
+
+               camera->toggleCameraMode();
 
                playercao->setVisible(camera->getCameraMode() > CAMERA_MODE_FIRST);
        }
@@ -4091,12 +4123,11 @@ inline void Game::limitFps(FpsControl *fps_timings, f32 *dtime)
 }
 
 
-void Game::showOverlayMessage(const char *msg, float dtime,
+void Game::showOverlayMessage(const wchar_t *msg, float dtime,
                int percent, bool draw_clouds)
 {
-       wchar_t *text = wgettext(msg);
-       draw_load_screen(text, device, guienv, dtime, percent, draw_clouds);
-       delete[] text;
+       draw_load_screen(msg, device, guienv, dtime, percent, draw_clouds);
+       delete[] msg;
 }
 
 
@@ -4176,6 +4207,7 @@ void the_game(bool *kill,
                errorstream << "ServerError: " << e.what() << std::endl;
        } catch (ModError &e) {
                errorstream << "ModError: " << e.what() << std::endl;
-               error_message = narrow_to_wide(e.what()) + wgettext("\nCheck debug.txt for details.");
+               error_message = narrow_to_wide(e.what()) + wstrgettext("\nCheck debug.txt for details.");
        }
 }
+