feat: complete client integration for all 6 open formats

- Wire WOB buildings into WMO render pipeline (loads→converts→renders)
- Implement JSON DBC loading in DBCFile::loadJSON() with nlohmann/json
- Wire JSON DBC override into AssetManager (custom_zones/output scan)
- Add WMO→WOB conversion with full geometry (fromWMO)
- Replace placeholder WOB export with real WMO→WOB conversion in editor
- Add --convert-wmo CLI flag for batch WMO→WOB conversion
- Store discovered custom zones on Renderer with getCustomZones() accessor
- Add isCustomZone_ member to TerrainManager

All 6 Blizzard format replacements now fully load in the client:
  ADT→WOT/WHM, WDT→zone.json, BLP→PNG, DBC→JSON, M2→WOM, WMO→WOB
This commit is contained in:
Kelsi 2026-05-05 12:41:19 -07:00
parent d8f2388635
commit 4fc0361f7a
11 changed files with 271 additions and 47 deletions

View file

@ -1887,13 +1887,11 @@ bool Renderer::initializeRenderers(pipeline::AssetManager* assetManager, const s
LOG_INFO("Initializing renderers for map: ", mapName);
// Scan for custom zones on first initialization
static bool customZonesScanned = false;
if (!customZonesScanned) {
customZonesScanned = true;
auto customZones = pipeline::CustomZoneDiscovery::scan({"custom_zones", "output"});
if (!customZones.empty()) {
if (customZones_.empty()) {
customZones_ = pipeline::CustomZoneDiscovery::scan({"custom_zones", "output"});
if (!customZones_.empty()) {
LOG_INFO("=== Custom Zones Available ===");
for (const auto& z : customZones) {
for (const auto& z : customZones_) {
LOG_INFO(" ", z.name, " (", z.directory, ")",
z.hasCreatures ? " [NPCs]" : "",
z.hasQuests ? " [Quests]" : "");