diff --git a/zone/map.cpp b/zone/map.cpp index 32c6564b4..f198dc1de 100644 --- a/zone/map.cpp +++ b/zone/map.cpp @@ -268,6 +268,14 @@ bool Map::CheckLoS(glm::vec3 myloc, glm::vec3 oloc) const { return !imp->rm->raycast((const RmReal*)&myloc, (const RmReal*)&oloc, nullptr, nullptr, nullptr); } +// returns true if outloc should be used +bool Map::FindClosestLoS(glm::vec3 myloc, glm::vec3 oloc, glm::vec3 &outloc) const { + if(!imp) + return false; + + return imp->rm->raycast((const RmReal*)&myloc, (const RmReal*)&oloc, (RmReal *)&outloc, nullptr, nullptr); +} + inline bool file_exists(const std::string& name) { std::ifstream f(name.c_str()); return f.good(); diff --git a/zone/map.h b/zone/map.h index 35b5baeda..162985a36 100644 --- a/zone/map.h +++ b/zone/map.h @@ -42,6 +42,7 @@ public: bool LineIntersectsZone(glm::vec3 start, glm::vec3 end, float step, glm::vec3 *result) const; bool LineIntersectsZoneNoZLeaps(glm::vec3 start, glm::vec3 end, float step_mag, glm::vec3 *result) const; bool CheckLoS(glm::vec3 myloc, glm::vec3 oloc) const; + bool FindClosestLoS(glm::vec3 myloc, glm::vec3 oloc, glm::vec3 &outloc) const; #ifdef USE_MAP_MMFS bool Load(std::string filename, bool force_mmf_overwrite = false);