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/simulation/Simulation.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/simulation/Simulation.cpp')
| -rw-r--r-- | src/simulation/Simulation.cpp | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp index f4586a4..8fb4394 100644 --- a/src/simulation/Simulation.cpp +++ b/src/simulation/Simulation.cpp @@ -12,7 +12,64 @@ #undef LUACONSOLE //#include "cat/LuaScriptHelper.h" -int Simulation::Load(unsigned char * data, int dataLength) +int Simulation::Load(GameSave * save) +{ + return Load(0, 0, save); +} + +int Simulation::Load(int x, int y, GameSave * save) +{ + for(int i = 0; i < NPART && i < save->particlesCount; i++) + { + parts[i] = save->particles[i]; + } + parts_lastActiveIndex = NPART-1; + for(int i = 0; i < save->signs.size() && signs.size() < MAXSIGNS; i++) + { + signs.push_back(save->signs[i]); + } + for(int x = 0; x < save->width/CELL; x++) + { + for(int y = 0; y < save->height/CELL; y++) + { + bmap[y][x] = save->blockMap[y][x]; + fvx[y][x] = save->fanVelX[y][x]; + fvy[y][x] = save->fanVelY[y][x]; + } + } + return 0; +} + +GameSave * Simulation::Save() +{ + Save(0, 0, XRES, YRES); +} + +GameSave * Simulation::Save(int x1, int y1, int x2, int y2) +{ + GameSave * newSave = new GameSave(abs(x2-x1), abs(y2-y1)); + + for(int i = 0; i < NPART; i++) + { + int x, y; + x = int(parts[i].x + 0.5f); + y = int(parts[i].y + 0.5f); + if(parts[i].type && x >= x1 && y >= y1 && x < x2 && y < y2) + { + *newSave << parts[i]; + } + } + + for(int i = 0; i < MAXSIGNS && i < signs.size(); i++) + { + if(signs[i].text.length() && signs[i].x >= x1 && signs[i].y >= y1 && signs[i].x < x2 && signs[i].y < y2) + { + *newSave << signs[i]; + } + } +} + +/*int Simulation::Load(unsigned char * data, int dataLength) { return SaveLoader::Load(data, dataLength, this, true, 0, 0); } @@ -30,7 +87,7 @@ unsigned char * Simulation::Save(int & dataLength) unsigned char * Simulation::Save(int x1, int y1, int x2, int y2, int & dataLength) { return SaveLoader::Build(dataLength, this, x1, y1, x2-x1, y2-y1); -} +}*/ void Simulation::clear_area(int area_x, int area_y, int area_w, int area_h) { |
