summaryrefslogtreecommitdiff
path: root/src/game/GameController.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-26 01:13:33 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-26 01:13:33 (GMT)
commit9e1be78bc21d1fb76a19ce12ef36193aea6e2b93 (patch)
tree081b67d551bb44fecbf6deb99b6c44ea9789614c /src/game/GameController.cpp
parentb2d3257ae944a3ea3b57dc8ee4171b1b2f85483e (diff)
downloadpowder-9e1be78bc21d1fb76a19ce12ef36193aea6e2b93.zip
powder-9e1be78bc21d1fb76a19ce12ef36193aea6e2b93.tar.gz
I've got to a point where I can no longer be bothered to think of a proper commit comment
Diffstat (limited to 'src/game/GameController.cpp')
-rw-r--r--src/game/GameController.cpp48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index 5399cf8..e8efe0b 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -4,6 +4,7 @@
#include "Config.h"
#include "GameController.h"
#include "GameModel.h"
+#include "search/Save.h"
#include "search/SearchController.h"
#include "render/RenderController.h"
#include "login/LoginController.h"
@@ -22,6 +23,37 @@ public:
}
};
+
+class GameController::SearchCallback: public ControllerCallback
+{
+ GameController * cc;
+public:
+ SearchCallback(GameController * cc_) { cc = cc_; }
+ virtual void ControllerExit()
+ {
+ if(cc->search->GetLoadedSave())
+ {
+ if(cc->gameModel->GetSave())
+ {
+ delete cc->gameModel->GetSave();
+ }
+ cc->gameModel->SetSave(new Save(*(cc->search->GetLoadedSave())));
+ }
+ }
+};
+
+
+class GameController::RenderCallback: public ControllerCallback
+{
+ GameController * cc;
+public:
+ RenderCallback(GameController * cc_) { cc = cc_; }
+ virtual void ControllerExit()
+ {
+ //cc->gameModel->SetUser(cc->loginWindow->GetUser());
+ }
+};
+
GameController::GameController():
search(NULL),
renderOptions(NULL),
@@ -117,6 +149,18 @@ void GameController::DrawPoints(queue<ui::Point*> & pointQueue)
void GameController::Update()
{
//gameModel->GetSimulation()->update_particles();
+ if(renderOptions && renderOptions->HasExited)
+ {
+ delete renderOptions;
+ renderOptions = NULL;
+ }
+
+ if(search && search->HasExited)
+ {
+ delete search;
+ search = NULL;
+ }
+
if(loginWindow && loginWindow->HasExited)
{
delete loginWindow;
@@ -146,7 +190,7 @@ void GameController::SetActiveTool(Tool * tool)
void GameController::OpenSearch()
{
- search = new SearchController();
+ search = new SearchController(new SearchCallback(this));
ui::Engine::Ref().ShowWindow(search->GetView());
}
@@ -168,7 +212,7 @@ void GameController::OpenDisplayOptions()
void GameController::OpenRenderOptions()
{
- renderOptions = new RenderController(gameModel->GetRenderer());
+ renderOptions = new RenderController(gameModel->GetRenderer(), new RenderCallback(this));
ui::Engine::Ref().ShowWindow(renderOptions->GetView());
}