src/Engine.cc
branchnew_graphics
changeset 419 9cd4e54693b6
parent 418 194bc810a570
child 423 947ab54de4b7
--- 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) {