mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-04 00:13:51 +00:00
Fix mount sounds, grey WMO meshes, taxi landing, tree animations, and classic dismount
- Per-family mount sounds (kodo, tallstrider, mechanostrider, etc.) detected from M2 model path - Skip WMO groups with SHOW_SKYBOX flag or all-untextured batches (grey mesh in Orgrimmar) - Freeze physics during taxi landing until terrain loads to prevent falling through void - Disable bone animations on tropical vegetation (palm, bamboo, banana, etc.) to fix wiggling - Snap player to final taxi waypoint on flight completion - Extract mount aura spell ID from classic UNIT_FIELD_AURAS for CMSG_CANCEL_AURA dismount - Increase /unstuck forward nudge to 5 units
This commit is contained in:
parent
b76527c2f7
commit
beb99bff3f
13 changed files with 525 additions and 217 deletions
|
|
@ -895,7 +895,23 @@ bool M2Renderer::loadModel(const pipeline::M2Model& model, uint32_t modelId) {
|
|||
(lowerName.find("seaweed") != std::string::npos) ||
|
||||
(lowerName.find("kelp") != std::string::npos) ||
|
||||
(lowerName.find("cattail") != std::string::npos) ||
|
||||
(lowerName.find("reed") != std::string::npos);
|
||||
(lowerName.find("reed") != std::string::npos) ||
|
||||
(lowerName.find("palm") != std::string::npos) ||
|
||||
(lowerName.find("bamboo") != std::string::npos) ||
|
||||
(lowerName.find("banana") != std::string::npos) ||
|
||||
(lowerName.find("coconut") != std::string::npos) ||
|
||||
(lowerName.find("canopy") != std::string::npos) ||
|
||||
(lowerName.find("hedge") != std::string::npos) ||
|
||||
(lowerName.find("cactus") != std::string::npos) ||
|
||||
(lowerName.find("leaf") != std::string::npos) ||
|
||||
(lowerName.find("leaves") != std::string::npos) ||
|
||||
(lowerName.find("stalk") != std::string::npos) ||
|
||||
(lowerName.find("corn") != std::string::npos) ||
|
||||
(lowerName.find("crop") != std::string::npos) ||
|
||||
(lowerName.find("hay") != std::string::npos) ||
|
||||
(lowerName.find("frond") != std::string::npos) ||
|
||||
(lowerName.find("algae") != std::string::npos) ||
|
||||
(lowerName.find("coral") != std::string::npos);
|
||||
bool treeLike = (lowerName.find("tree") != std::string::npos);
|
||||
foliageOrTreeLike = (foliageName || treeLike);
|
||||
bool hardTreePart =
|
||||
|
|
|
|||
|
|
@ -576,7 +576,7 @@ void Renderer::setCharacterFollow(uint32_t instanceId) {
|
|||
}
|
||||
}
|
||||
|
||||
void Renderer::setMounted(uint32_t mountInstId, uint32_t mountDisplayId, float heightOffset) {
|
||||
void Renderer::setMounted(uint32_t mountInstId, uint32_t mountDisplayId, float heightOffset, const std::string& modelPath) {
|
||||
mountInstanceId_ = mountInstId;
|
||||
mountHeightOffset_ = heightOffset;
|
||||
mountSeatAttachmentId_ = -1;
|
||||
|
|
@ -812,7 +812,7 @@ void Renderer::setMounted(uint32_t mountInstId, uint32_t mountDisplayId, float h
|
|||
// Notify mount sound manager
|
||||
if (mountSoundManager) {
|
||||
bool isFlying = taxiFlight_; // Taxi flights are flying mounts
|
||||
mountSoundManager->onMount(mountDisplayId, isFlying);
|
||||
mountSoundManager->onMount(mountDisplayId, isFlying, modelPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -400,9 +400,12 @@ bool WMORenderer::loadModel(const pipeline::WMOModel& model, uint32_t id) {
|
|||
}
|
||||
|
||||
groupRes.mergedBatches.reserve(batchMap.size());
|
||||
bool anyTextured = false;
|
||||
for (auto& [key, mb] : batchMap) {
|
||||
if (mb.hasTexture) anyTextured = true;
|
||||
groupRes.mergedBatches.push_back(std::move(mb));
|
||||
}
|
||||
groupRes.allUntextured = !anyTextured && !groupRes.mergedBatches.empty();
|
||||
}
|
||||
|
||||
// Copy portal data for visibility culling
|
||||
|
|
@ -1198,6 +1201,18 @@ void WMORenderer::render(const Camera& camera, const glm::mat4& view, const glm:
|
|||
for (uint32_t gi : dl.visibleGroups) {
|
||||
const auto& group = model.groups[gi];
|
||||
|
||||
// Skip groups with SHOW_SKYBOX flag (0x20000) — these are transparent
|
||||
// sky windows meant to show the skybox behind them, not solid geometry
|
||||
if (group.groupFlags & 0x20000) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Skip groups where ALL batches use the fallback white texture —
|
||||
// these are collision/placeholder/LOD shell groups with no visual data
|
||||
if (group.allUntextured) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// STORMWIND.WMO specific fix: LOD shell visibility control
|
||||
// Combination of distance culling + backface culling for best results
|
||||
bool isLODShell = false;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue