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/client/GameSave.h | |
| 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/client/GameSave.h')
| -rw-r--r-- | src/client/GameSave.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/client/GameSave.h b/src/client/GameSave.h new file mode 100644 index 0000000..ccf3690 --- /dev/null +++ b/src/client/GameSave.h @@ -0,0 +1,74 @@ +// +// GameSave.h +// The Powder Toy +// +// Created by Simon Robertshaw on 04/06/2012. +// + +#ifndef The_Powder_Toy_GameSave_h +#define The_Powder_Toy_GameSave_h + +#include <vector> +#include "Misc.h" +#include "simulation/StorageClasses.h" + +class GameSave +{ +public: + enum ParseResult { OK = 0, Corrupt, WrongVersion, InvalidDimensions, InternalError, MissingElement }; + + int width, height; + + //Simulation data + //int ** particleMap; + int particlesCount; + Particle * particles; + char ** blockMap; + float ** fanVelX; + float ** fanVelY; + + //Simulation Options + bool waterEEnabled; + bool legacyEnable; + bool gravityEnable; + bool paused; + int gravityMode; + int airMode; + + //Signs + std::vector<sign> signs; + + GameSave(GameSave & save); + GameSave(int width, int height); + GameSave(char * data, int dataSize); + ~GameSave(); + void setSize(int width, int height); + char * Serialise(int & dataSize); + void Transform(matrix2d transform, vector2d translate); + + inline GameSave& operator << (Particle v) + { + if(particlesCount<NPART && v.type) + { + particles[particlesCount++] = v; + } + } + + inline GameSave& operator << (sign v) + { + if(signs.size()<MAXSIGNS && v.text.length()) + signs.push_back(v); + } + +private: + float * fanVelXPtr; + float * fanVelYPtr; + char * blockMapPtr; + + ParseResult readOPS(char * data, int dataLength); + ParseResult readPSv(char * data, int dataLength); + char * serialiseOPS(int & dataSize); + //serialisePSv(); +}; + +#endif |
