104 lines
3.8 KiB
C++
104 lines
3.8 KiB
C++
//========= Copyright Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $Workfile: $
|
|
// $Date: $
|
|
// $NoKeywords: $
|
|
//=============================================================================//
|
|
|
|
#ifndef SOUNDENVELOPE_H
|
|
#define SOUNDENVELOPE_H
|
|
|
|
#ifdef _WIN32
|
|
#pragma once
|
|
#endif
|
|
|
|
#include "engine/IEngineSound.h"
|
|
|
|
class CSoundPatch;
|
|
|
|
enum soundcommands_t {
|
|
SOUNDCTRL_CHANGE_VOLUME,
|
|
SOUNDCTRL_CHANGE_PITCH,
|
|
SOUNDCTRL_STOP,
|
|
SOUNDCTRL_DESTROY,
|
|
};
|
|
|
|
// Envelope point
|
|
struct envelopePoint_t {
|
|
float amplitudeMin, amplitudeMax;
|
|
float durationMin, durationMax;
|
|
};
|
|
|
|
// Envelope description
|
|
struct envelopeDescription_t {
|
|
envelopePoint_t *pPoints;
|
|
int nNumPoints;
|
|
};
|
|
|
|
class IRecipientFilter;
|
|
|
|
abstract_class CSoundEnvelopeController {
|
|
public:
|
|
virtual void SystemReset(void) = 0;
|
|
virtual void SystemUpdate(void) = 0;
|
|
virtual void Play(CSoundPatch * pSound, float volume, float pitch,
|
|
float flStartTime = 0) = 0;
|
|
virtual void CommandAdd(CSoundPatch * pSound, float executeDeltaTime,
|
|
soundcommands_t command, float commandTime,
|
|
float value) = 0;
|
|
virtual void CommandClear(CSoundPatch * pSound) = 0;
|
|
virtual void Shutdown(CSoundPatch * pSound) = 0;
|
|
|
|
virtual CSoundPatch *SoundCreate(IRecipientFilter & filter, int nEntIndex,
|
|
const char *pSoundName) = 0;
|
|
virtual CSoundPatch *SoundCreate(IRecipientFilter & filter, int nEntIndex,
|
|
int channel, const char *pSoundName,
|
|
float attenuation) = 0;
|
|
virtual CSoundPatch *SoundCreate(IRecipientFilter & filter, int nEntIndex,
|
|
int channel, const char *pSoundName,
|
|
soundlevel_t soundlevel) = 0;
|
|
virtual CSoundPatch *SoundCreate(IRecipientFilter & filter, int nEntIndex,
|
|
const EmitSound_t &es) = 0;
|
|
virtual void SoundDestroy(CSoundPatch *) = 0;
|
|
virtual void SoundChangePitch(CSoundPatch * pSound, float pitchTarget,
|
|
float deltaTime) = 0;
|
|
virtual void SoundChangeVolume(CSoundPatch * pSound, float volumeTarget,
|
|
float deltaTime) = 0;
|
|
virtual void SoundFadeOut(CSoundPatch * pSound, float deltaTime,
|
|
bool destroyOnFadeout = false) = 0;
|
|
virtual float SoundGetPitch(CSoundPatch * pSound) = 0;
|
|
virtual float SoundGetVolume(CSoundPatch * pSound) = 0;
|
|
|
|
virtual float SoundPlayEnvelope(
|
|
CSoundPatch * pSound, soundcommands_t soundCommand,
|
|
envelopePoint_t * points, int numPoints) = 0;
|
|
virtual float SoundPlayEnvelope(CSoundPatch * pSound,
|
|
soundcommands_t soundCommand,
|
|
envelopeDescription_t * envelope) = 0;
|
|
|
|
virtual void CheckLoopingSoundsForPlayer(CBasePlayer * pPlayer) = 0;
|
|
|
|
virtual string_t SoundGetName(CSoundPatch * pSound) = 0;
|
|
static CSoundEnvelopeController &GetController(void);
|
|
|
|
virtual void SoundSetCloseCaptionDuration(CSoundPatch * pSound,
|
|
float flDuration) = 0;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Save/restore
|
|
//-----------------------------------------------------------------------------
|
|
class ISaveRestoreOps;
|
|
|
|
ISaveRestoreOps *GetSoundSaveRestoreOps();
|
|
|
|
#define DEFINE_SOUNDPATCH(name) \
|
|
{ \
|
|
FIELD_CUSTOM, #name, {offsetof(classNameTypedef, name), 0}, 1, \
|
|
FTYPEDESC_SAVE, NULL, GetSoundSaveRestoreOps(), NULL \
|
|
}
|
|
|
|
#endif // SOUNDENVELOPE_H
|