diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-05 19:08:35 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-06-05 19:08:35 (GMT) |
| commit | 49dafbfd263957631116557ac4fa59429390ebaa (patch) | |
| tree | d33a60331bf704db792e481d81e6bf8229e7493e /src/game/GameModel.cpp | |
| parent | bc35d622adb0965652955b6517c17b19f41fd41f (diff) | |
| download | powder-49dafbfd263957631116557ac4fa59429390ebaa.zip powder-49dafbfd263957631116557ac4fa59429390ebaa.tar.gz | |
Use a different method for decoding saves with uncompressed object in memory for stamps and clipboard, also allows for transformation (rotation), missing failure states and code for loading it into a Simulation
Diffstat (limited to 'src/game/GameModel.cpp')
| -rw-r--r-- | src/game/GameModel.cpp | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/src/game/GameModel.cpp b/src/game/GameModel.cpp index ae3b191..08bd0ec 100644 --- a/src/game/GameModel.cpp +++ b/src/game/GameModel.cpp @@ -275,7 +275,8 @@ void GameModel::SetSave(Save * newSave) currentSave = newSave; if(currentSave) { - int returnVal = sim->Load(currentSave->GetData(), currentSave->GetDataLength()); + GameSave * newSave = new GameSave((char*)currentSave->GetData(), currentSave->GetDataLength()); + int returnVal = sim->Load(newSave); if(returnVal){ delete currentSave; currentSave = NULL; @@ -429,46 +430,49 @@ void GameModel::ClearSimulation() sim->clear_sim(); } -void GameModel::AddStamp(unsigned char * saveData, int saveSize) +void GameModel::SetStamp(Save * save) { + if(stamp) + delete stamp; + stamp = new GameSave((char*)save->GetData(), save->GetDataLength()); + notifyStampChanged(); +} + +void GameModel::AddStamp(GameSave * save) +{ + if(stamp) + delete stamp; + stamp = save; + + char * saveData; + int saveSize; + saveData = save->Serialise(saveSize); Save * tempSave = new Save(0, 0, 0, 0, "", ""); - tempSave->SetData(saveData, saveSize); + tempSave->SetData((unsigned char*)saveData, saveSize); Client::Ref().AddStamp(tempSave); delete tempSave; + + notifyClipboardChanged(); } -void GameModel::SetClipboard(unsigned char * saveData, int saveSize) +void GameModel::SetClipboard(GameSave * save) { if(clipboard) delete clipboard; - clipboard = new Save(0, 0, 0, 0, "", ""); - clipboard->SetData(saveData, saveSize); + clipboard = save; notifyClipboardChanged(); } -Save * GameModel::GetClipboard() +GameSave * GameModel::GetClipboard() { return clipboard; } -Save * GameModel::GetStamp() +GameSave * GameModel::GetStamp() { return stamp; } -void GameModel::SetStamp(Save * newStamp) -{ - if(stamp) - delete stamp; - if(newStamp) - { - stamp = new Save(*newStamp); - } - else - stamp = NULL; - notifyStampChanged(); -} - void GameModel::Log(string message) { consoleLog.push_front(message); |
