Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/applicationinterface.cc')
-rw-r--r--src/core/applicationinterface.cc78
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);
}