#pragma once #include "pipeline/adt_loader.hpp" #include #include #include namespace wowee { namespace editor { class ADTWriter { public: static bool write(const pipeline::ADTTerrain& terrain, const std::string& path); static std::vector serialize(const pipeline::ADTTerrain& terrain); // Write a minimal WDT file for a single-tile map static bool writeWDT(const std::string& mapName, int tileX, int tileY, const std::string& path); private: static void writeChunkHeader(std::vector& buf, uint32_t magic, uint32_t size); static void writeU32(std::vector& buf, uint32_t val); static void writeU16(std::vector& buf, uint16_t val); static void writeFloat(std::vector& buf, float val); static void writeBytes(std::vector& buf, const void* data, size_t size); static void patchSize(std::vector& buf, size_t headerOffset); static void writeMVER(std::vector& buf); static void writeMHDR(std::vector& buf, size_t& mhdrOffset); static void writeMTEX(std::vector& buf, const pipeline::ADTTerrain& terrain); static void writeMMDX(std::vector& buf, const pipeline::ADTTerrain& terrain); static void writeMWMO(std::vector& buf, const pipeline::ADTTerrain& terrain); static void writeMDDF(std::vector& buf, const pipeline::ADTTerrain& terrain); static void writeMODF(std::vector& buf, const pipeline::ADTTerrain& terrain); static void writeMCNK(std::vector& buf, const pipeline::MapChunk& chunk, int chunkX, int chunkY); }; } // namespace editor } // namespace wowee