summaryrefslogtreecommitdiff
path: root/src/game/GameModel.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-08-02 23:47:39 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-08-02 23:47:39 (GMT)
commitb16561926625e92dc3525664e71890d8239ab8c3 (patch)
tree7e76652b66ab32adf9bd8213f52c22de31b24c59 /src/game/GameModel.cpp
parent94bb1ad2dfbe4b75b388819d028dd80e74c9a09e (diff)
downloadpowder-b16561926625e92dc3525664e71890d8239ab8c3.zip
powder-b16561926625e92dc3525664e71890d8239ab8c3.tar.gz
Update menus on element change from lua, addresses issue #42
Diffstat (limited to 'src/game/GameModel.cpp')
-rw-r--r--src/game/GameModel.cpp136
1 files changed, 77 insertions, 59 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
index b2f7d70..7c2ddeb 100644
--- a/src/game/GameModel.cpp
+++ b/src/game/GameModel.cpp
@@ -52,11 +52,84 @@ GameModel::GameModel():
}
+ //Load last user
+ if(Client::Ref().GetAuthUser().ID)
+ {
+ currentUser = Client::Ref().GetAuthUser();
+ }
+
+ //Set stamp to first stamp in list
+ vector<string> stamps = Client::Ref().GetStamps(0, 1);
+ if(stamps.size()>0)
+ {
+ SaveFile * stampFile = Client::Ref().GetStamp(stamps[0]);
+ if(stampFile && stampFile->GetGameSave())
+ stamp = stampFile->GetGameSave();
+ }
+
+ BuildMenus();
+
+ //Set default decoration colour
+ unsigned char colourR = min(Client::Ref().GetPrefInteger("Decoration.Red", 200), 255);
+ unsigned char colourG = min(Client::Ref().GetPrefInteger("Decoration.Green", 100), 255);
+ unsigned char colourB = min(Client::Ref().GetPrefInteger("Decoration.Blue", 50), 255);
+ unsigned char colourA = min(Client::Ref().GetPrefInteger("Decoration.Alpha", 255), 255);
+
+ SetColourSelectorColour(ui::Colour(colourR, colourG, colourB, colourA));
+}
+
+GameModel::~GameModel()
+{
+ //Save to config:
+ Client::Ref().SetPref("Renderer.ColourMode", (double)ren->GetColourMode());
+
+ std::vector<unsigned int> displayModes = ren->GetDisplayMode();
+ Client::Ref().SetPref("Renderer.DisplayModes", std::vector<double>(displayModes.begin(), displayModes.end()));
+
+ std::vector<unsigned int> renderModes = ren->GetRenderMode();
+ Client::Ref().SetPref("Renderer.RenderModes", std::vector<double>(renderModes.begin(), renderModes.end()));
+
+ Client::Ref().SetPref("Decoration.Red", (int)colour.Red);
+ Client::Ref().SetPref("Decoration.Green", (int)colour.Green);
+ Client::Ref().SetPref("Decoration.Blue", (int)colour.Blue);
+ Client::Ref().SetPref("Decoration.Alpha", (int)colour.Alpha);
+
+ for(int i = 0; i < menuList.size(); i++)
+ {
+ delete menuList[i];
+ }
+ for(int i = 0; i < brushList.size(); i++)
+ {
+ delete brushList[i];
+ }
+ delete sim;
+ delete ren;
+ if(clipboard)
+ delete clipboard;
+ if(stamp)
+ delete stamp;
+ if(currentSave)
+ delete currentSave;
+ //if(activeTools)
+ // delete[] activeTools;
+}
+
+void GameModel::BuildMenus()
+{
+ //Empty current menus
+ for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
+ {
+ delete *iter;
+ }
menuList.clear();
+ toolList.clear();
+
+ //Create menus
for(int i = 0; i < SC_TOTAL; i++)
{
menuList.push_back(new Menu((const char)sim->msections[i].icon[0], sim->msections[i].name));
}
+
//Build menus from Simulation elements
for(int i = 0; i < PT_NUM; i++)
{
@@ -119,70 +192,15 @@ GameModel::GameModel():
//Set default tools
activeTools[0] = menuList[SC_POWDERS]->GetToolList()[0];
activeTools[1] = menuList[SC_SPECIAL]->GetToolList()[0];
+ activeTools[2] = NULL;
//Set default menu
activeMenu = menuList[SC_POWDERS];
toolList = menuList[SC_POWDERS]->GetToolList();
- //Load last user
- if(Client::Ref().GetAuthUser().ID)
- {
- currentUser = Client::Ref().GetAuthUser();
- }
-
- //Set stamp to first stamp in list
- vector<string> stamps = Client::Ref().GetStamps(0, 1);
- if(stamps.size()>0)
- {
- SaveFile * stampFile = Client::Ref().GetStamp(stamps[0]);
- if(stampFile && stampFile->GetGameSave())
- stamp = stampFile->GetGameSave();
- }
-
-
- //Set default decoration colour
- unsigned char colourR = min(Client::Ref().GetPrefInteger("Decoration.Red", 200), 255);
- unsigned char colourG = min(Client::Ref().GetPrefInteger("Decoration.Green", 100), 255);
- unsigned char colourB = min(Client::Ref().GetPrefInteger("Decoration.Blue", 50), 255);
- unsigned char colourA = min(Client::Ref().GetPrefInteger("Decoration.Alpha", 255), 255);
-
- SetColourSelectorColour(ui::Colour(colourR, colourG, colourB, colourA));
-}
-
-GameModel::~GameModel()
-{
- //Save to config:
- Client::Ref().SetPref("Renderer.ColourMode", (double)ren->GetColourMode());
-
- std::vector<unsigned int> displayModes = ren->GetDisplayMode();
- Client::Ref().SetPref("Renderer.DisplayModes", std::vector<double>(displayModes.begin(), displayModes.end()));
-
- std::vector<unsigned int> renderModes = ren->GetRenderMode();
- Client::Ref().SetPref("Renderer.RenderModes", std::vector<double>(renderModes.begin(), renderModes.end()));
-
- Client::Ref().SetPref("Decoration.Red", (int)colour.Red);
- Client::Ref().SetPref("Decoration.Green", (int)colour.Green);
- Client::Ref().SetPref("Decoration.Blue", (int)colour.Blue);
- Client::Ref().SetPref("Decoration.Alpha", (int)colour.Alpha);
-
- for(int i = 0; i < menuList.size(); i++)
- {
- delete menuList[i];
- }
- for(int i = 0; i < brushList.size(); i++)
- {
- delete brushList[i];
- }
- delete sim;
- delete ren;
- if(clipboard)
- delete clipboard;
- if(stamp)
- delete stamp;
- if(currentSave)
- delete currentSave;
- //if(activeTools)
- // delete[] activeTools;
+ notifyMenuListChanged();
+ notifyToolListChanged();
+ notifyActiveToolsChanged();
}
void GameModel::SetVote(int direction)