diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2016-06-15 07:40:52 -0400 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2016-06-15 07:40:52 -0400 |
commit | 8f385ec7ac5a78bc3bf70170f4ab39ebcac8e32a (patch) | |
tree | 0ef69ad65035e35467ad56d7a1973abfc44894b9 /src | |
parent | 076c984c438bea2b34f8dd3a62bb31ebd2eb5282 (diff) |
world saving / new game script stuff
Diffstat (limited to 'src')
-rw-r--r-- | src/entities.cpp | 37 | ||||
-rw-r--r-- | src/world.cpp | 39 |
2 files changed, 55 insertions, 21 deletions
diff --git a/src/entities.cpp b/src/entities.cpp index 9f9a47c..90e03eb 100644 --- a/src/entities.cpp +++ b/src/entities.cpp @@ -7,6 +7,7 @@ #include <ui.hpp> #include <world.hpp> #include <gametime.hpp> +#include <brice.hpp> extern std::istream *names; @@ -638,6 +639,8 @@ void NPC::interact() { //have the npc's interact back to the player std::string nname; unsigned int idx; bool stop; + float tgt = 0.12345678f; + bool pmove = true, advance = false; loc.y += 5; @@ -707,8 +710,20 @@ COMMONAIFUNC: } // handle movement directs - if ((oxml = exml->FirstChildElement("gotox"))) - moveTo(std::stoi(oxml->GetText())); + if ((oxml = exml->FirstChildElement("gotox"))) { + moveTo((tgt = std::stoi(oxml->GetText()))); + if (oxml->QueryBoolAttribute("playerMove", &pmove) != XML_NO_ERROR) + pmove = true; + if (oxml->QueryBoolAttribute("advance", &advance) != XML_NO_ERROR) + advance = false; + } + + // handle attribute setting + if ((oxml = exml->FirstChildElement("set"))) { + do game::setValue(oxml->StrAttribute("id"), oxml->StrAttribute("value")); + while ((oxml = oxml->NextSiblingElement())); + game::briceUpdate(); + } // asdlfkj if (exml->GetText() == nullptr) @@ -760,6 +775,20 @@ OTHERSTUFF: } } + if (tgt != 0.12345678f) { + stop = canMove; + canMove = true; + while (targetx != 0.9112001f) { + if (!pmove) + player->speed = 0; + } + if (!pmove) { + pmove = true; + player->speed = 1; + } + canMove = stop; + } + // handle potential following dialogs if ((idx = exml->UnsignedAttribute("nextid"))) { dialogIndex = idx; @@ -781,6 +810,10 @@ OTHERSTUFF: } } + // advance if desired + if (advance) + goto COMMONAIFUNC; + // stop talking else { // error text? diff --git a/src/world.cpp b/src/world.cpp index 2eebc4a..450d956 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -797,7 +797,7 @@ void World::draw(Player *p) pc += 30; if (pc > pss) { // TODO resize the vector or something better than breaking - std::cout << "Whoops:" << pc << "," << partVec.size() << std::endl; + //std::cout << "Whoops:" << pc << "," << partVec.size() << std::endl; break; } particles[i].draw(pIndex); @@ -1150,12 +1150,11 @@ getStructurePos(int index) /** * Saves world data to a file. */ -void World::save(void) +void World::save(const std::string& s) { for (const auto &e : entity) e->saveToXML(); - - currentXMLDoc.SaveFile(currentXML.c_str(), false); + currentXMLDoc.SaveFile((xmlFolder + (s.empty() ? currentXML : s)).c_str(), false); } /** @@ -1285,7 +1284,6 @@ std::string World::getToRight(void) const WorldSwitchInfo World::goWorldLeft(Player *p) { World *tmp; - // check if player is at world edge if (!toLeft.empty() && p->loc.x < worldStart + HLINES(15)) { // load world (`toLeft` conditional confirms existance) @@ -1305,7 +1303,6 @@ WorldSwitchInfo World::goWorldLeft(Player *p) WorldSwitchInfo World::goWorldRight(Player *p) { World *tmp; - if (!toRight.empty() && p->loc.x + p->width > -worldStart - HLINES(15)) { tmp = loadWorldFromPtr(currentWorldToRight); return std::make_pair(tmp, vec2 {tmp->worldStart + (float)HLINES(15.0), GROUND_HEIGHT_MINIMUM} ); @@ -1851,24 +1848,28 @@ static bool loadedRight = false; World *loadWorldFromXML(std::string path) { if (!currentXML.empty()) - currentWorld->save(); + currentWorld->save(path); return loadWorldFromXMLNoSave(path); } World *loadWorldFromPtr(World *ptr) { - World *tmp = ptr; - - loadedLeft = true; - currentWorldToLeft = loadWorldFromXML(tmp->getToLeft()); - loadedLeft = false; - - loadedRight = true; - currentWorldToRight = loadWorldFromXML(tmp->getToRight()); - loadedRight = false; + currentWorld->save(); // save the current world to the current xml path + + if (ptr->getToLeft() == currentXML) { + currentWorldToLeft = currentWorld; + loadedRight = true; + currentWorldToRight = loadWorldFromXMLNoSave(ptr->getToRight()); + loadedRight = false; + } else if (ptr->getToRight() == currentXML) { + currentWorldToRight = currentWorld; + loadedLeft = true; + currentWorldToLeft = loadWorldFromXMLNoSave(ptr->getToLeft()); + loadedLeft = false; + } - return tmp; + return ptr; } /** @@ -2009,7 +2010,7 @@ loadWorldFromXMLNoSave(std::string path) { } // set spawn x for player - else if (name == "spawnx") { + else if (name == "spawnx" && !(loadedLeft | loadedRight)) { player->loc.x = std::stoi(wxml->GetText()); } @@ -2044,7 +2045,7 @@ loadWorldFromXMLNoSave(std::string path) { } // time setting - else if (name == "time") { + else if (name == "time" && !(loadedLeft | loadedRight)) { game::time::setTickCount(std::stoi(wxml->GetText())); } |