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

@ -14,6 +14,7 @@
#include "rendering/vk_frame_data.hpp"
#include "rendering/vk_utils.hpp"
#include "rendering/sky_system.hpp"
#include "pipeline/custom_zone_discovery.hpp"
namespace wowee {
namespace core { class Window; }
@ -188,6 +189,8 @@ public:
game::ZoneManager* getZoneManager() { return zoneManager.get(); }
LightingManager* getLightingManager() { return lightingManager.get(); }
const std::vector<pipeline::CustomZoneInfo>& getCustomZones() const { return customZones_; }
private:
void runDeferredWorldInitStep(float deltaTime);
@ -267,6 +270,7 @@ private:
void renderShadowPass();
glm::mat4 computeLightSpaceMatrix();
std::vector<pipeline::CustomZoneInfo> customZones_;
pipeline::AssetManager* cachedAssetManager = nullptr;
// Spell visual effects — owned SpellVisualSystem (extracted from Renderer §4.4)

View file

@ -201,6 +201,8 @@ public:
* @param mapName Map name (e.g., "Azeroth", "Kalimdor")
*/
void setMapName(const std::string& mapName) { this->mapName = mapName; }
bool isCustomZone() const { return isCustomZone_; }
void setCustomZone(bool custom) { isCustomZone_ = custom; }
/**
* Load a single tile
@ -352,6 +354,7 @@ private:
float timeSinceLastUpdate = 0.0f;
float proactiveStreamTimer_ = 0.0f;
bool taxiStreamingMode_ = false;
bool isCustomZone_ = false;
// Tile size constants (WoW ADT specifications)
// A tile (ADT) = 16x16 chunks = 533.33 units across