summaryrefslogtreecommitdiff
path: root/src/game/GameModel.cpp
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2013-03-22 14:14:17 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2013-03-22 14:14:17 (GMT)
commit9abe51526cac2634af0541c3de69834dd30e9f78 (patch)
tree6ae4deadfe00a83094b9d288d8c11d8ce823577a /src/game/GameModel.cpp
parent2c311b9a36a88fadd96f3d39acb1ab2590835d81 (diff)
downloadpowder-9abe51526cac2634af0541c3de69834dd30e9f78.zip
powder-9abe51526cac2634af0541c3de69834dd30e9f78.tar.gz
Move all GUI source files into gui/
Diffstat (limited to 'src/game/GameModel.cpp')
-rw-r--r--src/game/GameModel.cpp1151
1 files changed, 0 insertions, 1151 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp
deleted file mode 100644
index e687674..0000000
--- a/src/game/GameModel.cpp
+++ /dev/null
@@ -1,1151 +0,0 @@
-#include "interface/Engine.h"
-#include "GameModel.h"
-#include "GameView.h"
-#include "simulation/Simulation.h"
-#include "simulation/Air.h"
-#include "simulation/Tools.h"
-#include "graphics/Renderer.h"
-#include "interface/Point.h"
-#include "Brush.h"
-#include "EllipseBrush.h"
-#include "TriangleBrush.h"
-#include "BitmapBrush.h"
-#include "client/Client.h"
-#include "client/GameSave.h"
-#include "game/DecorationTool.h"
-#include "GameModelException.h"
-#include "QuickOptions.h"
-#include "Format.h"
-
-GameModel::GameModel():
- sim(NULL),
- ren(NULL),
- currentBrush(0),
- currentUser(0, ""),
- currentSave(NULL),
- currentFile(NULL),
- colourSelector(false),
- clipboard(NULL),
- stamp(NULL),
- placeSave(NULL),
- colour(255, 0, 0, 255),
- toolStrength(1.0f),
- activeColourPreset(-1),
- activeMenu(NULL),
- edgeMode(0)
-{
- sim = new Simulation();
- ren = new Renderer(ui::Engine::Ref().g, sim);
-
- activeTools = regularToolset;
-
- std::fill(decoToolset, decoToolset+3, (Tool*)NULL);
- std::fill(regularToolset, regularToolset+3, (Tool*)NULL);
-
- //Default render prefs
- std::vector<unsigned int> tempArray;
- tempArray.push_back(RENDER_FIRE);
- tempArray.push_back(RENDER_EFFE);
- tempArray.push_back(RENDER_BASC);
- ren->SetRenderMode(tempArray);
- tempArray.clear();
-
- ren->SetDisplayMode(tempArray);
-
- ren->SetColourMode(0);
-
- //Load config into renderer
- try
- {
- ren->SetColourMode(Client::Ref().GetPrefUInteger("Renderer.ColourMode", 0));
-
- vector<unsigned int> tempArray = Client::Ref().GetPrefUIntegerArray("Renderer.DisplayModes");
- if(tempArray.size())
- {
- std::vector<unsigned int> displayModes(tempArray.begin(), tempArray.end());
- ren->SetDisplayMode(displayModes);
- }
-
- tempArray = Client::Ref().GetPrefUIntegerArray("Renderer.RenderModes");
- if(tempArray.size())
- {
- std::vector<unsigned int> renderModes(tempArray.begin(), tempArray.end());
- ren->SetRenderMode(renderModes);
- }
-
- ren->gravityFieldEnabled = Client::Ref().GetPrefBool("Renderer.GravityField", false);
- ren->decorations_enable = Client::Ref().GetPrefBool("Renderer.Decorations", true);
- }
- catch(json::Exception & e)
- {
- }
-
- //Load config into simulation
- edgeMode = Client::Ref().GetPrefInteger("Simulation.EdgeMode", 0);
- sim->SetEdgeMode(edgeMode);
-
- //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 brush palette
- brushList.push_back(new EllipseBrush(ui::Point(4, 4)));
- brushList.push_back(new Brush(ui::Point(4, 4)));
- brushList.push_back(new TriangleBrush(ui::Point(4, 4)));
-
- //Load more from brushes folder
- std::vector<string> brushFiles = Client::Ref().DirectorySearch(BRUSH_DIR, "", ".ptb");
- for(int i = 0; i < brushFiles.size(); i++)
- {
- std::vector<unsigned char> brushData = Client::Ref().ReadFile(brushFiles[i]);
- if(!brushData.size())
- {
- std::cout << "Brushes: Skipping " << brushFiles[i] << ". Could not open" << std::endl;
- continue;
- }
- int dimension = std::sqrt((float)brushData.size());
- if(dimension * dimension != brushData.size())
- {
- std::cout << "Brushes: Skipping " << brushFiles[i] << ". Invalid bitmap size" << std::endl;
- continue;
- }
- brushList.push_back(new BitmapBrush(brushData, ui::Point(dimension, dimension)));
- }
-
- //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));
-
- colourPresets.push_back(ui::Colour(255, 255, 255));
- colourPresets.push_back(ui::Colour(0, 255, 255));
- colourPresets.push_back(ui::Colour(255, 0, 255));
- colourPresets.push_back(ui::Colour(255, 255, 0));
- colourPresets.push_back(ui::Colour(255, 0, 0));
- colourPresets.push_back(ui::Colour(0, 255, 0));
- colourPresets.push_back(ui::Colour(0, 0, 255));
-}
-
-GameModel::~GameModel()
-{
- //Save to config:
- Client::Ref().SetPref("Renderer.ColourMode", ren->GetColourMode());
-
- std::vector<unsigned int> displayModes = ren->GetDisplayMode();
- Client::Ref().SetPref("Renderer.DisplayModes", std::vector<unsigned int>(displayModes.begin(), displayModes.end()));
-
- std::vector<unsigned int> renderModes = ren->GetRenderMode();
- Client::Ref().SetPref("Renderer.RenderModes", std::vector<unsigned int>(renderModes.begin(), renderModes.end()));
-
- Client::Ref().SetPref("Renderer.GravityField", (bool)ren->gravityFieldEnabled);
- Client::Ref().SetPref("Renderer.Decorations", (bool)ren->decorations_enable);
-
- Client::Ref().SetPref("Simulation.EdgeMode", sim->edgeMode);
-
- 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(std::vector<Tool*>::iterator iter = extraElementTools.begin(), end = extraElementTools.end(); iter != end; ++iter)
- {
- delete *iter;
- }
- for(int i = 0; i < brushList.size(); i++)
- {
- delete brushList[i];
- }
- delete sim;
- delete ren;
- if(placeSave)
- delete placeSave;
- if(clipboard)
- delete clipboard;
- if(stamp)
- delete stamp;
- if(currentSave)
- delete currentSave;
- if(currentFile)
- delete currentFile;
- //if(activeTools)
- // delete[] activeTools;
-}
-
-void GameModel::UpdateQuickOptions()
-{
- for(std::vector<QuickOption*>::iterator iter = quickOptions.begin(), end = quickOptions.end(); iter != end; ++iter)
- {
- QuickOption * option = *iter;
- option->Update();
- }
-}
-
-void GameModel::BuildQuickOptionMenu(GameController * controller)
-{
- for(std::vector<QuickOption*>::iterator iter = quickOptions.begin(), end = quickOptions.end(); iter != end; ++iter)
- {
- delete *iter;
- }
- quickOptions.clear();
-
- quickOptions.push_back(new SandEffectOption(this));
- quickOptions.push_back(new DrawGravOption(this));
- quickOptions.push_back(new DecorationsOption(this));
- quickOptions.push_back(new NGravityOption(this));
- quickOptions.push_back(new AHeatOption(this));
- quickOptions.push_back(new ConsoleShowOption(this, controller));
-
- notifyQuickOptionsChanged();
- UpdateQuickOptions();
-}
-
-void GameModel::BuildMenus()
-{
- char lastMenu = 0;
- if(activeMenu)
- lastMenu = activeMenu->GetIcon();
-
- std::string activeToolIdentifiers[3];
- if(regularToolset[0])
- activeToolIdentifiers[0] = regularToolset[0]->GetIdentifier();
- if(regularToolset[1])
- activeToolIdentifiers[1] = regularToolset[1]->GetIdentifier();
- if(regularToolset[2])
- activeToolIdentifiers[2] = regularToolset[2]->GetIdentifier();
-
- //Empty current menus
- for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
- {
- delete *iter;
- }
- menuList.clear();
- toolList.clear();
-
- for(std::vector<Tool*>::iterator iter = extraElementTools.begin(), end = extraElementTools.end(); iter != end; ++iter)
- {
- delete *iter;
- }
- extraElementTools.clear();
- elementTools.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++)
- {
- if(sim->elements[i].Enabled)
- {
- Tool * tempTool;
- if(i == PT_LIGH)
- {
- tempTool = new Element_LIGH_Tool(i, sim->elements[i].Name, sim->elements[i].Description, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), sim->elements[i].Identifier, sim->elements[i].IconGenerator);
- }
- else if(i == PT_TESC)
- {
- tempTool = new Element_TESC_Tool(i, sim->elements[i].Name, sim->elements[i].Description, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), sim->elements[i].Identifier, sim->elements[i].IconGenerator);
- }
- else if(i == PT_STKM || i == PT_FIGH || i == PT_STKM2)
- {
- tempTool = new PlopTool(i, sim->elements[i].Name, sim->elements[i].Description, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), sim->elements[i].Identifier, sim->elements[i].IconGenerator);
- }
- else
- {
- tempTool = new ElementTool(i, sim->elements[i].Name, sim->elements[i].Description, PIXR(sim->elements[i].Colour), PIXG(sim->elements[i].Colour), PIXB(sim->elements[i].Colour), sim->elements[i].Identifier, sim->elements[i].IconGenerator);
- }
-
- if(sim->elements[i].MenuSection < SC_TOTAL && sim->elements[i].MenuVisible)
- {
- menuList[sim->elements[i].MenuSection]->AddTool(tempTool);
- }
- else
- {
- extraElementTools.push_back(tempTool);
- }
- elementTools.push_back(tempTool);
- }
- }
-
- //Build menu for GOL types
- for(int i = 0; i < NGOL; i++)
- {
- Tool * tempTool = new GolTool(i, sim->gmenu[i].name, std::string(sim->gmenu[i].description), PIXR(sim->gmenu[i].colour), PIXG(sim->gmenu[i].colour), PIXB(sim->gmenu[i].colour), "DEFAULT_PT_LIFE_"+std::string(sim->gmenu[i].name));
- menuList[SC_LIFE]->AddTool(tempTool);
- }
-
- //Build other menus from wall data
- for(int i = 0; i < UI_WALLCOUNT; i++)
- {
- Tool * tempTool = new WallTool(i, "", std::string(sim->wtypes[i].descs), PIXR(sim->wtypes[i].colour), PIXG(sim->wtypes[i].colour), PIXB(sim->wtypes[i].colour), "DEFAULT_WL_"+format::NumberToString<int>(i), sim->wtypes[i].textureGen);
- menuList[SC_WALL]->AddTool(tempTool);
- //sim->wtypes[i]
- }
-
- //Add special sign and prop tools
- menuList[SC_TOOL]->AddTool(new SampleTool(this));
- menuList[SC_TOOL]->AddTool(new SignTool());
- menuList[SC_TOOL]->AddTool(new PropertyTool());
- menuList[SC_TOOL]->AddTool(new WindTool(0, "WIND", "Create air movement", 64, 64, 64, "DEFAULT_UI_WIND"));
-
- //Build menu for simtools
- for(int i = 0; i < sim->tools.size(); i++)
- {
- Tool * tempTool;
- tempTool = new Tool(i, sim->tools[i]->Name, sim->tools[i]->Description, PIXR(sim->tools[i]->Colour), PIXG(sim->tools[i]->Colour), PIXB(sim->tools[i]->Colour), sim->tools[i]->Identifier);
- menuList[SC_TOOL]->AddTool(tempTool);
- }
-
- //Add decoration tools to menu
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendAdd, "ADD", "Colour blending: Add", 0, 0, 0, "DEFAULT_DECOR_ADD"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendRemove, "SUB", "Colour blending: Subtract", 0, 0, 0, "DEFAULT_DECOR_SUB"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendMultiply, "MUL", "Colour blending: Multiply", 0, 0, 0, "DEFAULT_DECOR_MUL"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendDivide, "DIV", "Colour blending: Divide" , 0, 0, 0, "DEFAULT_DECOR_DIV"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendSmudge, "SMDG", "Smudge colour", 0, 0, 0, "DEFAULT_DECOR_SMDG"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::BlendSet, "SET", "Set colour (No blending)", 0, 0, 0, "DEFAULT_DECOR_SET"));
- menuList[SC_DECO]->AddTool(new DecorationTool(DecorationTool::Remove, "CLR", "Clear any set decoration", 0, 0, 0, "DEFAULT_DECOR_CLR"));
- decoToolset[0] = GetToolFromIdentifier("DEFAULT_DECOR_SET");
- decoToolset[1] = GetToolFromIdentifier("DEFAULT_DECOR_CLR");
- decoToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE");
-
- //Set default tools
- regularToolset[0] = GetToolFromIdentifier("DEFAULT_PT_DUST");
- regularToolset[1] = GetToolFromIdentifier("DEFAULT_PT_NONE");
- regularToolset[2] = GetToolFromIdentifier("DEFAULT_UI_SAMPLE");
-
-
- if(activeToolIdentifiers[0].length())
- regularToolset[0] = GetToolFromIdentifier(activeToolIdentifiers[0]);
- if(activeToolIdentifiers[1].length())
- regularToolset[1] = GetToolFromIdentifier(activeToolIdentifiers[1]);
- if(activeToolIdentifiers[2].length())
- regularToolset[2] = GetToolFromIdentifier(activeToolIdentifiers[2]);
-
- lastTool = activeTools[0];
-
- //Set default menu
- activeMenu = menuList[SC_POWDERS];
-
- if(lastMenu)
- {
- for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
- {
- if((*iter)->GetIcon() == lastMenu)
- activeMenu = *iter;
- }
- }
-
- if(activeMenu)
- toolList = activeMenu->GetToolList();
- else
- toolList = std::vector<Tool*>();
-
- notifyMenuListChanged();
- notifyToolListChanged();
- notifyActiveToolsChanged();
- notifyLastToolChanged();
-}
-
-Tool * GameModel::GetToolFromIdentifier(std::string identifier)
-{
- for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
- {
- std::vector<Tool*> menuTools = (*iter)->GetToolList();
- for(std::vector<Tool*>::iterator titer = menuTools.begin(), tend = menuTools.end(); titer != tend; ++titer)
- {
- if(identifier == (*titer)->GetIdentifier())
- return *titer;
- }
- }
- return NULL;
-}
-
-void GameModel::SetEdgeMode(int edgeMode)
-{
- this->edgeMode = edgeMode;
- sim->SetEdgeMode(edgeMode);
-}
-
-int GameModel::GetEdgeMode()
-{
- return this->edgeMode;
-}
-
-std::deque<Snapshot*> GameModel::GetHistory()
-{
- return history;
-}
-void GameModel::SetHistory(std::deque<Snapshot*> newHistory)
-{
- history = newHistory;
-}
-
-void GameModel::SetVote(int direction)
-{
- if(currentSave)
- {
- RequestStatus status = Client::Ref().ExecVote(currentSave->GetID(), direction);
- if(status == RequestOkay)
- {
- currentSave->vote = direction;
- notifySaveChanged();
- }
- else
- {
- throw GameModelException("Could not vote: "+Client::Ref().GetLastError());
- }
- }
-}
-
-Brush * GameModel::GetBrush()
-{
- return brushList[currentBrush];
-}
-
-int GameModel::GetBrushID()
-{
- return currentBrush;
-}
-
-void GameModel::SetBrush(int i)
-{
- currentBrush = i%brushList.size();
- notifyBrushChanged();
-}
-
-void GameModel::AddObserver(GameView * observer){
- observers.push_back(observer);
-
- observer->NotifySimulationChanged(this);
- observer->NotifyRendererChanged(this);
- observer->NotifyPausedChanged(this);
- observer->NotifySaveChanged(this);
- observer->NotifyBrushChanged(this);
- observer->NotifyMenuListChanged(this);
- observer->NotifyToolListChanged(this);
- observer->NotifyUserChanged(this);
- observer->NotifyZoomChanged(this);
- observer->NotifyColourSelectorVisibilityChanged(this);
- observer->NotifyColourSelectorColourChanged(this);
- observer->NotifyColourPresetsChanged(this);
- observer->NotifyColourActivePresetChanged(this);
- observer->NotifyQuickOptionsChanged(this);
- observer->NotifyLastToolChanged(this);
- UpdateQuickOptions();
-}
-
-void GameModel::SetToolStrength(float value)
-{
- toolStrength = value;
-}
-
-float GameModel::GetToolStrength()
-{
- return toolStrength;
-}
-
-void GameModel::SetActiveMenu(Menu * menu)
-{
- for(int i = 0; i < menuList.size(); i++)
- {
- if(menuList[i]==menu)
- {
- activeMenu = menu;
- toolList = menu->GetToolList();
- notifyToolListChanged();
-
- if(menu == menuList[SC_DECO])
- {
- if(activeTools != decoToolset)
- {
- activeTools = decoToolset;
- notifyActiveToolsChanged();
- }
- }
- else
- {
- if(activeTools != regularToolset)
- {
- activeTools = regularToolset;
- notifyActiveToolsChanged();
- }
- }
- }
- }
-}
-
-vector<Tool*> GameModel::GetUnlistedTools()
-{
- return extraElementTools;
-}
-
-vector<Tool*> GameModel::GetToolList()
-{
- return toolList;
-}
-
-Menu * GameModel::GetActiveMenu()
-{
- return activeMenu;
-}
-
-Tool * GameModel::GetElementTool(int elementID)
-{
- std::cout << elementID << std::endl;
- for(std::vector<Tool*>::iterator iter = elementTools.begin(), end = elementTools.end(); iter != end; ++iter)
- {
- if((*iter)->GetToolID() == elementID)
- return *iter;
- }
- return NULL;
-}
-
-Tool * GameModel::GetActiveTool(int selection)
-{
- return activeTools[selection];
-}
-
-void GameModel::SetActiveTool(int selection, Tool * tool)
-{
- activeTools[selection] = tool;
- notifyActiveToolsChanged();
-}
-
-vector<QuickOption*> GameModel::GetQuickOptions()
-{
- return quickOptions;
-}
-
-vector<Menu*> GameModel::GetMenuList()
-{
- return menuList;
-}
-
-SaveInfo * GameModel::GetSave()
-{
- return currentSave;
-}
-
-void GameModel::SetSave(SaveInfo * newSave)
-{
- if(currentSave != newSave)
- {
- if(currentSave)
- delete currentSave;
- if(newSave == NULL)
- currentSave = NULL;
- else
- currentSave = new SaveInfo(*newSave);
- }
- if(currentFile)
- delete currentFile;
- currentFile = NULL;
-
- if(currentSave && currentSave->GetGameSave())
- {
- GameSave * saveData = currentSave->GetGameSave();
- SetPaused(saveData->paused | GetPaused());
- sim->gravityMode = saveData->gravityMode;
- sim->air->airMode = saveData->airMode;
- sim->legacy_enable = saveData->legacyEnable;
- sim->water_equal_test = saveData->waterEEnabled;
- if(saveData->gravityEnable)
- sim->grav->start_grav_async();
- else
- sim->grav->stop_grav_async();
- sim->SetEdgeMode(0);
- sim->clear_sim();
- ren->ClearAccumulation();
- sim->Load(saveData);
- }
- notifySaveChanged();
- UpdateQuickOptions();
-}
-
-SaveFile * GameModel::GetSaveFile()
-{
- return currentFile;
-}
-
-void GameModel::SetSaveFile(SaveFile * newSave)
-{
- if(currentFile != newSave)
- {
- if(currentFile)
- delete currentFile;
- if(newSave == NULL)
- currentFile = NULL;
- else
- currentFile = new SaveFile(*newSave);
- }
- if (currentSave)
- delete currentSave;
- currentSave = NULL;
-
- if(newSave && newSave->GetGameSave())
- {
- GameSave * saveData = newSave->GetGameSave();
- SetPaused(saveData->paused | GetPaused());
- sim->gravityMode = saveData->gravityMode;
- sim->air->airMode = saveData->airMode;
- sim->legacy_enable = saveData->legacyEnable;
- sim->water_equal_test = saveData->waterEEnabled;
- if(saveData->gravityEnable && !sim->grav->ngrav_enable)
- {
- sim->grav->start_grav_async();
- }
- else if(!saveData->gravityEnable && sim->grav->ngrav_enable)
- {
- sim->grav->stop_grav_async();
- }
- sim->SetEdgeMode(0);
- sim->clear_sim();
- ren->ClearAccumulation();
- sim->Load(saveData);
- }
-
- notifySaveChanged();
- UpdateQuickOptions();
-}
-
-Simulation * GameModel::GetSimulation()
-{
- return sim;
-}
-
-Renderer * GameModel::GetRenderer()
-{
- return ren;
-}
-
-User GameModel::GetUser()
-{
- return currentUser;
-}
-
-Tool * GameModel::GetLastTool()
-{
- return lastTool;
-}
-
-void GameModel::SetLastTool(Tool * newTool)
-{
- if(lastTool != newTool)
- {
- lastTool = newTool;
- notifyLastToolChanged();
- }
-}
-
-void GameModel::SetZoomEnabled(bool enabled)
-{
- ren->zoomEnabled = enabled;
- notifyZoomChanged();
-}
-
-bool GameModel::GetZoomEnabled()
-{
- return ren->zoomEnabled;
-}
-
-void GameModel::SetZoomPosition(ui::Point position)
-{
- ren->zoomScopePosition = position;
- notifyZoomChanged();
-}
-
-ui::Point GameModel::GetZoomPosition()
-{
- return ren->zoomScopePosition;
-}
-
-void GameModel::SetZoomWindowPosition(ui::Point position)
-{
- ren->zoomWindowPosition = position;
- notifyZoomChanged();
-}
-
-ui::Point GameModel::GetZoomWindowPosition()
-{
- return ren->zoomWindowPosition;
-}
-
-void GameModel::SetZoomSize(int size)
-{
- ren->zoomScopeSize = size;
- notifyZoomChanged();
-}
-
-int GameModel::GetZoomSize()
-{
- return ren->zoomScopeSize;
-}
-
-void GameModel::SetZoomFactor(int factor)
-{
- ren->ZFACTOR = factor;
- notifyZoomChanged();
-}
-
-int GameModel::GetZoomFactor()
-{
- return ren->ZFACTOR;
-}
-
-void GameModel::SetActiveColourPreset(int preset)
-{
- activeColourPreset = preset;
- notifyColourActivePresetChanged();
-}
-
-int GameModel::GetActiveColourPreset()
-{
- return activeColourPreset;
-}
-
-void GameModel::SetPresetColour(ui::Colour colour)
-{
- if(activeColourPreset >= 0 && activeColourPreset < colourPresets.size())
- {
- colourPresets[activeColourPreset] = colour;
- notifyColourPresetsChanged();
- }
-}
-
-std::vector<ui::Colour> GameModel::GetColourPresets()
-{
- return colourPresets;
-}
-
-void GameModel::SetColourSelectorVisibility(bool visibility)
-{
- if(colourSelector != visibility)
- {
- colourSelector = visibility;
- notifyColourSelectorVisibilityChanged();
- }
-}
-
-bool GameModel::GetColourSelectorVisibility()
-{
- return colourSelector;
-}
-
-void GameModel::SetColourSelectorColour(ui::Colour colour_)
-{
- colour = colour_;
- notifyColourSelectorColourChanged();
-
- vector<Tool*> tools = GetMenuList()[SC_DECO]->GetToolList();
- for(int i = 0; i < tools.size(); i++)
- {
- ((DecorationTool*)tools[i])->Red = colour.Red;
- ((DecorationTool*)tools[i])->Green = colour.Green;
- ((DecorationTool*)tools[i])->Blue = colour.Blue;
- ((DecorationTool*)tools[i])->Alpha = colour.Alpha;
- }
-}
-
-ui::Colour GameModel::GetColourSelectorColour()
-{
- return colour;
-}
-
-void GameModel::SetUser(User user)
-{
- currentUser = user;
- //Client::Ref().SetAuthUser(user);
- notifyUserChanged();
-}
-
-void GameModel::SetPaused(bool pauseState)
-{
- sim->sys_pause = pauseState?1:0;
- notifyPausedChanged();
-}
-
-bool GameModel::GetPaused()
-{
- return sim->sys_pause?true:false;
-}
-
-void GameModel::SetDecoration(bool decorationState)
-{
- ren->decorations_enable = decorationState?1:0;
- notifyDecorationChanged();
- UpdateQuickOptions();
- if (decorationState)
- SetInfoTip("Decorations Layer: On");
- else
- SetInfoTip("Decorations Layer: Off");
-}
-
-bool GameModel::GetDecoration()
-{
- return ren->decorations_enable?true:false;
-}
-
-void GameModel::SetAHeatEnable(bool aHeat)
-{
- sim->aheat_enable = aHeat;
- UpdateQuickOptions();
- if (aHeat)
- SetInfoTip("Ambient Heat: On");
- else
- SetInfoTip("Ambient Heat: Off");
-}
-
-bool GameModel::GetAHeatEnable()
-{
- return sim->aheat_enable;
-}
-
-void GameModel::ShowGravityGrid(bool showGrid)
-{
- ren->gravityFieldEnabled = showGrid;
- if (showGrid)
- SetInfoTip("Gravity Grid: On");
- else
- SetInfoTip("Gravity Grid: Off");
-}
-
-bool GameModel::GetGravityGrid()
-{
- return ren->gravityFieldEnabled;
-}
-
-void GameModel::FrameStep(int frames)
-{
- sim->framerender += frames;
-}
-
-void GameModel::ClearSimulation()
-{
- //Load defaults
- sim->gravityMode = 0;
- sim->air->airMode = 0;
- sim->legacy_enable = false;
- sim->water_equal_test = false;
- sim->SetEdgeMode(edgeMode);
-
- sim->clear_sim();
- ren->ClearAccumulation();
-
- notifySaveChanged();
- UpdateQuickOptions();
-}
-
-void GameModel::SetStamp(GameSave * save)
-{
- if(stamp != save)
- {
- if(stamp)
- delete stamp;
- if(save)
- stamp = new GameSave(*save);
- else
- stamp = NULL;
- }
-}
-
-void GameModel::SetPlaceSave(GameSave * save)
-{
- if(save != placeSave)
- {
- if(placeSave)
- delete placeSave;
- if(save)
- placeSave = new GameSave(*save);
- else
- placeSave = NULL;
- }
- notifyPlaceSaveChanged();
-}
-
-void GameModel::AddStamp(GameSave * save)
-{
- if(stamp)
- delete stamp;
- stamp = save;
- Client::Ref().AddStamp(save);
-}
-
-void GameModel::SetClipboard(GameSave * save)
-{
- if(clipboard)
- delete clipboard;
- clipboard = save;
-}
-
-GameSave * GameModel::GetClipboard()
-{
- return clipboard;
-}
-
-GameSave * GameModel::GetPlaceSave()
-{
- return placeSave;
-}
-
-GameSave * GameModel::GetStamp()
-{
- return stamp;
-}
-
-void GameModel::Log(string message)
-{
- consoleLog.push_front(message);
- if(consoleLog.size()>100)
- consoleLog.pop_back();
- notifyLogChanged(message);
-}
-
-deque<string> GameModel::GetLog()
-{
- return consoleLog;
-}
-
-std::vector<Notification*> GameModel::GetNotifications()
-{
- return notifications;
-}
-
-void GameModel::AddNotification(Notification * notification)
-{
- notifications.push_back(notification);
- notifyNotificationsChanged();
-}
-
-void GameModel::RemoveNotification(Notification * notification)
-{
- for(std::vector<Notification*>::iterator iter = notifications.begin(); iter != notifications.end(); ++iter)
- {
- if(*iter == notification)
- {
- delete *iter;
- notifications.erase(iter);
- break;
- }
- }
- notifyNotificationsChanged();
-}
-
-void GameModel::SetToolTip(std::string text)
-{
- toolTip = text;
- notifyToolTipChanged();
-}
-
-void GameModel::SetInfoTip(std::string text)
-{
- infoTip = text;
- notifyInfoTipChanged();
-}
-
-std::string GameModel::GetToolTip()
-{
- return toolTip;
-}
-
-std::string GameModel::GetInfoTip()
-{
- return infoTip;
-}
-
-void GameModel::notifyNotificationsChanged()
-{
- for(std::vector<GameView*>::iterator iter = observers.begin(); iter != observers.end(); ++iter)
- {
- (*iter)->NotifyNotificationsChanged(this);
- }
-}
-
-void GameModel::notifyColourPresetsChanged()
-{
- for(std::vector<GameView*>::iterator iter = observers.begin(); iter != observers.end(); ++iter)
- {
- (*iter)->NotifyColourPresetsChanged(this);
- }
-}
-
-void GameModel::notifyColourActivePresetChanged()
-{
- for(std::vector<GameView*>::iterator iter = observers.begin(); iter != observers.end(); ++iter)
- {
- (*iter)->NotifyColourActivePresetChanged(this);
- }
-}
-
-void GameModel::notifyColourSelectorColourChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyColourSelectorColourChanged(this);
- }
-}
-
-void GameModel::notifyColourSelectorVisibilityChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyColourSelectorVisibilityChanged(this);
- }
-}
-
-void GameModel::notifyRendererChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyRendererChanged(this);
- }
-}
-
-void GameModel::notifySaveChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifySaveChanged(this);
- }
-}
-
-void GameModel::notifySimulationChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifySimulationChanged(this);
- }
-}
-
-void GameModel::notifyPausedChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyPausedChanged(this);
- }
-}
-
-void GameModel::notifyDecorationChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- //observers[i]->NotifyPausedChanged(this);
- }
-}
-
-void GameModel::notifyBrushChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyBrushChanged(this);
- }
-}
-
-void GameModel::notifyMenuListChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyMenuListChanged(this);
- }
-}
-
-void GameModel::notifyToolListChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyToolListChanged(this);
- }
-}
-
-void GameModel::notifyActiveToolsChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyActiveToolsChanged(this);
- }
-}
-
-void GameModel::notifyUserChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyUserChanged(this);
- }
-}
-
-void GameModel::notifyZoomChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyZoomChanged(this);
- }
-}
-
-void GameModel::notifyPlaceSaveChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyPlaceSaveChanged(this);
- }
-}
-
-void GameModel::notifyLogChanged(string entry)
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyLogChanged(this, entry);
- }
-}
-
-void GameModel::notifyInfoTipChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyInfoTipChanged(this);
- }
-}
-
-void GameModel::notifyToolTipChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyToolTipChanged(this);
- }
-}
-
-void GameModel::notifyQuickOptionsChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyQuickOptionsChanged(this);
- }
-}
-
-void GameModel::notifyLastToolChanged()
-{
- for(int i = 0; i < observers.size(); i++)
- {
- observers[i]->NotifyLastToolChanged(this);
- }
-}