Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/Makefile.am4
-rw-r--r--src/core/applicationinterface.cc68
-rw-r--r--src/core/applicationinterface.h42
-rw-r--r--src/core/core.cc50
-rw-r--r--src/core/core.h14
-rw-r--r--src/core/gameinterface.cc37
-rw-r--r--src/core/gameinterface.h44
7 files changed, 199 insertions, 60 deletions
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index 1f1cc2e..b062f9e 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -1,12 +1,12 @@
METASOURCES = AUTO
INCLUDES = -I$(top_srcdir)/src
-libcore_la_SOURCES = core.cc game.cc
+libcore_la_SOURCES = applicationinterface.cc gameinterface.cc
libcore_la_LDFLAGS = -avoid-version
libcore_la_LIBADD = $(top_builddir)/src/math/libmath.la \
$(top_builddir)/src/common/libcommon.la \
$(top_builddir)/src/filesystem/libfilesystem.la
noinst_LTLIBRARIES = libcore.la
-noinst_HEADERS = core.h game.h
+noinst_HEADERS = applicationinterface.h core.h gameinterface.h
diff --git a/src/core/applicationinterface.cc b/src/core/applicationinterface.cc
new file mode 100644
index 0000000..9ef5c16
--- /dev/null
+++ b/src/core/applicationinterface.cc
@@ -0,0 +1,68 @@
+/*
+ core/applicationinterface.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "core/core.h"
+#include "filesystem/filesystem.h"
+#include "common/common.h"
+
+#include <iostream>
+
+#include <stdlib.h>
+
+namespace core {
+
+ApplicationInterface *ApplicationInterface::applicationinterface_instance = 0;
+
+ApplicationInterface::ApplicationInterface() {
+ if (applicationinterface_instance) {
+ std::cerr << "multiple singleton instances: core::ApplicationInterface" << std::endl;
+ exit(2);
+ }
+ applicationinterface_instance = this;
+}
+
+ApplicationInterface::~ApplicationInterface()
+{
+ applicationinterface_instance = 0;
+}
+
+ApplicationInterface *ApplicationInterface::instance()
+{
+ return applicationinterface_instance;
+}
+
+void ApplicationInterface::init()
+{
+ filesystem::init();
+
+ con_debug << "Initializing core..." << std::endl;
+
+ if (game())
+ game()->init();
+ else
+ con_warn << "No game module found!" << std::endl;
+
+}
+
+void ApplicationInterface::shutdown()
+{
+ con_debug << "Shutting down core..." << std::endl;
+
+ if (game())
+ game()->shutdown();
+ else
+ con_warn << "No game module found!" << std::endl;
+
+ filesystem::shutdown();
+}
+
+void ApplicationInterface::frame(float seconds)
+{
+ if (game())
+ game()->frame(seconds);
+}
+
+}
diff --git a/src/core/applicationinterface.h b/src/core/applicationinterface.h
new file mode 100644
index 0000000..19eaee6
--- /dev/null
+++ b/src/core/applicationinterface.h
@@ -0,0 +1,42 @@
+/*
+ core/applicationinterface.h
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2.
+*/
+
+#ifndef __INCLUDED_CORE_APPLICATIONINTERFACE_H__
+#define __INCLUDED_CORE_APPLICATIONINTERFACE_H__
+
+namespace core {
+
+/// core interface for the client and server Application classes
+class ApplicationInterface {
+public:
+ /// default constructor
+ ApplicationInterface();
+
+ /// default destructor
+ virtual ~ApplicationInterface();
+
+ /// initialize the application
+ virtual void init();
+
+ /// shutdown the application
+ virtual void shutdown();
+
+ /// run a core frame
+ virtual void frame(float seconds);
+
+ /// a pointer to the current console instance
+ static ApplicationInterface *instance();
+
+private:
+ /// console singleton
+ static ApplicationInterface *applicationinterface_instance;
+};
+
+
+} // namespace core
+
+#endif // __INCLUDED_CORE_APPLICATIONINTERFACE_H__
+
diff --git a/src/core/core.cc b/src/core/core.cc
deleted file mode 100644
index 0a4ed60..0000000
--- a/src/core/core.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- core/core.cc
- This file is part of the Osirion project and is distributed under
- the terms of the GNU General Public License version 2
-*/
-
-// project headers
-#include "common/common.h"
-#include "filesystem/filesystem.h"
-#include "core/core.h"
-
-namespace core
-{
-
-void init()
-{
- con_debug << "Initializing core..." << std::endl;
-
- common::init();
-
- filesystem::init();
-
- if (::core::Game::instance())
- ::core::Game::instance()->init();
- else
- con_warn << "No game module found!" << std::endl;
-
-}
-
-void shutdown()
-{
- con_debug << "Shutting down core..." << std::endl;
-
- if (::core::Game::instance())
- ::core::Game::instance()->shutdown();
- else
- con_warn << "No game module found!" << std::endl;
-
- filesystem::shutdown();
-
- common::shutdown();
-}
-
-void frame(float sec)
-{
- if (::core::Game::instance())
- ::core::Game::instance()->frame(sec);
-}
-
-} //namespace core
diff --git a/src/core/core.h b/src/core/core.h
index 09c7209..745fd86 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -7,20 +7,18 @@
#ifndef __INCLUDED_CORE_H__
#define __INCLUDED_CORE_H__
+#include "core/gameinterface.h"
+#include "core/applicationinterface.h"
+
/// core contains the basic functionality of the engine
namespace core
{
- /// initialize the core
- void init();
-
- /// shutdown the core
- void shutdown();
+ inline GameInterface *game() { return GameInterface::instance(); }
- /// run one frame
- void frame(float sec);
+ inline ApplicationInterface *application() { return ApplicationInterface::instance(); }
+
};
-#include "core/game.h"
#endif // __INCLUDED_CORE_H__
diff --git a/src/core/gameinterface.cc b/src/core/gameinterface.cc
new file mode 100644
index 0000000..964da2d
--- /dev/null
+++ b/src/core/gameinterface.cc
@@ -0,0 +1,37 @@
+/*
+ core/game.cc
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#include "core/gameinterface.h"
+
+#include <iostream>
+
+#include <stdlib.h>
+
+namespace core {
+
+GameInterface *GameInterface::gameinterface_instance = 0;
+
+GameInterface::GameInterface()
+{
+ if (gameinterface_instance) {
+ std::cerr << "multiple singleton instances: core::GameInterface" << std::endl;
+ exit(2);
+ }
+ gameinterface_instance = this;
+}
+
+GameInterface::~GameInterface()
+{
+ gameinterface_instance = 0;
+}
+
+GameInterface *GameInterface::instance()
+{
+ return gameinterface_instance;
+}
+
+}
+
diff --git a/src/core/gameinterface.h b/src/core/gameinterface.h
new file mode 100644
index 0000000..3bd887c
--- /dev/null
+++ b/src/core/gameinterface.h
@@ -0,0 +1,44 @@
+/*
+ core/game.h
+ This file is part of the Osirion project and is distributed under
+ the terms of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_CORE_GAMEINTERFACE_H__
+#define __INCLUDED_CORE_GAMEINTERFACE_H__
+
+namespace core
+{
+
+/// abstract interface from the core to the game-specific code
+/** The real game class has to derive from this class
+ */
+class GameInterface {
+public:
+ /// create a new game singleton
+ GameInterface();
+ /// destroy the game singleton
+ virtual ~GameInterface();
+
+ /// initialize the game
+ virtual void init() = 0;
+
+ /// shutdown the game
+ virtual void shutdown() = 0;
+
+ /// run one frame of the game
+ /** @param sec time since the previous frame, in seconds
+ */
+ virtual void frame (float sec) = 0;
+
+ /// a pointer to the current game instance
+ static GameInterface * instance();
+
+private:
+ /// game singleton
+ static GameInterface *gameinterface_instance;
+};
+
+}
+
+#endif // __INCLUDED_CORE_GAMEINTERFACE_H__