summaryrefslogtreecommitdiff
path: root/src/game/GameController.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/GameController.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/GameController.cpp')
-rw-r--r--src/game/GameController.cpp41
1 files changed, 21 insertions, 20 deletions
diff --git a/src/game/GameController.cpp b/src/game/GameController.cpp
index 7f852a6..9580d2c 100644
--- a/src/game/GameController.cpp
+++ b/src/game/GameController.cpp
@@ -172,7 +172,7 @@ void GameController::PlaceStamp(ui::Point position)
{
if(gameModel->GetStamp())
{
- gameModel->GetSimulation()->Load(position.X, position.Y, gameModel->GetStamp()->data, gameModel->GetStamp()->dataLength);
+ gameModel->GetSimulation()->Load(position.X, position.Y, gameModel->GetStamp());
gameModel->SetPaused(gameModel->GetPaused());
}
}
@@ -181,7 +181,7 @@ void GameController::PlaceClipboard(ui::Point position)
{
if(gameModel->GetClipboard())
{
- gameModel->GetSimulation()->Load(position.X, position.Y, gameModel->GetClipboard()->data, gameModel->GetClipboard()->dataLength);
+ gameModel->GetSimulation()->Load(position.X, position.Y, gameModel->GetClipboard());
gameModel->SetPaused(gameModel->GetPaused());
}
}
@@ -316,21 +316,18 @@ void GameController::ToolClick(int toolSelection, ui::Point point)
void GameController::StampRegion(ui::Point point1, ui::Point point2)
{
- int saveSize;
- unsigned char * saveData;
- saveData = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y, saveSize);
- if(saveData && saveSize)
- gameModel->AddStamp(saveData, saveSize);
+ GameSave * newSave;
+ newSave = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y);
+ if(newSave)
+ gameModel->AddStamp(newSave);
}
void GameController::CopyRegion(ui::Point point1, ui::Point point2)
{
- int saveSize;
- unsigned char * saveData;
- saveData = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y, saveSize);
-
- if(saveData && saveSize)
- gameModel->SetClipboard(saveData, saveSize);
+ GameSave * newSave;
+ newSave = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y);
+ if(newSave)
+ gameModel->SetClipboard(newSave);
}
bool GameController::MouseMove(int x, int y, int dx, int dy)
@@ -530,24 +527,25 @@ void GameController::OpenSaveWindow()
{
if(gameModel->GetUser().ID)
{
- int tempSaveLength;
- unsigned char * tempData = gameModel->GetSimulation()->Save(tempSaveLength);
- if(!tempData)
+ GameSave * tempSave = gameModel->GetSimulation()->Save();
+ if(!tempSave)
{
new ErrorMessage("Error", "Unable to build save.");
}
else
{
+ int dataSize;
+ unsigned char * tempData = (unsigned char*)tempSave->Serialise(dataSize);
if(gameModel->GetSave())
{
Save tempSave(*gameModel->GetSave());
- tempSave.SetData(tempData, tempSaveLength);
+ tempSave.SetData(tempData, dataSize);
ssave = new SSaveController(new SSaveCallback(this), tempSave);
}
else
- {
+ {
Save tempSave(0, 0, 0, 0, gameModel->GetUser().Username, "");
- tempSave.SetData(tempData, tempSaveLength);
+ tempSave.SetData(tempData, dataSize);
ssave = new SSaveController(new SSaveCallback(this), tempSave);
}
ui::Engine::Ref().ShowWindow(ssave->GetView());
@@ -585,7 +583,10 @@ void GameController::ClearSim()
void GameController::ReloadSim()
{
if(gameModel->GetSave() && gameModel->GetSave()->GetData())
- gameModel->GetSimulation()->Load(gameModel->GetSave()->GetData(), gameModel->GetSave()->GetDataLength());
+ {
+ GameSave * newSave = new GameSave((char*)gameModel->GetSave()->GetData(), gameModel->GetSave()->GetDataLength());
+ gameModel->GetSimulation()->Load(newSave);
+ }
}
std::string GameController::ElementResolve(int type)