summaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-01-25 17:21:55 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-01-25 17:21:55 (GMT)
commit8b80942b16fd6292884fb3208bc52c29a25cfff8 (patch)
treefebd0a9004932d602f5de0be3ebf358a8611e1f2 /src/game
parent3505bcc275dc2e276386e51b1dc13325d4eefa07 (diff)
downloadpowder-8b80942b16fd6292884fb3208bc52c29a25cfff8.zip
powder-8b80942b16fd6292884fb3208bc52c29a25cfff8.tar.gz
Login working, segfaults sometimes
Diffstat (limited to 'src/game')
-rw-r--r--src/game/GameController.cpp18
-rw-r--r--src/game/GameController.h1
-rw-r--r--src/game/GameModel.cpp22
-rw-r--r--src/game/GameModel.h6
-rw-r--r--src/game/GameView.cpp12
-rw-r--r--src/game/GameView.h1
6 files changed, 56 insertions, 4 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index b00c802..d7c9633 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -11,9 +11,23 @@
using namespace std;
+class GameController::LoginCallback: public ControllerCallback
+{
+ GameController * cc;
+public:
+ LoginCallback(GameController * cc_) { cc = cc_; }
+ virtual void ControllerExit()
+ {
+ cc->gameModel->SetUser(cc->loginWindow->GetUser());
+ delete cc->loginWindow;
+ cc->loginWindow = NULL;
+ }
+};
+
GameController::GameController():
search(NULL),
- renderOptions(NULL)
+ renderOptions(NULL),
+ loginWindow(NULL)
{
gameView = new GameView();
gameModel = new GameModel();
@@ -135,7 +149,7 @@ void GameController::OpenSearch()
void GameController::OpenLogin()
{
- loginWindow = new LoginController();
+ loginWindow = new LoginController(new LoginCallback(this));
ui::Engine::Ref().ShowWindow(loginWindow->GetView());
}
diff --git a/src/game/GameController.h b/src/game/GameController.h
index 67afdc4..157df99 100644
--- a/src/game/GameController.h
+++ b/src/game/GameController.h
@@ -25,6 +25,7 @@ private:
RenderController * renderOptions;
LoginController * loginWindow;
public:
+ class LoginCallback;
GameController();
~GameController();
GameView * GetView();
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index 3271f3a..8062c64 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -11,7 +11,8 @@ GameModel::GameModel():
sim(NULL),
ren(NULL),
currentSave(NULL),
- currentBrush(new Brush(ui::Point(4, 4)))
+ currentBrush(new Brush(ui::Point(4, 4))),
+ currentUser(0, "")
{
sim = new Simulation();
ren = new Renderer(ui::Engine::Ref().g, sim);
@@ -132,6 +133,17 @@ Renderer * GameModel::GetRenderer()
return ren;
}
+User GameModel::GetUser()
+{
+ return currentUser;
+}
+
+void GameModel::SetUser(User user)
+{
+ currentUser = user;
+ notifyUserChanged();
+}
+
void GameModel::SetPaused(bool pauseState)
{
sim->sys_pause = pauseState?1:0;
@@ -211,3 +223,11 @@ void GameModel::notifyActiveToolChanged()
observers[i]->NotifyActiveToolChanged(this);
}
}
+
+void GameModel::notifyUserChanged()
+{
+ for(int i = 0; i < observers.size(); i++)
+ {
+ observers[i]->NotifyUserChanged(this);
+ }
+}
diff --git a/src/game/GameModel.h b/src/game/GameModel.h
index 14319e7..b8f5217 100644
--- a/src/game/GameModel.h
+++ b/src/game/GameModel.h
@@ -7,6 +7,7 @@
#include "Renderer.h"
#include "GameView.h"
#include "Brush.h"
+#include "client/User.h"
#include "Tool.h"
#include "Menu.h"
@@ -29,6 +30,7 @@ private:
Simulation * sim;
Renderer * ren;
Tool * activeTool;
+ User currentUser;
void notifyRendererChanged();
void notifySimulationChanged();
void notifyPausedChanged();
@@ -37,6 +39,7 @@ private:
void notifyMenuListChanged();
void notifyToolListChanged();
void notifyActiveToolChanged();
+ void notifyUserChanged();
public:
GameModel();
~GameModel();
@@ -53,7 +56,8 @@ public:
vector<Tool*> GetToolList();
void SetActiveMenu(Menu * menu);
Menu * GetActiveMenu();
-
+ User GetUser();
+ void SetUser(User user);
Simulation * GetSimulation();
Renderer * GetRenderer();
};
diff --git a/src/game/GameView.cpp b/src/game/GameView.cpp
index d452756..70f6663 100644
--- a/src/game/GameView.cpp
+++ b/src/game/GameView.cpp
@@ -305,6 +305,18 @@ void GameView::NotifySimulationChanged(GameModel * sender)
{
}
+void GameView::NotifyUserChanged(GameModel * sender)
+{
+ if(!sender->GetUser().ID)
+ {
+ loginButton->SetText("Login");
+ }
+ else
+ {
+ loginButton->SetText(sender->GetUser().Username);
+ }
+}
+
void GameView::NotifyPausedChanged(GameModel * sender)
{
diff --git a/src/game/GameView.h b/src/game/GameView.h
index ef35536..f0c3e82 100644
--- a/src/game/GameView.h
+++ b/src/game/GameView.h
@@ -48,6 +48,7 @@ public:
void NotifyMenuListChanged(GameModel * sender);
void NotifyToolListChanged(GameModel * sender);
void NotifyActiveToolChanged(GameModel * sender);
+ void NotifyUserChanged(GameModel * sender);
virtual void OnMouseMove(int x, int y, int dx, int dy);
virtual void OnMouseDown(int x, int y, unsigned button);
virtual void OnMouseUp(int x, int y, unsigned button);