feat: WOT doodad/WMO placements, WOB materials, deduplicate loader

Architecture fixes for open format data fidelity:

- WOT now serializes full doodad/WMO placement arrays (positions,
  rotations, scale, flags, doodad sets) — was only storing counts,
  causing all placed objects to be lost on WOT round-trip
- WOT loader parses placements back into ADTTerrain for client rendering
- WOB Material struct added: preserves WMO material flags, shader type,
  and blend mode during WMO→WOB conversion (was geometry-only)
- WOB doodad rotation: quaternion→euler conversion instead of hardcoded
  zero (placed doodads inside buildings now retain their orientation)
- importOpen() deduplicated: delegates to pipeline::WoweeTerrainLoader
  instead of duplicating 100 lines of parsing code
This commit is contained in:
Kelsi 2026-05-05 14:44:46 -07:00
parent d00ddd1c73
commit ca15da5e9b
4 changed files with 100 additions and 110 deletions

View file

@ -18,11 +18,19 @@ struct WoweeBuilding {
glm::vec4 color; // vertex color/lighting
};
struct Material {
std::string texturePath;
uint32_t flags = 0;
uint32_t shader = 0;
uint32_t blendMode = 0;
};
struct Group {
std::string name;
std::vector<Vertex> vertices;
std::vector<uint32_t> indices;
std::vector<std::string> texturePaths;
std::vector<Material> materials;
glm::vec3 boundMin{0}, boundMax{0};
bool isOutdoor = false;
};