diff options
Diffstat (limited to 'src/core/applicationinterface.cc')
-rw-r--r-- | src/core/applicationinterface.cc | 78 |
1 files changed, 69 insertions, 9 deletions
diff --git a/src/core/applicationinterface.cc b/src/core/applicationinterface.cc index d195881..63e1dea 100644 --- a/src/core/applicationinterface.cc +++ b/src/core/applicationinterface.cc @@ -17,8 +17,9 @@ namespace core { // --------------- function repository ------------------------------ extern "C" void func_print(std::stringstream &args) { char text[MAXCMDSIZE]; + // FIXME leading space if(args.getline(text, MAXCMDSIZE)) - con_print << args << std::endl; + con_print << text << std::endl; } extern "C" void func_help(std::stringstream &args) { @@ -26,8 +27,20 @@ extern "C" void func_help(std::stringstream &args) { } extern "C" void func_quit(std::stringstream &args) { - ApplicationInterface::instance()->shutdown(); - ApplicationInterface::instance()->quit(0); + if(ApplicationInterface::instance()) { + ApplicationInterface::instance()->shutdown(); + ApplicationInterface::instance()->quit(0); + } +} + +extern "C" void func_connect(std::stringstream &args) { + if(ApplicationInterface::instance()) + ApplicationInterface::instance()->connect(); +} + +extern "C" void func_disconnect(std::stringstream &args) { + if(ApplicationInterface::instance()) + ApplicationInterface::instance()->disconnect(); } // --------------- signal_handler ----------------------------------- @@ -83,21 +96,25 @@ ApplicationInterface *ApplicationInterface::instance() void ApplicationInterface::init() { - filesystem::init(); - con_print << "Initializing core..." << std::endl; con_debug << "Debug messages enabled" << std::endl; + // initialize core subsystems + filesystem::init(); + // register our functions func_register("print", func_print); func_register("help", func_help); func_register("quit", func_quit); + func_register("connect", func_connect); + func_register("disconnect", func_disconnect); + if (game()) - game()->init(); + game()->connected = false; else con_warn << "No game module loaded!" << std::endl; - + current_time = 0; } void ApplicationInterface::shutdown() @@ -105,7 +122,8 @@ void ApplicationInterface::shutdown() con_print << "Shutting down core..." << std::endl; if (game()) - game()->shutdown(); + if (game()->connected) + disconnect(); else con_warn << "No game module loaded!" << std::endl; @@ -117,9 +135,51 @@ void ApplicationInterface::quit(int status) sys::quit(status); } +void ApplicationInterface::connect() +{ + if (!game()) { + con_warn << "No game module loaded!" << std::endl; + return; + } + + if (game()->connected) { + con_warn << "Connected. Disconnect first." << std::endl; + } + + game()->current_time = 0; + if (game()->connected = game()->init()) { + con_print << "Connected." << std::endl; + } else { + con_warn << "Connect failed." << std::endl; + } +} + +void ApplicationInterface::disconnect() +{ + if (!game()) { + con_warn << "No game module loaded!" << std::endl; + return; + } + + if (!game()->connected) { + con_warn << "Not connected." << std::endl; + return; + } + + game()->shutdown(); + + game()->connected = false; + game()->current_time = 0; + + con_print << "Disconnected." << std::endl; +} + void ApplicationInterface::frame(float seconds) { - if (game()) { + current_time += seconds; + + if (game() && game()->connected) { + game()->current_time += seconds; game()->frame(seconds); } |