]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/main.cpp
CMake stuff works now on linux and windows... and should be possible to make to work...
[dragonfireclient.git] / src / main.cpp
index e3fb9b87736aa17a636b89646e7cc1da4d1d09a2..a0da103c94aa06974495ea867aa1b80f99b188bb 100644 (file)
@@ -177,6 +177,8 @@ TODO: When server sees that client is removing an inexistent block or
 \r
 TODO: When player dies, throw items on map\r
 \r
+TODO: Use porting::path_userdata for configuration file\r
+\r
 TODO: Optimize day/night mesh updating somehow\r
       - create copies of all textures for all lighting values and only\r
            change texture for material?\r
@@ -187,12 +189,11 @@ TODO: Optimize day/night mesh updating somehow
 TODO: Map generator version 2\r
        - Create surface areas based on central points; a given point's\r
          area type is given by the nearest central point\r
+         - Separate points for heightmap, caves, plants and minerals?\r
+         - Flat land, mountains, forest, jungle\r
     - Cliffs, arcs\r
 \r
-TODO: A Constant for the "../data/" path (differs on Mac and on proper\r
-      linux installations)\r
-\r
-TODO: Add defined(__APPLE__) to filesys.cpp\r
+TODO: Add gui option to remove map\r
 \r
 Doing now:\r
 ======================================================================\r
@@ -211,7 +212,7 @@ Doing now:
 */\r
 #define FIELD_OF_VIEW_TEST 0\r
 \r
-#ifdef UNITTEST_DISABLE\r
+#ifdef NDEBUG\r
        #ifdef _WIN32\r
                #pragma message ("Disabling unit tests")\r
        #else\r
@@ -257,6 +258,8 @@ Doing now:
 #include "guiTextInputMenu.h"\r
 #include "materials.h"\r
 #include "guiMessageMenu.h"\r
+#include "filesys.h"\r
+#include "config.h"\r
 \r
 IrrlichtWrapper *g_irrlicht;\r
 \r
@@ -1099,11 +1102,21 @@ int main(int argc, char *argv[])
        debug_stacks_init();\r
 \r
        DSTACK(__FUNCTION_NAME);\r
-       \r
+\r
+       porting::initializePaths();\r
+       // Create user data directory\r
+       fs::CreateDir(porting::path_userdata);\r
+\r
        initializeMaterialProperties();\r
 \r
        BEGIN_DEBUG_EXCEPTION_HANDLER\r
 \r
+       // Print startup message\r
+       dstream<<DTIME<<"minetest-c55"\r
+                       " with SER_FMT_VER_HIGHEST="<<(int)SER_FMT_VER_HIGHEST\r
+                       <<", "<<BUILD_INFO\r
+                       <<std::endl;\r
+       \r
        try\r
        {\r
        \r
@@ -1123,6 +1136,7 @@ int main(int argc, char *argv[])
        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
+       allowed_options.insert("map-dir", ValueSpec(VALUETYPE_STRING));\r
 \r
        Settings cmd_args;\r
        \r
@@ -1163,12 +1177,6 @@ int main(int argc, char *argv[])
        // Initialize default settings\r
        set_default_settings();\r
        \r
-       // Print startup message\r
-       dstream<<DTIME<<"minetest-c55"\r
-                       " with SER_FMT_VER_HIGHEST="<<(int)SER_FMT_VER_HIGHEST\r
-                       <<", ENABLE_TESTS="<<ENABLE_TESTS\r
-                       <<std::endl;\r
-       \r
        // Set locale. This is for forcing '.' as the decimal point.\r
        std::locale::global(std::locale("C"));\r
        // This enables printing all characters in bitmap font\r
@@ -1202,15 +1210,15 @@ int main(int argc, char *argv[])
        }\r
        else\r
        {\r
-               const char *filenames[2] =\r
-               {\r
-                       "../minetest.conf",\r
-                       "../../minetest.conf"\r
-               };\r
+               core::array<std::string> filenames;\r
+               filenames.push_back(porting::path_userdata + "/minetest.conf");\r
+#ifdef RUN_IN_PLACE\r
+               filenames.push_back(porting::path_userdata + "/../minetest.conf");\r
+#endif\r
 \r
-               for(u32 i=0; i<2; i++)\r
+               for(u32 i=0; i<filenames.size(); i++)\r
                {\r
-                       bool r = g_settings.readConfigFile(filenames[i]);\r
+                       bool r = g_settings.readConfigFile(filenames[i].c_str());\r
                        if(r)\r
                        {\r
                                configpath = filenames[i];\r
@@ -1274,6 +1282,13 @@ int main(int argc, char *argv[])
                std::cout<<"-> "<<port<<std::endl;\r
        }\r
        \r
+       //Map directory\r
+       std::string map_dir = porting::path_userdata+"/map";\r
+       if(cmd_args.exists("map-dir"))\r
+               map_dir = cmd_args.get("map-dir");\r
+       else if(g_settings.exists("map-dir"))\r
+               map_dir = g_settings.get("map-dir");\r
+       \r
        if(cmd_args.getFlag("server"))\r
        {\r
                DSTACK("Dedicated server branch");\r
@@ -1284,7 +1299,7 @@ int main(int argc, char *argv[])
                std::cout<<"========================"<<std::endl;\r
                std::cout<<std::endl;\r
 \r
-               Server server("../map", hm_params, map_params);\r
+               Server server(map_dir, hm_params, map_params);\r
                server.start(port);\r
        \r
                for(;;)\r
@@ -1422,7 +1437,7 @@ int main(int argc, char *argv[])
        \r
        guienv = device->getGUIEnvironment();\r
        gui::IGUISkin* skin = guienv->getSkin();\r
-       gui::IGUIFont* font = guienv->getFont("../data/fontlucida.png");\r
+       gui::IGUIFont* font = guienv->getFont(porting::getDataPath("fontlucida.png").c_str());\r
        if(font)\r
                skin->setFont(font);\r
        \r
@@ -1453,6 +1468,8 @@ int main(int argc, char *argv[])
                Preload some textures\r
        */\r
 \r
+       init_content_inventory_texture_paths();\r
+       init_tile_texture_paths();\r
        tile_materials_preload(g_irrlicht);\r
 \r
        /*\r
@@ -1468,7 +1485,7 @@ int main(int argc, char *argv[])
        */\r
        SharedPtr<Server> server;\r
        if(hosting){\r
-               server = new Server("../map", hm_params, map_params);\r
+               server = new Server(map_dir, hm_params, map_params);\r
                server->start(port);\r
        }\r
        \r
@@ -1514,12 +1531,12 @@ int main(int argc, char *argv[])
        */\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(porting::getDataPath("skybox2.png").c_str()),\r
+               driver->getTexture(porting::getDataPath("skybox3.png").c_str()),\r
+               driver->getTexture(porting::getDataPath("skybox1.png").c_str()),\r
+               driver->getTexture(porting::getDataPath("skybox1.png").c_str()),\r
+               driver->getTexture(porting::getDataPath("skybox1.png").c_str()),\r
+               driver->getTexture(porting::getDataPath("skybox1.png").c_str()));*/\r
        \r
        /*\r
                Create the camera node\r