--- a/src/Engine.cc Thu Jan 22 02:38:33 2009 +0200
+++ b/src/Engine.cc Thu Jan 22 02:47:53 2009 +0200
@@ -26,13 +26,14 @@
Engine::Engine (const EngineConfig &config) :
terrain(NULL), game_state(NULL), graphics(NULL), net_server(NULL), net_client_connect(NULL),
+ game_view(NULL),
is_running(true), resources(config.resource_path)
{
// update global log_level
Engine::log_level = config.log_level;
}
-GameState& Engine::setupGame (Terrain *terrain) {
+void Engine::setupGame (Terrain *terrain) {
// ensure this isn't called in inappropriate ways
assert(!net_server);
@@ -41,10 +42,6 @@
// create the GameState
game_state = new GameState(*terrain);
-
- // XXX: NetworkClient + GameView?
-
- return *game_state;
}
void Engine::setupGame (const TerrainConfig &config) {
@@ -72,9 +69,9 @@
void Engine::startGameView (LocalPlayer *player) {
#if GRAPHICS_ENABLED
- assert(graphics);
+ assert(graphics && !game_view);
- graphics->displayGameView(*game_state, player);
+ game_view = graphics->displayGameView(*game_state, player);
#else
(void) player;
@@ -138,7 +135,25 @@
// put graphics into GameView mode
if (graphics)
startGameView(lp);
-
+}
+
+
+GameState& Engine::onNetworkClientConnected (Terrain *terrain) {
+ // setup the game
+ setupGame(terrain);
+
+ // start the GameView, but no LocalPlayer yet
+ startGameView(NULL);
+
+ // return GameState
+ return *game_state;
+}
+
+void Engine::onNetworkClientPlayer (LocalPlayer *player) {
+ assert(game_view);
+
+ // set the GameView's player
+ game_view->setPlayer(player);
}
void Engine::stop (void) {