summaryrefslogtreecommitdiff
path: root/src/game
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
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')
-rw-r--r--src/game/GameController.cpp48
-rw-r--r--src/game/GameController.h2
-rw-r--r--src/game/GameModel.cpp1
-rw-r--r--src/game/GameView.cpp1
-rw-r--r--src/game/Tool.h1
5 files changed, 50 insertions, 3 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());
}
diff --git a/src/game/GameController.h b/src/game/GameController.h
index 4f076fd..28edd86 100644
--- a/src/game/GameController.h
+++ b/src/game/GameController.h
@@ -26,6 +26,8 @@ private:
LoginController * loginWindow;
public:
class LoginCallback;
+ class SearchCallback;
+ class RenderCallback;
GameController();
~GameController();
GameView * GetView();
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index 33eb143..3085b09 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -122,6 +122,7 @@ Save * GameModel::GetSave()
void GameModel::SetSave(Save * newSave)
{
currentSave = newSave;
+ sim->Load(currentSave->GetData(), currentSave->GetDataLength());
notifySaveChanged();
}
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index 4695227..163c2f7 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -327,6 +327,7 @@ void GameView::NotifySaveChanged(GameModel * sender)
{
if(sender->GetSave())
{
+ saveSimulationButton->SetText(sender->GetSave()->name);
reloadButton->Enabled = true;
if(sender->GetSave()->GetID()) //Online saves have an ID, local saves have an ID of 0 and a filename
{
diff --git a/src/game/Tool.h b/src/game/Tool.h
index 4777e6d..1cf8ce4 100644
--- a/src/game/Tool.h
+++ b/src/game/Tool.h
@@ -46,7 +46,6 @@ public:
sim->create_parts(position.X, position.Y, 1, 1, toolID, 0, brush);
}
virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {
- std::cout << position1.X << toolID << brush << std::endl;
sim->create_line(position1.X, position1.Y, position2.X, position2.Y, 1, 1, toolID, 0, brush);
}
virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {}