diff --git a/CMakeLists.txt b/CMakeLists.txt index d355230..8de7704 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,13 +25,14 @@ find_package_handle_standard_args(LibSqlite3 DEFAULT_MSG LIBSQLITE3_LIBRARY LIB mark_as_advanced(LIBSQLITE3_INCLUDE_DIR LIBSQLITE3_LIBRARY ) - +find_package(Boost COMPONENTS filesystem) include_directories( "${PROJECT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" ${LIBSQLITE3_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ) set(mapper_HDRS @@ -53,6 +54,7 @@ add_executable(minetest_mapper target_link_libraries( minetest_mapper ${LIBSQLITE3_LIBRARIES} + ${Boost_LIBRARIES} gd z ) diff --git a/TileGenerator.cpp b/TileGenerator.cpp index cf90a85..559baed 100644 --- a/TileGenerator.cpp +++ b/TileGenerator.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include "TileGenerator.h" using namespace std; @@ -241,6 +242,9 @@ void TileGenerator::generate(const std::string &input, const std::string &output if (m_drawOrigin) { renderOrigin(); } + if (m_drawPlayers) { + renderPlayers(input); + } writeImage(output); } @@ -540,6 +544,48 @@ void TileGenerator::renderOrigin() gdImageArc(m_image, imageX, imageY, 12, 12, 0, 360, rgb2int(m_originColor.r, m_originColor.g, m_originColor.b)); } +void TileGenerator::renderPlayers(const std::string &inputPath) +{ + int color = rgb2int(m_playerColor.r, m_playerColor.g, m_playerColor.b); + + string playersPath = inputPath + "players"; + boost::filesystem::path path(playersPath.c_str()); + boost::filesystem::directory_iterator end_iter; + boost::filesystem::directory_iterator iter(path); + for (; iter != end_iter; ++iter) { + if (!boost::filesystem::is_directory(iter->status())) { + string path = iter->path().string(); + + ifstream in; + in.open(path.c_str(), ifstream::in); + string buffer; + string name; + string position; + while (getline(in, buffer)) { + if (buffer.find("name = ") == 0) { + name = buffer.substr(7); + } + else if (buffer.find("position = ") == 0) { + position = buffer.substr(12, buffer.length() - 13); + } + } + double x, y, z; + char comma; + istringstream positionStream(position, istringstream::in); + positionStream >> x; + positionStream >> comma; + positionStream >> y; + positionStream >> comma; + positionStream >> z; + int imageX = x / 10 - m_xMin * 16 + m_border; + int imageY = m_mapHeight - (z / 10 - m_zMin * 16) + m_border; + + gdImageArc(m_image, imageX, imageY, 5, 5, 0, 360, color); + gdImageString(m_image, gdFontGetMediumBold(), imageX + 2, imageY + 2, reinterpret_cast(const_cast(name.c_str())), color); + } + } +} + inline std::list TileGenerator::getZValueList() const { std::list zlist; diff --git a/TileGenerator.h b/TileGenerator.h index c5163ff..6a5ce29 100644 --- a/TileGenerator.h +++ b/TileGenerator.h @@ -99,6 +99,7 @@ private: void renderShading(int zPos); void renderScale(); void renderOrigin(); + void renderPlayers(const std::string &inputPath); void writeImage(const std::string &output); int getImageX(int val) const; int getImageY(int val) const;