diff options
Diffstat (limited to 'src/world.cpp')
-rw-r--r-- | src/world.cpp | 50 |
1 files changed, 44 insertions, 6 deletions
diff --git a/src/world.cpp b/src/world.cpp index eb9f12e..9e891fb 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -118,6 +118,9 @@ void World::deleteEntities(void){ delete mob.back(); mob.pop_back(); } + while(!merchant.empty()){ + merchant.pop_back(); + } while(!npc.empty()){ delete npc.back(); npc.pop_back(); @@ -144,7 +147,6 @@ void World::deleteEntities(void){ delete village.back(); village.pop_back(); } - } World::~World(void){ @@ -950,7 +952,8 @@ void World::detect(Player *p){ */ //auto pl = std::async(&World::singleDetect,this,p); - std::thread(&World::singleDetect,this, p).detach(); + //std::thread(&World::singleDetect,this, p).detach(); + singleDetect(p); /* * Handle all remaining entities in this world. @@ -958,8 +961,8 @@ void World::detect(Player *p){ //LOOOOP: for(auto &e : entity) - std::thread(&World::singleDetect,this,e).detach(); - //hey->singleDetect(e); + //std::thread(&World::singleDetect,this,e).detach(); + singleDetect(e); for(auto &part : particles){ int l; unsigned int i; @@ -1075,6 +1078,14 @@ void World::addNPC(float x,float y){ entity.push_back(npc.back()); } +void World::addMerchant(float x, float y){ + merchant.push_back(new Merchant()); + merchant.back()->spawn(x,y); + + npc.push_back(merchant.back()); + entity.push_back(npc.back()); +} + void World::addObject(/*ITEM_ID i*/std::string in,const char *p, float x, float y){ object.push_back(new Object(in,p)); object.back()->spawn(x,y); @@ -1537,14 +1548,15 @@ World *loadWorldFromXMLNoSave(const char *path){ xml.LoadFile(currentXML); wxml = xml.FirstChildElement("World"); - vil = xml.FirstChildElement("World")->FirstChildElement("village"); if(wxml){ wxml = wxml->FirstChildElement(); + vil = xml.FirstChildElement("World")->FirstChildElement("village"); Indoor = false; tmp = new World(); }else if((wxml = xml.FirstChildElement("IndoorWorld"))){ wxml = wxml->FirstChildElement(); + vil = NULL; Indoor = true; tmp = new IndoorWorld(); } @@ -1644,8 +1656,34 @@ World *loadWorldFromXMLNoSave(const char *path){ (char*)vil->Attribute("texture"), ptr); - vptr->build.push_back(tmp->build.back()); + }else if(!strcmp(name, "stall")){ + if(!strcmp(vil->Attribute("type"),"market")){ + std::cout << "Market" << std::endl; + tmp->addStructure((BUILD_SUB)70, + vil->QueryFloatAttribute("x", &spawnx) != XML_NO_ERROR ? + randx : spawnx, + 100, + (char*)vil->Attribute("texture"), + ptr); + tmp->addMerchant(0,100); + if(!strcmp(name,"buy")){ + std::cout << "Buying"; + }else if(!strcmp(name,"sell")){ + std::cout << "Selling"; + } + strcpy(tmp->merchant.back()->name,"meme"); + + }else if(!strcmp(vil->Attribute("type"),"trader")){ + std::cout << "Trader" << std::endl; + tmp->addStructure((BUILD_SUB)71, + vil->QueryFloatAttribute("x", &spawnx) != XML_NO_ERROR ? + randx : spawnx, + 100, + (char*)vil->Attribute("texture"), + ptr); + } } + vptr->build.push_back(tmp->build.back()); if(vptr->build.back()->loc.x < vptr->start.x){ vptr->start.x = vptr->build.back()->loc.x; } |