]> git.lizzy.rs Git - minetest.git/blobdiff - src/main.cpp
added dedicated server build without irrlicht
[minetest.git] / src / main.cpp
index 5d1be0184c174670e3edff4c02b15ffa6178a3e6..b747da66aa9cdee6174211337cf4b79651bb0a6f 100644 (file)
@@ -176,14 +176,13 @@ TODO: Node cracking animation when digging
       - TODO: A way to generate new textures by combining textures\r
          - TODO: Mesh update to fetch cracked faces from the former\r
 \r
+TODO: Add server unused sector deletion settings to settings\r
+\r
+TODO: TOSERVER_LEAVE\r
+\r
 Doing now:\r
 ======================================================================\r
 \r
-TODO: Add a second lighting value to the MS nibble of param of\r
-      air to tell how bright the air node is when there is no sunlight.\r
-         When day changes to night, these two values can be interpolated.\r
-         - The biggest job is to add support to the lighting routines\r
-\r
 ======================================================================\r
 \r
 */\r
@@ -315,8 +314,7 @@ void set_default_settings()
        g_settings.setDefault("name", "");\r
        g_settings.setDefault("random_input", "false");\r
        g_settings.setDefault("client_delete_unused_sectors_timeout", "1200");\r
-       g_settings.setDefault("max_block_send_distance", "8");\r
-       g_settings.setDefault("max_block_generate_distance", "6");\r
+       g_settings.setDefault("enable_fog", "true");\r
 \r
        // Server stuff\r
        g_settings.setDefault("creative_mode", "false");\r
@@ -332,6 +330,8 @@ void set_default_settings()
        g_settings.setDefault("max_simultaneous_block_sends_server_total", "4");\r
        g_settings.setDefault("disable_water_climb", "true");\r
        g_settings.setDefault("endless_water", "true");\r
+       g_settings.setDefault("max_block_send_distance", "5");\r
+       g_settings.setDefault("max_block_generate_distance", "4");\r
 }\r
 \r
 /*\r
@@ -860,7 +860,8 @@ void updateViewingRange(f32 frametime, Client *client)
        \r
        // Initialize to the target value\r
        static float frametime_avg = 1.0/wanted_fps;\r
-       frametime_avg = frametime_avg * 0.9 + frametime * 0.1;\r
+       //frametime_avg = frametime_avg * 0.9 + frametime * 0.1;\r
+       frametime_avg = frametime_avg * 0.7 + frametime * 0.3;\r
 \r
        static f32 counter = 0;\r
        if(counter > 0){\r
@@ -878,6 +879,11 @@ void updateViewingRange(f32 frametime, Client *client)
 \r
        float fraction = sqrt(frametime_avg / frametime_wanted);\r
 \r
+       /*float fraction = sqrt(frametime_avg / frametime_wanted) / 2.0\r
+                       + frametime_avg / frametime_wanted / 2.0;*/\r
+       \r
+       //float fraction = frametime_avg / frametime_wanted;\r
+\r
        static bool fraction_is_good = false;\r
        \r
        float fraction_good_threshold = 0.1;\r
@@ -1048,9 +1054,9 @@ int main(int argc, char *argv[])
        \r
        /*\r
                Parse command line\r
-               TODO\r
        */\r
        \r
