diff options
author | drumsetmonkey <abelleisle@roadrunner.com> | 2016-01-13 07:53:55 -0500 |
---|---|---|
committer | drumsetmonkey <abelleisle@roadrunner.com> | 2016-01-13 07:53:55 -0500 |
commit | 5ec498c3e583a8fe18fdc9fec683df8c2541b28c (patch) | |
tree | 5e01d33ac4b488e11a503cee835d5e53bd4360bc /src | |
parent | 23a4b0cc3ab09d58127a73b12c43aff37e5056ef (diff) | |
parent | 9765c6303b763a60a2d917fc3c334b30e0fbbcfa (diff) |
Ass
Diffstat (limited to 'src')
-rw-r--r-- | src/common.cpp | 2 | ||||
-rw-r--r-- | src/entities.cpp | 4 | ||||
-rw-r--r-- | src/gameplay.cpp | 54 | ||||
-rw-r--r-- | src/ui.cpp | 13 | ||||
-rw-r--r-- | src/world.cpp | 56 |
5 files changed, 93 insertions, 36 deletions
diff --git a/src/common.cpp b/src/common.cpp index ead2dc3..84515c3 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -10,6 +10,8 @@ #include <vector> #endif // __WIN32__ +void *NULLPTR = NULL; + #ifndef __WIN32__ unsigned int millis(void){ diff --git a/src/entities.cpp b/src/entities.cpp index abb1427..817a1b0 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -681,8 +681,6 @@ char *Structures::save(void){ esp = baseSave(); memcpy(&ssp->esp,esp,sizeof(EntitySavePacket)); delete[] esp; - ssp->inWorld = inWorld; - ssp->inside = inside; ssp->bsubtype = bsubtype; return (char *)ssp; } @@ -690,8 +688,6 @@ char *Structures::save(void){ void Structures::load(char *s){ StructuresSavePacket *ssp = (StructuresSavePacket *)s; baseLoad((char *)&ssp->esp); - inWorld = ssp->inWorld; - inside = ssp->inside; bsubtype = ssp->bsubtype; } diff --git a/src/gameplay.cpp b/src/gameplay.cpp index 55161f9..d647270 100644 --- a/src/gameplay.cpp +++ b/src/gameplay.cpp @@ -153,8 +153,12 @@ void initEverything(void){ const char *name; std::vector<std::string> xmlFiles; static char *file; + + static bool Indoor = false; bool dialog; float spawnx; + World **yoyo;//,**yoyo2; + XMLDocument xml; XMLElement *wxml; @@ -181,9 +185,17 @@ void initEverything(void){ std::cout<<std::endl<<"Loading "<<file<<" ..."<<std::endl<<std::endl; xml.LoadFile(file); - wxml = xml.FirstChildElement("World")->FirstChildElement(); + wxml = xml.FirstChildElement("World");//->FirstChildElement(); - earth.push_back(new World()); + if(wxml){ + wxml = wxml->FirstChildElement(); + earth.push_back(new World()); + Indoor = false; + }else if((wxml = xml.FirstChildElement("IndoorWorld"))){ + wxml = wxml->FirstChildElement(); + earth.push_back(new IndoorWorld()); + Indoor = true; + } for(auto &l : earthlnk){ if(!strcmp(file+4,l.name)){ @@ -209,12 +221,28 @@ void initEverything(void){ break; } } + }else if(Indoor && !strcmp(name,"link") && wxml->Attribute("outside")){ + for(auto &l : earthlnk){ + if(!strcmp(l.name,wxml->Attribute("outside"))){ + for(auto &b : l.ptr->build){ + if(*b->inside == earth.back()){ + ((IndoorWorld *)*b->inside)->outside = l.ptr; + } + } + break; + } + } }else if(!strcmp(name,"style")){ earth.back()->setBackground((WORLD_BG_TYPE)wxml->UnsignedAttribute("background")); earth.back()->setBGM(wxml->Attribute("bgm")); }else if(!strcmp(name,"generation")){ if(!strcmp(wxml->Attribute("type"),"Random")){ - earth.back()->generate(wxml->UnsignedAttribute("width")); + if(Indoor) + ((IndoorWorld *)earth.back())->generate(wxml->UnsignedAttribute("width")); + else + earth.back()->generate(wxml->UnsignedAttribute("width")); + }else if(Indoor){ + abort(); } }else if(!strcmp(name,"mob")){ if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR) @@ -245,10 +273,24 @@ SKIP: npcd.push_back((NPCDialog){earth.back()->npc.back(),0}); } }else if(!strcmp(name,"structure")){ - /*if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR) - earth.back()->addStructure((getRand() % earth.back()->getTheWidth() / 2.0f,100); + if(wxml->Attribute("inside")){ + for(auto &l : earthlnk){ + if(!strcmp(l.name,wxml->Attribute("inside"))){ + yoyo = &l.ptr; + break; + } + } + } + /*for(auto &l : earthlnk){ + if(!strcmp(file+4,l.name)){ + yoyo2 = &l.ptr; + break; + } + }*/ + if(wxml->QueryFloatAttribute("x",&spawnx) != XML_NO_ERROR) + earth.back()->addStructure((BUILD_SUB)wxml->UnsignedAttribute("type"),getRand() % earth.back()->getTheWidth() / 2.0f,100,yoyo);//,yoyo2); else - earth.back()->addNPC(wxml->FloatAttribute("x"),wxml->FloatAttribute("y"));*/ + earth.back()->addStructure((BUILD_SUB)wxml->UnsignedAttribute("type"),spawnx,wxml->FloatAttribute("y"),yoyo);//,yoyo2); } wxml = wxml->NextSiblingElement(); @@ -718,8 +718,9 @@ DONE: //delete &tmp; toggleBlackFast(); } - }else + }else{ currentWorld=currentWorld->goInsideStructure(player); + } break; case SDLK_i: currentWorld=currentWorld->goWorldBack(player); // Go back a layer if possible @@ -823,19 +824,19 @@ DONE: currentWorld->addLight({player->loc.x + SCREEN_WIDTH/2, player->loc.y},{1.0f,1.0f,1.0f}); break; case SDLK_g: - currentWorld->addStructure(LAMP_POST, player->loc.x, player->loc.y, currentWorld); + //currentWorld->addStructure(LAMP_POST, player->loc.x, player->loc.y, currentWorld); break; case SDLK_h: - currentWorld->addStructure(TOWN_HALL, player->loc.x, player->loc.y, currentWorld); + //currentWorld->addStructure(TOWN_HALL, player->loc.x, player->loc.y, currentWorld); break; case SDLK_j: - currentWorld->addStructure(FOUNTAIN, player->loc.x, player->loc.y, currentWorld); + //currentWorld->addStructure(FOUNTAIN, player->loc.x, player->loc.y, currentWorld); break; case SDLK_v: - currentWorld->addVillage(player->loc.x, player->loc.y, 5, 10, 100, currentWorld); + //currentWorld->addVillage(player->loc.x, player->loc.y, 5, 10, 100, currentWorld); break; case SDLK_b: - currentWorld->addStructure(FIRE_PIT, player->loc.x, player->loc.y, currentWorld); + currentWorld->addStructure(FIRE_PIT, player->loc.x, player->loc.y, NULL); break; case SDLK_F12: std::cout << "Took screenshot" << std::endl; diff --git a/src/world.cpp b/src/world.cpp index e56720d..58606e5 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -185,8 +185,6 @@ void World::load(std::ifstream *i){ } } -void *NULLPTR = NULL; - World::World(void){ bgm = NULL; @@ -426,11 +424,12 @@ void World::update(Player *p,unsigned int delta){ else if(e->vel.x > 0)e->left = false; } } - uint oh = 0; for(auto &pa : particles){ if(pa->kill(deltaTime)){ //delete pa; - particles.erase(particles.begin()+oh); + //particles.erase(particles.begin()+oh); + std::cout << pa.duration; + std::cout << particles[oh].duration; }else if(pa->canMove){ pa->loc.y += pa->vely * deltaTime; pa->loc.x += pa->velx * deltaTime; @@ -444,8 +443,8 @@ void World::update(Player *p,unsigned int delta){ } } } - }oh++; - }oh=0; + } + } if(ui::dialogImportant){ Mix_FadeOutMusic(2000); @@ -1049,7 +1048,7 @@ LOOOOP: part->velx = 0; part->canMove = false; }else{ - if(!part->gravity && part->vely > -2)part->vely-=.003 * deltaTime; + if(part->gravity && part->vely > -2)part->vely-=.003 * deltaTime; } what++; }what=0; @@ -1058,22 +1057,38 @@ LOOOOP: goto LOOOOP; } } -void World::addStructure(BUILD_SUB sub, float x,float y,World *inside){ +void World::addStructure(BUILD_SUB sub, float x,float y,World **inside){//,World **outside){ build.push_back(new Structures()); build.back()->spawn(sub,x,y,this); build.back()->inWorld=this; - build.back()->inside = (World *)inside; - ((IndoorWorld *)inside)->outside = this; + build.back()->inside = inside; + //std::cout<<"yo"<<std::endl; + + +// void * |void ** - *|void ** | void ** + //((IndoorWorld *)inside[0])->outside = outside; + + + //std::cout<<"yo"<<std::endl; entity.push_back(build.back()); } -void World::addVillage(int x, int y, int bCount, int npcMin, int npcMax,World *inside){ +void World::addVillage(int bCount, int npcMin, int npcMax,World **inside){ std::cout << npcMin << ", " << npcMax << std::endl; - this->addStructure(TOWN_HALL, x,y, inside); - bCount--; - this->addStructure(LAMP_POST, x-3*HLINE,y, this); - this->addStructure(LAMP_POST, x+53*HLINE,y, this); + //int xwasd; + for(int i = 0; i < bCount; i++){ + addStructure(HOUSE,x_start + (i * 300),100,inside);//,(World **)&NULLPTR); + /*std::cout<<"1\n"; + HERE: + xwasd = (rand()%(int)x+1000*HLINE); + for(auto &bu : build){ + if(xwasd > bu->loc.x && xwasd < bu->loc.x+bu->width)goto HERE; + } + std::cout<<"2\n"; + addStructure(t,HOUSE,xwasd,y,inside); + std::cout<<"3\n";*/ + } } void World::addMob(int t,float x,float y){ mob.push_back(new Mob(t)); @@ -1189,24 +1204,25 @@ World *World::goInsideStructure(Player *p){ if(!thing.size()){ for(auto &b : build){ if(p->loc.x > b->loc.x && - p->loc.x + p->width < b->loc.x + b->width ){ + p->loc.x + p->width < b->loc.x + b->width && + *b->inside != this ){ thing.push_back(this); ui::toggleBlackFast(); ui::waitForCover(); ui::toggleBlackFast(); - return (World *)b->inside; + return (World *)*b->inside; } } }else{ for(auto &b : ((World *)thing.back())->build){ - if(b->inside == this){ - World *tmp = (World *)thing.back(); + if(*b->inside == this){ + //World *tmp = (World *)thing.back(); p->loc.x = b->loc.x + (b->width / 2) - (p->width / 2); thing.erase(thing.end()-1); ui::toggleBlackFast(); ui::waitForCover(); ui::toggleBlackFast(); - return tmp; + return ((IndoorWorld *)(*b->inside))->outside; } } } |