summaryrefslogtreecommitdiff
path: root/src/simulation
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2012-04-03 13:07:39 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2012-04-03 13:07:39 (GMT)
commit73c5082cbcdd3a986765723bd4182e45386ce766 (patch)
tree99a0040636c9700a893044ebc36d949fa1da5873 /src/simulation
parentefddc12e5d2aadc5eee1927245ad38b9dee89aed (diff)
downloadpowder-73c5082cbcdd3a986765723bd4182e45386ce766.zip
powder-73c5082cbcdd3a986765723bd4182e45386ce766.tar.gz
Super, megaheavyweight thumbnail renderer
Diffstat (limited to 'src/simulation')
-rw-r--r--src/simulation/SaveLoader.cpp51
-rw-r--r--src/simulation/SaveLoader.h16
-rw-r--r--src/simulation/Simulation.cpp8
3 files changed, 55 insertions, 20 deletions
diff --git a/src/simulation/SaveLoader.cpp b/src/simulation/SaveLoader.cpp
index 97ab45e..2683a6f 100644
--- a/src/simulation/SaveLoader.cpp
+++ b/src/simulation/SaveLoader.cpp
@@ -10,7 +10,7 @@
//!TODO: enum for LoadSave return
-int SaveLoader::LoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y)
+int SaveLoader::Info(unsigned char * data, int dataLength, int & width, int & height)
{
unsigned char * saveData = data;
if (dataLength<16)
@@ -19,34 +19,65 @@ int SaveLoader::LoadSave(unsigned char * data, int dataLength, Simulation * sim,
}
if(saveData[0] == 'O' && saveData[1] == 'P' && saveData[2] == 'S')
{
- return OPSLoadSave(data, dataLength, sim);
+ return OPSInfo(data, dataLength, width, height);
}
else if((saveData[0]==0x66 && saveData[1]==0x75 && saveData[2]==0x43) || (saveData[0]==0x50 && saveData[1]==0x53 && saveData[2]==0x76))
{
- return PSVLoadSave(data, dataLength, sim, replace, x, y);
+ return PSVInfo(data, dataLength, width, height);
}
return 1;
}
-unsigned char * SaveLoader::BuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+int SaveLoader::Load(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y)
{
- unsigned char * temp = OPSBuildSave(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
+ unsigned char * saveData = data;
+ if (dataLength<16)
+ {
+ return 1;
+ }
+ if(saveData[0] == 'O' && saveData[1] == 'P' && saveData[2] == 'S')
+ {
+ return OPSLoad(data, dataLength, sim);
+ }
+ else if((saveData[0]==0x66 && saveData[1]==0x75 && saveData[2]==0x43) || (saveData[0]==0x50 && saveData[1]==0x53 && saveData[2]==0x76))
+ {
+ return PSVLoad(data, dataLength, sim, replace, x, y);
+ }
+ return 1;
+}
+
+unsigned char * SaveLoader::Build(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+{
+ unsigned char * temp = OPSBuild(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
if(!temp)
- temp = PSVBuildSave(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
+ temp = PSVBuild(dataLength, sim, orig_x0, orig_y0, orig_w, orig_h);
return temp;
}
-int SaveLoader::OPSLoadSave(unsigned char * data, int dataLength, Simulation * sim)
+int SaveLoader::OPSInfo(unsigned char * data, int dataLength, int & width, int & height)
+{
+ return 2;
+}
+
+
+int SaveLoader::OPSLoad(unsigned char * data, int dataLength, Simulation * sim)
+{
+ return 2;
+}
+
+unsigned char * SaveLoader::OPSBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
{
return 0;
}
-unsigned char * SaveLoader::OPSBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+int SaveLoader::PSVInfo(unsigned char * data, int dataLength, int & width, int & height)
{
+ width = data[6];
+ height = data[7];
return 0;
}
-int SaveLoader::PSVLoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x0, int y0)
+int SaveLoader::PSVLoad(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x0, int y0)
{
unsigned char * d = NULL, * c = data;
int q,i,j,k,x,y,p=0,*m=NULL, ver, pty, ty, legacy_beta=0, tempGrav = 0;
@@ -640,7 +671,7 @@ corrupt:
return 1;
}
-unsigned char * SaveLoader::PSVBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
+unsigned char * SaveLoader::PSVBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h)
{
unsigned char *d = (unsigned char*)calloc(1,3*(XRES/CELL)*(YRES/CELL)+(XRES*YRES)*15+MAXSIGNS*262), *c;
int i,j,x,y,p=0,*m=(int*)calloc(XRES*YRES, sizeof(int));
diff --git a/src/simulation/SaveLoader.h b/src/simulation/SaveLoader.h
index 1fb2143..2e92817 100644
--- a/src/simulation/SaveLoader.h
+++ b/src/simulation/SaveLoader.h
@@ -12,12 +12,16 @@
class SaveLoader {
public:
- static int LoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y);
- static unsigned char * BuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
- static int OPSLoadSave(unsigned char * data, int dataLength, Simulation * sim);
- static unsigned char * OPSBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
- static int PSVLoadSave(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y);
- static unsigned char * PSVBuildSave(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
+ static int Info(unsigned char * data, int dataLength, int & width, int & height);
+ static int Load(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y);
+ static unsigned char * Build(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
+private:
+ static int OPSInfo(unsigned char * data, int dataLength, int & width, int & height);
+ static int OPSLoad(unsigned char * data, int dataLength, Simulation * sim);
+ static unsigned char * OPSBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
+ static int PSVInfo(unsigned char * data, int dataLength, int & width, int & height);
+ static int PSVLoad(unsigned char * data, int dataLength, Simulation * sim, bool replace, int x, int y);
+ static unsigned char * PSVBuild(int & dataLength, Simulation * sim, int orig_x0, int orig_y0, int orig_w, int orig_h);
};
#endif /* SAVELOADER_H_ */
diff --git a/src/simulation/Simulation.cpp b/src/simulation/Simulation.cpp
index ec17454..7b1dca8 100644
--- a/src/simulation/Simulation.cpp
+++ b/src/simulation/Simulation.cpp
@@ -10,22 +10,22 @@
int Simulation::Load(unsigned char * data, int dataLength)
{
- return SaveLoader::LoadSave(data, dataLength, this, true, 0, 0);
+ return SaveLoader::Load(data, dataLength, this, true, 0, 0);
}
int Simulation::Load(int x, int y, unsigned char * data, int dataLength)
{
- return SaveLoader::LoadSave(data, dataLength, this, false, x, y);
+ return SaveLoader::Load(data, dataLength, this, false, x, y);
}
unsigned char * Simulation::Save(int & dataLength)
{
- return SaveLoader::BuildSave(dataLength, this, 0, 0, XRES, YRES);
+ return SaveLoader::Build(dataLength, this, 0, 0, XRES, YRES);
}
unsigned char * Simulation::Save(int x1, int y1, int x2, int y2, int & dataLength)
{
- return SaveLoader::BuildSave(dataLength, this, x1, y1, x2-x1, y2-y1);
+ 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)