summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-03-10 16:46:19 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-03-10 17:10:16 +0200
commitf3dba05143fc8be277137e42fe1933ac185365d4 (patch)
tree9ab6672a7667c0c15a59b3d602f0e8086946af9a /src/main.cpp
parent102070791808ba03f4a5836a9073b87029e72858 (diff)
downloadminetest-f3dba05143fc8be277137e42fe1933ac185365d4.tar.gz
minetest-f3dba05143fc8be277137e42fe1933ac185365d4.tar.bz2
minetest-f3dba05143fc8be277137e42fe1933ac185365d4.zip
Remove servermain.cpp, use main.cpp with a couple of #ifdefs instead
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp268
1 files changed, 146 insertions, 122 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 46fe4715d..e78d4441c 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -373,13 +373,14 @@ Doing currently:
#endif
#ifdef _MSC_VER
+#ifndef SERVER // Dedicated server isn't linked with Irrlicht
#pragma comment(lib, "Irrlicht.lib")
- //#pragma comment(lib, "jthread.lib")
- #pragma comment(lib, "zlibwapi.lib")
- #pragma comment(lib, "Shell32.lib")
// This would get rid of the console window
//#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")
#endif
+ #pragma comment(lib, "zlibwapi.lib")
+ #pragma comment(lib, "Shell32.lib")
+#endif
#include "irrlicht.h" // createDevice
@@ -421,13 +422,30 @@ Profiler main_profiler;
Profiler *g_profiler = &main_profiler;
/*
- Random stuff
+ Debug streams
*/
+// Connection
+std::ostream *dout_con_ptr = &dummyout;
+std::ostream *derr_con_ptr = &verbosestream;
+//std::ostream *dout_con_ptr = &infostream;
+//std::ostream *derr_con_ptr = &errorstream;
+
+// Server
+std::ostream *dout_server_ptr = &infostream;
+std::ostream *derr_server_ptr = &errorstream;
+
+// Client
+std::ostream *dout_client_ptr = &infostream;
+std::ostream *derr_client_ptr = &errorstream;
+
+#ifndef SERVER
/*
- mainmenumanager.h
+ Random stuff
*/
+/* mainmenumanager.h */
+
gui::IGUIEnvironment* guienv = NULL;
gui::IGUIStaticText *guiroot = NULL;
MainMenuManager g_menumgr;
@@ -439,28 +457,21 @@ bool noMenuActive()
// Passed to menus to allow disconnecting and exiting
MainGameCallback *g_gamecallback = NULL;
+#endif
/*
- Debug streams
+ gettime.h implementation
*/
-// Connection
-std::ostream *dout_con_ptr = &dummyout;
-std::ostream *derr_con_ptr = &verbosestream;
-//std::ostream *dout_con_ptr = &infostream;
-//std::ostream *derr_con_ptr = &errorstream;
-
-// Server
-std::ostream *dout_server_ptr = &infostream;
-std::ostream *derr_server_ptr = &errorstream;
+#ifdef SERVER
-// Client
-std::ostream *dout_client_ptr = &infostream;
-std::ostream *derr_client_ptr = &errorstream;
+u32 getTimeMs()
+{
+ /* Use imprecise system calls directly (from porting.h) */
+ return porting::getTimeMs();
+}
-/*
- gettime.h implementation
-*/
+#else
// A small helper class
class TimeGetter
@@ -506,6 +517,30 @@ u32 getTimeMs()
return g_timegetter->getTime();
}
+#endif
+
+class StderrLogOutput: public ILogOutput
+{
+public:
+ /* line: Full line with timestamp, level and thread */
+ void printLog(const std::string &line)
+ {
+ std::cerr<<line<<std::endl;
+ }
+} main_stderr_log_out;
+
+class DstreamNoStderrLogOutput: public ILogOutput
+{
+public:
+ /* line: Full line with timestamp, level and thread */
+ void printLog(const std::string &line)
+ {
+ dstream_no_stderr<<line<<std::endl;
+ }
+} main_dstream_no_stderr_log_out;
+
+#ifndef SERVER
+
/*
Event handler for Irrlicht
@@ -897,6 +932,55 @@ private:
bool rightreleased;
};
+void drawMenuBackground(video::IVideoDriver* driver)
+{
+ core::dimension2d<u32> screensize = driver->getScreenSize();
+
+ video::ITexture *bgtexture =
+ driver->getTexture(getTexturePath("menubg.png").c_str());
+ if(bgtexture)
+ {
+ s32 texturesize = 128;
+ s32 tiled_y = screensize.Height / texturesize + 1;
+ s32 tiled_x = screensize.Width / texturesize + 1;
+
+ for(s32 y=0; y<tiled_y; y++)
+ for(s32 x=0; x<tiled_x; x++)
+ {
+ core::rect<s32> rect(0,0,texturesize,texturesize);
+ rect += v2s32(x*texturesize, y*texturesize);
+ driver->draw2DImage(bgtexture, rect,
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(bgtexture->getSize())),
+ NULL, NULL, true);
+ }
+ }
+
+ video::ITexture *logotexture =
+ driver->getTexture(getTexturePath("menulogo.png").c_str());
+ if(logotexture)
+ {
+ v2s32 logosize(logotexture->getOriginalSize().Width,
+ logotexture->getOriginalSize().Height);
+ logosize *= 4;
+
+ video::SColor bgcolor(255,50,50,50);
+ core::rect<s32> bgrect(0, screensize.Height-logosize.Y-20,
+ screensize.Width, screensize.Height);
+ driver->draw2DRectangle(bgcolor, bgrect, NULL);
+
+ core::rect<s32> rect(0,0,logosize.X,logosize.Y);
+ rect += v2s32(screensize.Width/2,screensize.Height-10-logosize.Y);
+ rect -= v2s32(logosize.X/2, 0);
+ driver->draw2DImage(logotexture, rect,
+ core::rect<s32>(core::position2d<s32>(0,0),
+ core::dimension2di(logotexture->getSize())),
+ NULL, NULL, true);
+ }
+}
+
+#endif
+
// These are defined global so that they're not optimized too much.
// Can't change them to volatile.
s16 temp16;
@@ -909,7 +993,7 @@ std::string tempstring2;
void SpeedTests()
{
{
- dstream<<"The following test should take around 20ms."<<std::endl;
+ infostream<<"The following test should take around 20ms."<<std::endl;
TimeTaker timer("Testing std::string speed");
const u32 jj = 10000;
for(u32 j=0; j<jj; j++)
@@ -928,7 +1012,7 @@ void SpeedTests()
}
}
- dstream<<"All of the following tests should take around 100ms each."
+ infostream<<"All of the following tests should take around 100ms each."
<<std::endl;
{
@@ -971,7 +1055,7 @@ void SpeedTests()
}
{
- dstream<<"Around 5000/ms should do well here."<<std::endl;
+ infostream<<"Around 5000/ms should do well here."<<std::endl;
TimeTaker timer("Testing mutex speed");
JMutex m;
@@ -990,78 +1074,11 @@ void SpeedTests()
u32 dtime = timer.stop();
u32 per_ms = n / dtime;
- dstream<<"Done. "<<dtime<<"ms, "
+ infostream<<"Done. "<<dtime<<"ms, "
<<per_ms<<"/ms"<<std::endl;
}
}
-void drawMenuBackground(video::IVideoDriver* driver)
-{
- core::dimension2d<u32> screensize = driver->getScreenSize();
-
- video::ITexture *bgtexture =
- driver->getTexture(getTexturePath("menubg.png").c_str());
- if(bgtexture)
- {
- s32 texturesize = 128;
- s32 tiled_y = screensize.Height / texturesize + 1;
- s32 tiled_x = screensize.Width / texturesize + 1;
-
- for(s32 y=0; y<tiled_y; y++)
- for(s32 x=0; x<tiled_x; x++)
- {
- core::rect<s32> rect(0,0,texturesize,texturesize);
- rect += v2s32(x*texturesize, y*texturesize);
- driver->draw2DImage(bgtexture, rect,
- core::rect<s32>(core::position2d<s32>(0,0),
- core::dimension2di(bgtexture->getSize())),
- NULL, NULL, true);
- }
- }
-
- video::ITexture *logotexture =
- driver->getTexture(getTexturePath("menulogo.png").c_str());
- if(logotexture)
- {
- v2s32 logosize(logotexture->getOriginalSize().Width,
- logotexture->getOriginalSize().Height);
- logosize *= 4;
-
- video::SColor bgcolor(255,50,50,50);
- core::rect<s32> bgrect(0, screensize.Height-logosize.Y-20,
- screensize.Width, screensize.Height);
- driver->draw2DRectangle(bgcolor, bgrect, NULL);
-
- core::rect<s32> rect(0,0,logosize.X,logosize.Y);
- rect += v2s32(screensize.Width/2,screensize.Height-10-logosize.Y);
- rect -= v2s32(logosize.X/2, 0);
- driver->draw2DImage(logotexture, rect,
- core::rect<s32>(core::position2d<s32>(0,0),
- core::dimension2di(logotexture->getSize())),
- NULL, NULL, true);
- }
-}
-
-class StderrLogOutput: public ILogOutput
-{
-public:
- /* line: Full line with timestamp, level and thread */
- void printLog(const std::string &line)
- {
- std::cerr<<line<<std::endl;
- }
-} main_stderr_log_out;
-
-class DstreamNoStderrLogOutput: public ILogOutput
-{
-public:
- /* line: Full line with timestamp, level and thread */
- void printLog(const std::string &line)
- {
- dstream_no_stderr<<line<<std::endl;
- }
-} main_dstream_no_stderr_log_out;
-
int main(int argc, char *argv[])
{
/*
@@ -1086,29 +1103,28 @@ int main(int argc, char *argv[])
core::map<std::string, ValueSpec> allowed_options;
allowed_options.insert("help", ValueSpec(VALUETYPE_FLAG,
"Show allowed options"));
- allowed_options.insert("server", ValueSpec(VALUETYPE_FLAG,
- "Run server directly"));
allowed_options.insert("config", ValueSpec(VALUETYPE_STRING,
"Load configuration from specified file"));
allowed_options.insert("port", ValueSpec(VALUETYPE_STRING,
- "Set network port to connect to"));
- allowed_options.insert("address", ValueSpec(VALUETYPE_STRING,
- "Address to connect to"));
- allowed_options.insert("random-input", ValueSpec(VALUETYPE_FLAG,
- "Enable random user input, for testing"));
+ "Set network port (UDP) to use"));
allowed_options.insert("disable-unittests", ValueSpec(VALUETYPE_FLAG,
"Disable unit tests"));
allowed_options.insert("enable-unittests", ValueSpec(VALUETYPE_FLAG,
"Enable unit tests"));
allowed_options.insert("map-dir", ValueSpec(VALUETYPE_STRING,
"Map directory (where everything in the world is stored)"));
-#ifdef _WIN32
- allowed_options.insert("dstream-on-stderr", ValueSpec(VALUETYPE_FLAG));
-#endif
- allowed_options.insert("speedtests", ValueSpec(VALUETYPE_FLAG,
- "Run speed tests"));
allowed_options.insert("info-on-stderr", ValueSpec(VALUETYPE_FLAG,
"Print debug information to console"));
+#ifndef SERVER
+ allowed_options.insert("speedtests", ValueSpec(VALUETYPE_FLAG,
+ "Run speed tests"));
+ allowed_options.insert("address", ValueSpec(VALUETYPE_STRING,
+ "Address to connect to"));
+ allowed_options.insert("random-input", ValueSpec(VALUETYPE_FLAG,
+ "Enable random user input, for testing"));
+ allowed_options.insert("server", ValueSpec(VALUETYPE_FLAG,
+ "Run server directly"));
+#endif
Settings cmd_args;
@@ -1145,13 +1161,7 @@ int main(int argc, char *argv[])
Low-level initialization
*/
- bool disable_stderr = false;
-#ifdef _WIN32
- if(cmd_args.getFlag("dstream-on-stderr") == false)
- disable_stderr = true;
-#endif
-
- if(cmd_args.getFlag("info-on-stderr"))
+ if(cmd_args.getFlag("info-on-stderr") || cmd_args.getFlag("speedtests"))
log_add_output(&main_stderr_log_out, LMT_INFO);
porting::signal_handler_init();
@@ -1170,6 +1180,7 @@ int main(int argc, char *argv[])
#else
std::string debugfile = porting::path_user+DIR_DELIM+DEBUGFILE;
#endif
+ bool disable_stderr = false;
debugstreams_init(disable_stderr, debugfile.c_str());
// Initialize debug stacks
debug_stacks_init();
@@ -1261,13 +1272,6 @@ int main(int argc, char *argv[])
run_tests();
}
- /*for(s16 y=-100; y<100; y++)
- for(s16 x=-100; x<100; x++)
- {
- std::cout<<noise2d_gradient((double)x/10,(double)y/10, 32415)<<std::endl;
- }
- return 0;*/
-
/*
Game parameters
*/
@@ -1298,25 +1302,43 @@ int main(int argc, char *argv[])
map_dir = legacy_map_dir;
}
}
-
- // Run dedicated server if asked to
- if(cmd_args.getFlag("server"))
+
+ // Run dedicated server if asked to or no other option
+#ifdef SERVER
+ bool run_dedicated_server = true;
+#else
+ bool run_dedicated_server = cmd_args.getFlag("server");
+#endif
+ if(run_dedicated_server)
{
DSTACK("Dedicated server branch");
- // Create time getter
+ // Create time getter if built with Irrlicht
+#ifndef SERVER
g_timegetter = new SimpleTimeGetter();
+#endif
// Create server
Server server(map_dir, configpath, "mesetint");
server.start(port);
+ // ASCII art for the win!
+ dstream<<std::endl
+ <<" .__ __ __ "<<std::endl
+ <<" _____ |__| ____ _____/ |_ ____ _______/ |_ "<<std::endl
+ <<" / \\| |/ \\_/ __ \\ __\\/ __ \\ / ___/\\ __\\"<<std::endl
+ <<"| Y Y \\ | | \\ ___/| | \\ ___/ \\___ \\ | | "<<std::endl
+ <<"|__|_| /__|___| /\\___ >__| \\___ >____ > |__| "<<std::endl
+ <<" \\/ \\/ \\/ \\/ \\/ "<<std::endl
+ <<std::endl;
+
// Run server
dedicated_server_loop(server, kill);
return 0;
}
+#ifndef SERVER // Exclude from dedicated server build
/*
More parameters
@@ -1679,6 +1701,8 @@ int main(int argc, char *argv[])
In the end, delete the Irrlicht device.
*/
device->drop();
+
+#endif // !SERVER
END_DEBUG_EXCEPTION_HANDLER(errorstream)