diff options
Diffstat (limited to 'src/game/GameModel.cpp')
| -rw-r--r-- | src/game/GameModel.cpp | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index 0106dd7..2a9b69e 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -18,7 +18,8 @@ GameModel::GameModel(): currentUser(0, ""), currentSave(NULL), colourSelector(false), - clipboardData(NULL) + clipboard(NULL), + stamp(NULL) { sim = new Simulation(); ren = new Renderer(ui::Engine::Ref().g, sim); @@ -158,6 +159,10 @@ GameModel::~GameModel() } delete sim; delete ren; + if(clipboard) + delete clipboard; + if(stamp) + delete stamp; if(activeTools) delete activeTools; } @@ -414,23 +419,42 @@ void GameModel::ClearSimulation() void GameModel::AddStamp(unsigned char * saveData, int saveSize) { - //Do nothing - - //die alone + Save * tempSave = new Save(0, 0, 0, 0, "", ""); + tempSave->SetData(saveData, saveSize); + Client::Ref().AddStamp(tempSave); + delete tempSave; } void GameModel::SetClipboard(unsigned char * saveData, int saveSize) { - if(clipboardData) - free(clipboardData); - clipboardData = saveData; - clipboardSize = saveSize; + if(clipboard) + delete clipboard; + clipboard = new Save(0, 0, 0, 0, "", ""); + clipboard->SetData(saveData, saveSize); + notifyClipboardChanged(); +} + +Save * GameModel::GetClipboard() +{ + return clipboard; } -unsigned char * GameModel::GetClipboard(int & saveSize) +Save * GameModel::GetStamp() { - saveSize = clipboardSize; - return clipboardData; + return stamp; +} + +void GameModel::SetStamp(Save * newStamp) +{ + if(stamp) + delete stamp; + if(newStamp) + { + stamp = new Save(*newStamp); + } + else + stamp = NULL; + notifyStampChanged(); } void GameModel::notifyColourSelectorColourChanged() @@ -537,6 +561,14 @@ void GameModel::notifyZoomChanged() } } +void GameModel::notifyStampChanged() +{ + for(int i = 0; i < observers.size(); i++) + { + observers[i]->NotifyStampChanged(this); + } +} + void GameModel::notifyClipboardChanged() { for(int i = 0; i < observers.size(); i++) |
