diff options
| author | Simon 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) |
| commit | 73c5082cbcdd3a986765723bd4182e45386ce766 (patch) | |
| tree | 99a0040636c9700a893044ebc36d949fa1da5873 /src/simulation | |
| parent | efddc12e5d2aadc5eee1927245ad38b9dee89aed (diff) | |
| download | powder-73c5082cbcdd3a986765723bd4182e45386ce766.zip powder-73c5082cbcdd3a986765723bd4182e45386ce766.tar.gz | |
Super, megaheavyweight thumbnail renderer
Diffstat (limited to 'src/simulation')
| -rw-r--r-- | src/simulation/SaveLoader.cpp | 51 | ||||
| -rw-r--r-- | src/simulation/SaveLoader.h | 16 | ||||
| -rw-r--r-- | src/simulation/Simulation.cpp | 8 |
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) |
