summaryrefslogtreecommitdiff
path: root/src/game/GameModel.cpp
diff options
context:
space:
mode:
authorSimon 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)
commit49dafbfd263957631116557ac4fa59429390ebaa (patch)
treed33a60331bf704db792e481d81e6bf8229e7493e /src/game/GameModel.cpp
parentbc35d622adb0965652955b6517c17b19f41fd41f (diff)
downloadpowder-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.cpp46
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);