/* EQEmu: EQEmulator Copyright (C) 2001-2026 EQEmu Development Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #pragma once #include "zone/position.h" #include "zone/zone_config.h" #include #define BEST_Z_INVALID -99999 extern const ZoneConfig *Config; class Map { public: Map(); ~Map(); float FindBestZ(glm::vec3 &start, glm::vec3 *result) const; float FindClosestZ(glm::vec3 &start, glm::vec3 *result) const; float FindCeiling(glm::vec3 &start, glm::vec3 *result) const; float FindGround(glm::vec3 &start, glm::vec3 *result) const; 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 DoCollisionCheck(glm::vec3 myloc, glm::vec3 oloc, glm::vec3 &outnorm, float &distance) const; #ifdef USE_MAP_MMFS bool Load(std::string filename, bool force_mmf_overwrite = false); #else bool Load(const std::string& filename); #endif static Map *LoadMapFile(std::string file); private: void RotateVertex(glm::vec3 &v, float rx, float ry, float rz); void ScaleVertex(glm::vec3 &v, float sx, float sy, float sz); void TranslateVertex(glm::vec3 &v, float tx, float ty, float tz); bool LoadV1(FILE *f); bool LoadV2(FILE *f); #ifdef USE_MAP_MMFS bool LoadMMF(const std::string& map_file_name, bool force_mmf_overwrite); bool SaveMMF(const std::string& map_file_name, bool force_mmf_overwrite); #endif /*USE_MAP_MMFS*/ struct impl; impl *imp; };