Files
GTASource/game/audio/waveslotmanager.h
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

86 lines
2.4 KiB
C++

//
// audio/waveslotmanager.h
//
// Copyright (C) 1999-2006 Rockstar Games. All Rights Reserved.
//
#ifndef AUD_WAVESLOTMANAGER_H
#define AUD_WAVESLOTMANAGER_H
#include "atl/array.h"
#include "audiohardware/waveslot.h"
#include "audiodefines.h"
static const u32 AUD_WAVE_SLOT_ANY = 0xffffffff;
namespace rage
{
class audWaveSlot;
class audEntity;
}
struct audDynamicWaveSlot
{
audDynamicWaveSlot() :
waveSlot(NULL)
, slotName(0)
, slotPriority(0)
, loadedBankId(AUD_INVALID_BANK_ID)
, loadedBankType(0)
, refCount(0)
, timeLastUsed(0)
, delayTime(0.0f)
, loadPriority(naWaveLoadPriority::General)
{}
bool IsLoaded() const;
bool IsLoading() const;
atArray<u32> slotTypes;
atArray<audEntity*> registeredEntities;
audWaveSlot* waveSlot;
u32 slotName;
u32 slotPriority;
u32 loadedBankId;
u32 loadedBankType;
u32 refCount;
u32 timeLastUsed;
f32 delayTime;
naWaveLoadPriority::Priority loadPriority;
};
// ----------------------------------------------------------------
// Helper class to assist managing dynamically loaded banks
// ----------------------------------------------------------------
class audWaveSlotManager
{
public:
audWaveSlotManager();
~audWaveSlotManager() {};
u32 GetNumSlots() const;
u32 GetNumUsedSlots() const;
u32 GetNumLoadsInProgress() const;
bool AddWaveSlot(const char* slotName, const char* slotType, const u32 slotPriority = 0);
bool AddWaveSlot(const u32 slotNameHash, const u32 slotTypeHash, const u32 slotPriority = 0);
static void FreeWaveSlot(audDynamicWaveSlot*& slot, audEntity* entity = NULL);
void Update();
#if __BANK
void DebugDraw(f32 xOffset, f32 yOffset);
#endif
const audDynamicWaveSlot* GetWaveSlot(u32 index) const { return &m_dynamicWaveSlots[index]; }
audDynamicWaveSlot* LoadBank(const u32 bankId, const u32 slotType, bool allowBankShuffling = false, audEntity* entity = NULL, naWaveLoadPriority::Priority loadPriority = naWaveLoadPriority::General, f32 delayTime = 0.0f);
audDynamicWaveSlot* LoadBankForSound(const u32 soundNameHash, const u32 slotType, bool allowBankShuffling = false, audEntity* entity = NULL, naWaveLoadPriority::Priority loadPriority = naWaveLoadPriority::General, f32 delayTime = 0.0f);
private:
void RegisterEntity(audEntity* entity, u32 slotIndex);
private:
atArray<audDynamicWaveSlot> m_dynamicWaveSlots;
};
#endif // AUD_WAVESLOTMANAGER_H