50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <filesystem>
|
|
#include <regex>
|
|
#include <shared_mutex>
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
enum class AudioSelectionStrategy
|
|
{
|
|
INVALID = -1,
|
|
SEQUENTIAL,
|
|
RANDOM
|
|
};
|
|
|
|
class EventOverrideData
|
|
{
|
|
public:
|
|
EventOverrideData(const std::string&, const fs::path&);
|
|
EventOverrideData();
|
|
|
|
public:
|
|
bool LoadedSuccessfully = false;
|
|
|
|
std::vector<std::string> EventIds = {};
|
|
std::vector<std::pair<std::string, std::regex>> EventIdsRegex = {};
|
|
|
|
std::vector<std::pair<size_t, std::unique_ptr<uint8_t[]>>> Samples = {};
|
|
|
|
AudioSelectionStrategy Strategy = AudioSelectionStrategy::SEQUENTIAL;
|
|
size_t CurrentIndex = 0;
|
|
|
|
bool EnableOnLoopedSounds = false;
|
|
};
|
|
|
|
class CustomAudioManager
|
|
{
|
|
public:
|
|
bool TryLoadAudioOverride(const fs::path&);
|
|
void ClearAudioOverrides();
|
|
|
|
std::shared_mutex m_loadingMutex;
|
|
std::unordered_map<std::string, std::shared_ptr<EventOverrideData>> m_loadedAudioOverrides = {};
|
|
std::unordered_map<std::string, std::shared_ptr<EventOverrideData>> m_loadedAudioOverridesRegex = {};
|
|
};
|
|
|
|
extern CustomAudioManager g_CustomAudioManager;
|
|
|
|
void InitialiseMilesAudioHooks(HMODULE baseAddress); |