diff options
| author | Simon 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) |
| commit | 8b80942b16fd6292884fb3208bc52c29a25cfff8 (patch) | |
| tree | febd0a9004932d602f5de0be3ebf358a8611e1f2 /src/game | |
| parent | 3505bcc275dc2e276386e51b1dc13325d4eefa07 (diff) | |
| download | powder-8b80942b16fd6292884fb3208bc52c29a25cfff8.zip powder-8b80942b16fd6292884fb3208bc52c29a25cfff8.tar.gz | |
Login working, segfaults sometimes
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/GameController.cpp | 18 | ||||
| -rw-r--r-- | src/game/GameController.h | 1 | ||||
| -rw-r--r-- | src/game/GameModel.cpp | 22 | ||||
| -rw-r--r-- | src/game/GameModel.h | 6 | ||||
| -rw-r--r-- | src/game/GameView.cpp | 12 | ||||
| -rw-r--r-- | src/game/GameView.h | 1 |
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); |
