summaryrefslogtreecommitdiff
path: root/src/client/GameSave.h
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/client/GameSave.h
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/client/GameSave.h')
-rw-r--r--src/client/GameSave.h74
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