diff --git a/SurrealEngine/Engine.cpp b/SurrealEngine/Engine.cpp index 63d93fef..735367c1 100644 --- a/SurrealEngine/Engine.cpp +++ b/SurrealEngine/Engine.cpp @@ -158,7 +158,7 @@ void Engine::Run() { // To do: need to do something about that travel type and transfering of items - UnrealURL url(LevelInfo->URL, ClientTravelInfo.URL.ToString()); + UnrealURL url(LevelInfo->URL, ClientTravelInfo.URL); LogMessage("Client travel to " + url.ToString()); LoadMap(url); LoginPlayer(); diff --git a/SurrealEngine/UObject/UnrealURL.cpp b/SurrealEngine/UObject/UnrealURL.cpp index 3695ef3f..b47c479f 100644 --- a/SurrealEngine/UObject/UnrealURL.cpp +++ b/SurrealEngine/UObject/UnrealURL.cpp @@ -2,31 +2,18 @@ #include -UnrealURL::UnrealURL(const UnrealURL& base, const std::string& url) +UnrealURL::UnrealURL(const UnrealURL& baseURL, const UnrealURL& nextURL) { // To do: this also needs to be able to handle fully qualified URLs for network support - *this = base; + *this = baseURL; - size_t pos = url.find('?'); - if (pos == std::string::npos) - { - Map = url; - } - else - { - Map = url.substr(0, pos); + // Pass options from the nextURL to the base one + Map = nextURL.Map; + Portal = nextURL.Portal; - pos++; - while (pos < url.size()) - { - size_t endpos = url.find('?', pos); - if (endpos == std::string::npos) - endpos = url.size(); - AddOrReplaceOption(url.substr(pos, endpos - pos)); - pos = endpos + 1; - } - } + for (auto& option : nextURL.Options) + AddOrReplaceOption(option); // Unreal uses relative urls if (Map.size() > 8 && Map.substr(0, 8) == "..\\maps\\") @@ -185,10 +172,7 @@ std::string UnrealURL::GetOptions() const std::string UnrealURL::GetPortal() const { - if (!Portal.empty()) - return "#" + Portal; - else - return std::string(); + return Portal; } std::string UnrealURL::ToString() const diff --git a/SurrealEngine/UObject/UnrealURL.h b/SurrealEngine/UObject/UnrealURL.h index 6bd57e35..b0de9bac 100644 --- a/SurrealEngine/UObject/UnrealURL.h +++ b/SurrealEngine/UObject/UnrealURL.h @@ -6,7 +6,9 @@ class UnrealURL { public: UnrealURL() = default; - UnrealURL(const UnrealURL& base, const std::string& url); + // Constructs an UnrealURL by passing the options from nextURL to the baseURL + UnrealURL(const UnrealURL& baseURL, const UnrealURL& nextURL); + // Constructs an UnrealURL from a given parse-able string. UnrealURL(const std::string& urlString); void AddOrReplaceOption(const std::string& newvalue);