/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information * * 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 2 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 . */ #ifndef _INTERMEDIATE_VALUES_H #define _INTERMEDIATE_VALUES_H #include "TerrainBuilder.h" #include #include namespace MMAP { // this class gathers all debug info holding and output struct IntermediateValues { rcHeightfield* heightfield; rcCompactHeightfield* compactHeightfield; rcContourSet* contours; rcPolyMesh* polyMesh; rcPolyMeshDetail* polyMeshDetail; IntermediateValues() : heightfield(nullptr), compactHeightfield(nullptr), contours(nullptr), polyMesh(nullptr), polyMeshDetail(nullptr) {} IntermediateValues(IntermediateValues const&) = delete; IntermediateValues(IntermediateValues&& other) noexcept : heightfield(std::exchange(other.heightfield, nullptr)), compactHeightfield(std::exchange(other.compactHeightfield, nullptr)), contours(std::exchange(other.contours, nullptr)), polyMesh(std::exchange(other.polyMesh, nullptr)), polyMeshDetail(std::exchange(other.polyMeshDetail, nullptr)) { } ~IntermediateValues(); IntermediateValues& operator=(IntermediateValues const&) = delete; IntermediateValues& operator=(IntermediateValues&& other) noexcept { if (this != std::addressof(other)) { heightfield = std::exchange(other.heightfield, nullptr); compactHeightfield = std::exchange(other.compactHeightfield, nullptr); contours = std::exchange(other.contours, nullptr); polyMesh = std::exchange(other.polyMesh, nullptr); polyMeshDetail = std::exchange(other.polyMeshDetail, nullptr); } return *this; } void writeIV(boost::filesystem::path const& outputDirectory, std::string_view fileNameSuffix, uint32 mapID, uint32 tileX, uint32 tileY); static void debugWrite(FILE* file, rcHeightfield const* mesh); static void debugWrite(FILE* file, rcCompactHeightfield const* chf); static void debugWrite(FILE* file, rcContourSet const* cs); static void debugWrite(FILE* file, rcPolyMesh const* mesh); static void debugWrite(FILE* file, rcPolyMeshDetail const* mesh); void generateObjFile(boost::filesystem::path const& outputDirectory, std::string_view fileNameSuffix, uint32 mapID, uint32 tileX, uint32 tileY, MeshData const& meshData); }; } #endif