+       // List all allowed options\r
        core::map<std::string, ValueSpec> allowed_options;\r
        allowed_options.insert("help", ValueSpec(VALUETYPE_FLAG));\r
        allowed_options.insert("server", ValueSpec(VALUETYPE_FLAG,\r
@@ -1058,6 +1064,10 @@ int main(int argc, char *argv[])
        allowed_options.insert("config", ValueSpec(VALUETYPE_STRING,\r
                        "Load configuration from specified file"));\r
        allowed_options.insert("port", ValueSpec(VALUETYPE_STRING));\r
+       allowed_options.insert("address", ValueSpec(VALUETYPE_STRING));\r
+       allowed_options.insert("random-input", ValueSpec(VALUETYPE_FLAG));\r
+       allowed_options.insert("disable-unittests", ValueSpec(VALUETYPE_FLAG));\r
+       allowed_options.insert("enable-unittests", ValueSpec(VALUETYPE_FLAG));\r
 \r
        Settings cmd_args;\r
        \r
@@ -1116,14 +1126,6 @@ int main(int argc, char *argv[])
        // Initialize timestamp mutex\r
        g_timestamp_mutex.Init();\r
 \r
-       /*\r
-               Run unit tests\r
-       */\r
-       if(ENABLE_TESTS)\r
-       {\r
-               run_tests();\r
-       }\r
-       \r
        /*\r
                Initialization\r
        */\r
@@ -1168,6 +1170,18 @@ int main(int argc, char *argv[])
        // Initialize random seed\r
        srand(time(0));\r
 \r
+       /*\r
+               Run unit tests\r
+       */\r
+       if((ENABLE_TESTS && cmd_args.getFlag("disable-unittests") == false)\r
+                       || cmd_args.getFlag("enable-unittests") == true)\r
+       {\r
+               run_tests();\r
+       }\r
+       \r
+       /*\r
+               Global range mutex\r
+       */\r
        g_range_mutex.Init();\r
        assert(g_range_mutex.IsInitialized());\r
 \r
@@ -1263,14 +1277,18 @@ int main(int argc, char *argv[])
        bool hosting = false;\r
        char connect_name[100] = "";\r
 \r
-       std::cout<<"Address to connect to [empty = host a game]: ";\r
-       if(g_settings.get("address") != "" && is_yes(g_settings.get("host_game")) == false)\r
+       if(cmd_args.exists("address"))\r
+       {\r
+               snprintf(connect_name, 100, "%s", cmd_args.get("address").c_str());\r
+       }\r
+       else if(g_settings.get("address") != "" && is_yes(g_settings.get("host_game")) == false)\r
        {\r
                std::cout<<g_settings.get("address")<<std::endl;\r
                snprintf(connect_name, 100, "%s", g_settings.get("address").c_str());\r
        }\r
        else\r
        {\r
+               std::cout<<"Address to connect to [empty = host a game]: ";\r
                std::cin.getline(connect_name, 100);\r
        }\r
        \r
@@ -1280,9 +1298,9 @@ int main(int argc, char *argv[])
        }\r
        \r
        if(hosting)\r
-               std::cout<<"-> hosting"<<std::endl;\r
+               std::cout<<"> Hosting game"<<std::endl;\r
        else\r
-               std::cout<<"-> "<<connect_name<<std::endl;\r
+               std::cout<<"> Connecting to "<<connect_name<<std::endl;\r
        \r
        char playername[PLAYERNAME_SIZE] = "";\r
        if(g_settings.get("name") != "")\r
@@ -1393,7 +1411,9 @@ int main(int argc, char *argv[])
        \r
        device->setResizable(true);\r
 \r
-       if(g_settings.getBool("random_input"))\r
+       bool random_input = g_settings.getBool("random_input")\r
+                       || cmd_args.getFlag("random-input");\r
+       if(random_input)\r
                g_input = new RandomInputHandler();\r
        else\r
                g_input = new RealInputHandler(device, &receiver);\r
@@ -1489,7 +1509,10 @@ int main(int argc, char *argv[])
                Create client\r
        */\r
 \r
-       Client client(device, playername);\r
+       Client client(device, playername,\r
+                       g_range_mutex,\r
+                       g_viewing_range_nodes,\r
+                       g_viewing_range_all);\r
        \r
        Address connect_address(0,0,0,0, port);\r
        try{\r
@@ -1523,14 +1546,14 @@ int main(int argc, char *argv[])
        /*\r
                Create skybox\r
        */\r
-       scene::ISceneNode* skybox;\r
+       /*scene::ISceneNode* skybox;\r
        skybox = smgr->addSkyBoxSceneNode(\r
                driver->getTexture("../data/skybox2.png"),\r
                driver->getTexture("../data/skybox3.png"),\r
                driver->getTexture("../data/skybox1.png"),\r
                driver->getTexture("../data/skybox1.png"),\r
                driver->getTexture("../data/skybox1.png"),\r
-               driver->getTexture("../data/skybox1.png"));\r
+               driver->getTexture("../data/skybox1.png"));*/\r
        \r
        /*\r
                Create the camera node\r
@@ -1553,21 +1576,6 @@ int main(int argc, char *argv[])
        // Just so big a value that everything rendered is visible\r
        camera->setFarValue(100000*BS);\r
 \r
-       /*//f32 range = BS*HEIGHTMAP_RANGE_NODES*0.9;\r
-       f32 range = BS*HEIGHTMAP_RANGE_NODES*0.9;\r
-       \r
-       camera->setFarValue(range);\r
-       \r
-       driver->setFog(\r
-               skycolor,\r
-               video::EFT_FOG_LINEAR,\r
-               range*0.8,\r
-               range,\r
-               0.01,\r
-               false,\r
-               false\r
-               );*/\r
-       \r
        f32 camera_yaw = 0; // "right/left"\r
        f32 camera_pitch = 0; // "up/down"\r
 \r
@@ -1888,9 +1896,11 @@ int main(int argc, char *argv[])
                        Mouse and camera control\r
                */\r
                \r
-               if(device->isWindowActive() && g_game_focused && !pauseMenu.isVisible())\r
+               if((device->isWindowActive() && g_game_focused && !pauseMenu.isVisible())\r
+                               || random_input)\r
                {\r
-                       device->getCursorControl()->setVisible(false);\r
+                       if(!random_input)\r
+                               device->getCursorControl()->setVisible(false);\r
 \r
                        if(first_loop_after_window_activation){\r
                                //std::cout<<"window active, first loop"<<std::endl;\r
@@ -1981,7 +1991,7 @@ int main(int argc, char *argv[])
                                if(selected_object->getTypeId() == MAPBLOCKOBJECT_TYPE_SIGN)\r
                                {\r
                                        dstream<<"Sign object right-clicked"<<std::endl;\r
-\r
+                                       \r
                                        unFocusGame();\r
 \r
                                        input_guitext = guienv->addStaticText(L"",\r
@@ -1992,8 +2002,17 @@ int main(int argc, char *argv[])
 \r
                                        input_guitext->setDrawBackground(true);\r
 \r
-                                       g_text_buffer = L"";\r
-                                       g_text_buffer_accepted = false;\r
+                                       if(random_input)\r
+                                       {\r
+                                               g_text_buffer = L"ASD LOL 8)";\r
+                                               g_text_buffer_accepted = true;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               g_text_buffer = L"";\r
+                                               g_text_buffer_accepted = false;\r
+                                       }\r
+\r
                                        textbuf_dest = new TextDestSign(\r
                                                        selected_object->getBlock()->getPos(),\r
                                                        selected_object->getId(),\r
@@ -2227,20 +2246,54 @@ int main(int argc, char *argv[])
                */\r
 \r
                camera->setAspectRatio((f32)screensize.X / (f32)screensize.Y);\r
+               \r
+               // Background color is choosen based on whether the player is\r
+               // much beyond the initial ground level\r
+               /*video::SColor bgcolor;\r
+               v3s16 p0 = Map::floatToInt(player_position);\r
+               // Does this make short random delays?\r
+               // NOTE: no need for this, sky doesn't show underground with\r
+               // enough range\r
+               bool is_underground = client.isNodeUnderground(p0);\r
+               //bool is_underground = false;\r
+               if(is_underground == false)\r
+                       bgcolor = video::SColor(255,90,140,200);\r
+               else\r
+                       bgcolor = video::SColor(255,0,0,0);*/\r
+                       \r
+               //video::SColor bgcolor = video::SColor(255,90,140,200);\r
+               //video::SColor bgcolor = skycolor;\r
+               \r
+               //s32 daynight_i = client.getDayNightIndex();\r
+               //video::SColor bgcolor = skycolor[daynight_i];\r
 \r
-               /*f32 range = g_viewing_range_nodes * BS;\r
-               if(g_viewing_range_all)\r
-                       range = 100000*BS;\r
+               u32 daynight_ratio = client.getDayNightRatio();\r
+               video::SColor bgcolor = video::SColor(\r
+                               255,\r
+                               skycolor.getRed() * daynight_ratio / 1000,\r
+                               skycolor.getGreen() * daynight_ratio / 1000,\r
+                               skycolor.getBlue() * daynight_ratio / 1000);\r
 \r
-               driver->setFog(\r
-                       skycolor,\r
-                       video::EFT_FOG_LINEAR,\r
-                       range*0.6,\r
-                       range,\r
-                       0.01,\r
-                       false, // pixel fog\r
-                       false // range fog\r
-                       );*/\r
+               /*\r
+                       Fog\r
+               */\r
+               \r
+               if(g_settings.getBool("enable_fog") == true)\r
+               {\r
+                       f32 range = g_viewing_range_nodes * BS;\r
+                       if(g_viewing_range_all)\r
+                               range = 100000*BS;\r
+\r
+                       driver->setFog(\r
+                               bgcolor,\r
+                               video::EFT_FOG_LINEAR,\r
+                               range*0.6,\r
+                               range,\r
+                               0.01,\r
+                               false, // pixel fog\r
+                               false // range fog\r
+                               );\r
+               }\r
 \r
 \r
                /*\r
@@ -2359,29 +2412,11 @@ int main(int argc, char *argv[])
 \r
                TimeTaker drawtimer("Drawing", device);\r
 \r
-               /*\r
-                       Background color is choosen based on whether the player is\r
-                       much beyond the initial ground level\r
-               */\r
-               /*video::SColor bgcolor;\r
-               v3s16 p0 = Map::floatToInt(player_position);\r
-               // Does this make short random delays?\r
-               // NOTE: no need for this, sky doesn't show underground with\r
-               // enough range\r
-               bool is_underground = client.isNodeUnderground(p0);\r
-               //bool is_underground = false;\r
-               if(is_underground == false)\r
-                       bgcolor = video::SColor(255,90,140,200);\r
-               else\r
-                       bgcolor = video::SColor(255,0,0,0);*/\r
-                       \r
-               //video::SColor bgcolor = video::SColor(255,90,140,200);\r
-               video::SColor bgcolor = skycolor;\r
                \r
                {\r
                TimeTaker timer("beginScene", device);\r
-               //driver->beginScene(true, true, bgcolor);\r
-               driver->beginScene(false, true, bgcolor);\r
+               driver->beginScene(true, true, bgcolor);\r
+               //driver->beginScene(false, true, bgcolor);\r
                beginscenetime = timer.stop(true);\r
                }\r
 \r
@@ -2471,6 +2506,8 @@ int main(int argc, char *argv[])
                        device->yield();*/\r
        }\r
 \r
+       delete quick_inventory;\r
+\r
        } // client is deleted at this point\r
        \r
        delete g_input;\r