aboutsummaryrefslogtreecommitdiff
path: root/src/voxel.cpp
Commit message (Collapse)AuthorAge
* Properly and efficiently use split utility headersPerttu Ahola2012-06-17
|
* Switch the license to be LGPLv2/later, with small parts still remaining as ↵Perttu Ahola2012-06-05
| | | | GPLv2/later, by agreement of major contributors
* Implement propagateSunlight for VoxelManipulatorPerttu Ahola2012-03-27
|
* Optimize lighting by a tiny bitPerttu Ahola2011-11-29
|
* GameDef compilesPerttu Ahola2011-11-29
|
* extended content-type rangePerttu Ahola2011-07-23
|
* Moved some mapnode content stuff from mapnode.{h,cpp} and digging property ↵Perttu Ahola2011-06-17
| | | | stuff from material.cpp to content_mapnode.{h,cpp}
* partly working chunk-based map generator (doesn't save properly, spawn is ↵Perttu Ahola2011-02-01
| | | | pretty random)
* map generation framework under development... not quite operational at this ↵Perttu Ahola2011-01-30
| | | | point.
* Reworked texture, material, mineral and whatever handlingPerttu Ahola2011-01-26
|
* removed alternative name "pressure" from param2Perttu Ahola2011-01-25
|
* Faster lighting at map generation timePerttu Ahola2011-01-24
|
* commented out old water stuffPerttu Ahola2011-01-24
|
* old water removed, some fixes here and therePerttu Ahola2011-01-17
|
* working goodPerttu Ahola2010-12-26
|
* some work-in-progressPerttu Ahola2010-12-22
|
* organizing stuff.Perttu Ahola2010-12-21
|
* framework for modifying texturesPerttu Ahola2010-12-20
|
* day/night working client sidePerttu Ahola2010-12-19
|
* before daynight mesh cachePerttu Ahola2010-12-18
|
* little fixesPerttu Ahola2010-12-14
|
* working nicelyPerttu Ahola2010-12-13
|
* starting to separate "material" to "content" and "tile"Perttu Ahola2010-12-12
|
* removed accidental double flowWaterPerttu Ahola2010-12-11
|
* commit before some radicallish changes to water behaviorPerttu Ahola2010-12-11
|
* some work-in-progress water stuffPerttu Ahola2010-12-01
|
* license stuffPerttu Ahola2010-11-29
| | | | | --HG-- rename : src/licensecomment.txt => licensecomment.txt
* vokselijuttu lisättyPerttu Ahola2010-11-29
an class="hl pps">"Disabling unit tests" #endif // Disable unit tests #define ENABLE_TESTS 0 #else // Enable unit tests #define ENABLE_TESTS 1 #endif #ifdef _MSC_VER #pragma comment(lib, "jthread.lib") #pragma comment(lib, "zlibwapi.lib") #endif #include <iostream> #include <fstream> #include <time.h> #include <jmutexautolock.h> #include <locale.h> #include "common_irrlicht.h" #include "debug.h" #include "map.h" #include "player.h" #include "main.h" #include "test.h" #include "environment.h" #include "server.h" #include "serialization.h" #include "constants.h" #include "strfnd.h" #include "porting.h" #include "materials.h" #include "config.h" #include "mineral.h" #include "filesys.h" /* Settings. These are loaded from the config file. */ Settings g_settings; extern void set_default_settings(); // Global profiler Profiler g_profiler; // A dummy thing ITextureSource *g_texturesource = NULL; /* Debug streams */ // Connection std::ostream *dout_con_ptr = &dummyout; std::ostream *derr_con_ptr = &dstream_no_stderr; // Server std::ostream *dout_server_ptr = &dstream; std::ostream *derr_server_ptr = &dstream; // Client std::ostream *dout_client_ptr = &dstream; std::ostream *derr_client_ptr = &dstream; /* gettime.h implementation */ u32 getTimeMs() { /* Use imprecise system calls directly (from porting.h) */ return porting::getTimeMs(); } int main(int argc, char *argv[]) { /* Initialization */ // Set locale. This is for forcing '.' as the decimal point. std::locale::global(std::locale("C")); // This enables printing all characters in bitmap font setlocale(LC_CTYPE, "en_US"); /* Low-level initialization */ bool disable_stderr = false; #ifdef _WIN32 disable_stderr = true; #endif porting::signal_handler_init(); bool &kill = *porting::signal_handler_killstatus(); // Initialize porting::path_data and porting::path_userdata porting::initializePaths(); // Create user data directory fs::CreateDir(porting::path_userdata); // Initialize debug streams #ifdef RUN_IN_PLACE std::string debugfile = DEBUGFILE; #else std::string debugfile = porting::path_userdata+"/"+DEBUGFILE; #endif debugstreams_init(disable_stderr, debugfile.c_str()); // Initialize debug stacks debug_stacks_init(); DSTACK(__FUNCTION_NAME); // Init material properties table //initializeMaterialProperties(); // Debug handler BEGIN_DEBUG_EXCEPTION_HANDLER // Print startup message dstream<<DTIME<<PROJECT_NAME << " with SER_FMT_VER_HIGHEST="<<(int)SER_FMT_VER_HIGHEST <<", "<<BUILD_INFO <<std::endl; try { /* Parse command line */ // List all allowed options core::map<std::string, ValueSpec> allowed_options; allowed_options.insert("help", ValueSpec(VALUETYPE_FLAG)); allowed_options.insert("config", ValueSpec(VALUETYPE_STRING, "Load configuration from specified file")); allowed_options.insert("port", ValueSpec(VALUETYPE_STRING)); allowed_options.insert("disable-unittests", ValueSpec(VALUETYPE_FLAG)); allowed_options.insert("enable-unittests", ValueSpec(VALUETYPE_FLAG)); allowed_options.insert("map-dir", ValueSpec(VALUETYPE_STRING)); Settings cmd_args; bool ret = cmd_args.parseCommandLine(argc, argv, allowed_options); if(ret == false || cmd_args.getFlag("help")) { dstream<<"Allowed options:"<<std::endl; for(core::map<std::string, ValueSpec>::Iterator i = allowed_options.getIterator(); i.atEnd() == false; i++) { dstream<<" --"<<i.getNode()->getKey(); if(i.getNode()->getValue().type == VALUETYPE_FLAG) { } else { dstream<<" <value>"; } dstream<<std::endl; if(i.getNode()->getValue().help != NULL) { dstream<<" "<<i.getNode()->getValue().help <<std::endl; } } return cmd_args.getFlag("help") ? 0 : 1; } /* Basic initialization */ // Initialize default settings set_default_settings(); // Initialize sockets sockets_init(); atexit(sockets_cleanup); /* Read config file */ // Path of configuration file in use std::string configpath = ""; if(cmd_args.exists("config")) { bool r = g_settings.readConfigFile(cmd_args.get("config").c_str()); if(r == false) { dstream<<"Could not read configuration from \"" <<cmd_args.get("config")<<"\""<<std::endl; return 1; } configpath = cmd_args.get("config"); } else { core::array<std::string> filenames; filenames.push_back(porting::path_userdata + "/minetest.conf"); #ifdef RUN_IN_PLACE filenames.push_back(porting::path_userdata + "/../minetest.conf"); #endif for(u32 i=0; i<filenames.size(); i++) { bool r = g_settings.readConfigFile(filenames[i].c_str()); if(r) { configpath = filenames[i]; break; } } } // Initialize random seed srand(time(0)); mysrand(time(0)); // Initialize stuff init_mapnode(); init_mineral(); /* Run unit tests */ if((ENABLE_TESTS && cmd_args.getFlag("disable-unittests") == false) || cmd_args.getFlag("enable-unittests") == true) { run_tests(); } /* Check parameters */ std::cout<<std::endl<<std::endl; std::cout <<" .__ __ __ "<<std::endl <<" _____ |__| ____ _____/ |_ ____ _______/ |_ "<<std::endl <<" / \\| |/ \\_/ __ \\ __\\/ __ \\ / ___/\\ __\\"<<std::endl <<"| Y Y \\ | | \\ ___/| | \\ ___/ \\___ \\ | | "<<std::endl <<"|__|_| /__|___| /\\___ >__| \\___ >____ > |__| "<<std::endl <<" \\/ \\/ \\/ \\/ \\/ "<<std::endl <<std::endl; std::cout<<std::endl; // Port? u16 port = 30000; if(cmd_args.exists("port") && cmd_args.getU16("port") != 0) { port = cmd_args.getU16("port"); } else if(g_settings.exists("port") && g_settings.getU16("port") != 0) { port = g_settings.getU16("port"); } else { dstream<<"Please specify port (in config or on command line)" <<std::endl; } // Figure out path to map std::string map_dir = porting::path_userdata+"/world"; if(cmd_args.exists("map-dir")) map_dir = cmd_args.get("map-dir"); else if(g_settings.exists("map-dir")) map_dir = g_settings.get("map-dir"); // Create server Server server(map_dir.c_str(), configpath); server.start(port); // Run server dedicated_server_loop(server, kill); } //try catch(con::PeerNotFoundException &e) { dstream<<DTIME<<"Connection timed out."<<std::endl; } END_DEBUG_EXCEPTION_HANDLER debugstreams_deinit(); return 0; } //END