mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
Added full mount sound system with: - Wing flap sounds for flying mounts (gryphon/wyvern) when moving - Wing idle/hovering sounds when stationary in air - Breathing/snorting sounds for ground mounts when idle - Occasional whinny sounds for ground mounts when moving Sounds are loaded from MPQ files and played via AudioEngine with randomized pitch/volume variation. Mount sound manager tracks mount type, movement state, and flying state to play appropriate ambient sounds at natural intervals. Updated setMounted() to accept creature display ID and notify the mount sound manager, which uses display ID ranges to detect mount type (flying vs ground).
75 lines
1.9 KiB
C++
75 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <cstdint>
|
|
#include <vector>
|
|
#include <chrono>
|
|
|
|
namespace wowee {
|
|
namespace pipeline { class AssetManager; }
|
|
|
|
namespace audio {
|
|
|
|
enum class MountType {
|
|
NONE,
|
|
GROUND, // Horse, wolf, raptor, etc.
|
|
FLYING, // Griffin, wyvern, drake, etc.
|
|
SWIMMING // Sea turtle, etc.
|
|
};
|
|
|
|
struct MountSample {
|
|
std::string path;
|
|
std::vector<uint8_t> data;
|
|
};
|
|
|
|
class MountSoundManager {
|
|
public:
|
|
MountSoundManager();
|
|
~MountSoundManager();
|
|
|
|
bool initialize(pipeline::AssetManager* assets);
|
|
void shutdown();
|
|
void update(float deltaTime);
|
|
|
|
// Called when mounting/dismounting
|
|
void onMount(uint32_t creatureDisplayId, bool isFlying);
|
|
void onDismount();
|
|
|
|
// Update movement state
|
|
void setMoving(bool moving);
|
|
void setFlying(bool flying);
|
|
void setGrounded(bool grounded);
|
|
|
|
bool isMounted() const { return mounted_; }
|
|
void setVolumeScale(float scale) { volumeScale_ = scale; }
|
|
|
|
private:
|
|
MountType detectMountType(uint32_t creatureDisplayId) const;
|
|
void updateMountSounds();
|
|
void stopAllMountSounds();
|
|
void loadMountSounds();
|
|
bool loadSound(const std::string& path, MountSample& sample);
|
|
|
|
pipeline::AssetManager* assetManager_ = nullptr;
|
|
bool mounted_ = false;
|
|
bool moving_ = false;
|
|
bool flying_ = false;
|
|
MountType currentMountType_ = MountType::NONE;
|
|
uint32_t currentDisplayId_ = 0;
|
|
float volumeScale_ = 1.0f;
|
|
|
|
// Mount sound samples (loaded from MPQ)
|
|
std::vector<MountSample> wingFlapSounds_;
|
|
std::vector<MountSample> wingIdleSounds_;
|
|
std::vector<MountSample> horseBreathSounds_;
|
|
std::vector<MountSample> horseMoveSounds_;
|
|
|
|
// Sound state tracking
|
|
bool playingMovementSound_ = false;
|
|
bool playingIdleSound_ = false;
|
|
std::chrono::steady_clock::time_point lastSoundUpdate_;
|
|
float soundLoopTimer_ = 0.0f;
|
|
};
|
|
|
|
} // namespace audio
|
|
} // namespace wowee
|