aboutsummaryrefslogtreecommitdiffstats
path: root/src/world.cpp
diff options
context:
space:
mode:
authordrumsetmonkey <abelleisle@roadrunner.com>2016-01-07 08:48:03 -0500
committerdrumsetmonkey <abelleisle@roadrunner.com>2016-01-07 08:48:03 -0500
commit42bd0ae7913af00ea5e330e45321e2bbe9e734d9 (patch)
tree0e420156d2cb71607a1df0aa541a02b0db35a6cb /src/world.cpp
parenta85accc62dab6d3edc4fb4ffb991ce4c537394f6 (diff)
parent81cf23371b94baf608c98d0dd248acfbbd5d2c70 (diff)
Merge branch 'master' of http://github.com/tcsullivan/gamedev
Diffstat (limited to 'src/world.cpp')
-rw-r--r--src/world.cpp83
1 files changed, 70 insertions, 13 deletions
diff --git a/src/world.cpp b/src/world.cpp
index 6fc84f8..a52e3f3 100644
--- a/src/world.cpp
+++ b/src/world.cpp
@@ -68,7 +68,7 @@ void World::save(std::ofstream *o){
unsigned int size,i;
size_t bgms = strlen(bgm) + 1;
char *bufptr;
-
+
o->write((char *)&lineCount, sizeof(unsigned int));
o->write((char *)line ,lineCount * sizeof(struct line_t));
o->write("GG" ,2 * sizeof(char));
@@ -77,25 +77,41 @@ void World::save(std::ofstream *o){
o->write((char *)&bgms , sizeof(size_t));
o->write(bgm ,strlen(bgm)+1);
o->write("NO" ,2 * sizeof(char));
-
- /*std::vector<NPC *> npc;
- std::vector<Structures *> build;
- std::vector<Mob *> mob;
- std::vector<Entity *> entity;
- std::vector<Object *> object;*/
-
size = npc.size();
+ o->write((char *)&size,sizeof(unsigned int));
for(i=0;i<size;i++){
bufptr = npc[i]->save(&size2);
o->write((char *)&size2,sizeof(unsigned int));
o->write(bufptr,size2);
+ delete[] bufptr;
+ }
+ size = build.size();
+ o->write((char *)&size,sizeof(unsigned int));
+ for(i=0;i<size;i++){
+ bufptr = build[i]->save();
+ o->write(bufptr,sizeof(StructuresSavePacket));
+ delete[] bufptr;
+ }
+ size = object.size();
+ o->write((char *)&size,sizeof(unsigned int));
+ for(i=0;i<size;i++){
+ bufptr = object[i]->save();
+ o->write(bufptr,sizeof(ObjectSavePacket));
+ delete[] bufptr;
+ }
+ size = mob.size();
+ o->write((char *)&size,sizeof(unsigned int));
+ for(i=0;i<size;i++){
+ bufptr = mob[i]->save();
+ o->write(bufptr,sizeof(MobSavePacket));
+ delete[] bufptr;
}
}
void World::load(std::ifstream *i){
- //unsigned int size;
+ unsigned int size,size2,j;
size_t bgms;
- char sig[2];
+ char sig[2],*buf;
i->read((char *)&lineCount,sizeof(unsigned int));
@@ -104,7 +120,7 @@ void World::load(std::ifstream *i){
i->read(sig,2 * sizeof(char));
if(strncmp(sig,"GG",2)){
- std::cout<<"world.dat corrupt"<<std::endl;
+ std::cout<<"world.dat corrupt: GG"<<std::endl;
exit(EXIT_FAILURE);
}
@@ -118,14 +134,55 @@ void World::load(std::ifstream *i){
i->read(bgm,bgms);
setBGM(bgm);
-
i->read(sig,2 * sizeof(char));
if(strncmp(sig,"NO",2)){
- std::cout<<"world.dat corrupt"<<std::endl;
+ std::cout<<"world.dat corrupt: NO"<<std::endl;
exit(EXIT_FAILURE);
}
+ i->read((char *)&size,sizeof(unsigned int));
+ for(j=0;j<size;j++){
+ i->read((char *)&size2,sizeof(unsigned int));
+ buf = new char[size2];
+ i->read(buf,size2);
+ npc.push_back(new NPC());
+ npc.back()->load(size2,buf);
+ entity.push_back(npc.back());
+ delete[] buf;
+ }
+ static StructuresSavePacket *ssp;
+ ssp = new StructuresSavePacket();
+ i->read((char *)&size,sizeof(unsigned int));
+ for(j=0;j<size;j++){
+ i->read((char *)ssp,sizeof(StructuresSavePacket));
+ build.push_back(new Structures());
+ build.back()->load((char *)ssp);
+ entity.push_back(build.back());
+ }
+ delete ssp;
+
+ static ObjectSavePacket *osp;
+ osp = new ObjectSavePacket();
+ i->read((char *)&size,sizeof(unsigned int));
+ for(j=0;j<size;j++){
+ i->read((char *)osp,sizeof(ObjectSavePacket));
+ object.push_back(new Object());
+ object.back()->load((char *)osp);
+ object.back()->reloadTexture();
+ entity.push_back(object.back());
+ }
+ delete osp;
+
+ static MobSavePacket *msp;
+ msp = new MobSavePacket();
+ i->read((char *)&size,sizeof(unsigned int));
+ for(j=0;j<size;j++){
+ i->read((char *)msp,sizeof(MobSavePacket));
+ mob.push_back(new Mob(0));
+ mob.back()->load((char *)msp);
+ entity.push_back(mob.back());
+ }
}
World::World(void){