diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /soundemittersystem/soundemittersystembase.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'soundemittersystem/soundemittersystembase.h')
| -rw-r--r-- | soundemittersystem/soundemittersystembase.h | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/soundemittersystem/soundemittersystembase.h b/soundemittersystem/soundemittersystembase.h new file mode 100644 index 0000000..f0c5b01 --- /dev/null +++ b/soundemittersystem/soundemittersystembase.h @@ -0,0 +1,183 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#ifndef SOUNDEMITTERSYSTEMBASE_H +#define SOUNDEMITTERSYSTEMBASE_H +#ifdef _WIN32 +#pragma once +#endif + +#include "SoundEmitterSystem/isoundemittersystembase.h" +#include "soundflags.h" +#include "interval.h" +#include "UtlSortVector.h" +#include <tier1/utlstring.h> +#include <tier1/utlhashtable.h> + +soundlevel_t TextToSoundLevel( const char *key ); + +struct CSoundEntry +{ + CUtlConstString m_Name; + CSoundParametersInternal m_SoundParams; + uint16 m_nScriptFileIndex; + bool m_bRemoved : 1; + bool m_bIsOverride : 1; + + bool IsOverride() const + { + return m_bIsOverride; + } +}; + +struct CSoundEntryHashFunctor : CaselessStringHashFunctor +{ + using CaselessStringHashFunctor::operator(); + unsigned int operator()( CSoundEntry *e ) const + { + return CaselessStringHashFunctor::operator()( e->m_Name.Get() ); + } +}; + +struct CSoundEntryEqualFunctor : CaselessStringEqualFunctor +{ + using CaselessStringEqualFunctor::operator(); + bool operator()( CSoundEntry *lhs, CSoundEntry *rhs ) const + { + return CaselessStringEqualFunctor::operator()( lhs->m_Name.Get(), rhs->m_Name.Get() ); + } + bool operator()( CSoundEntry *lhs, const char *rhs ) const + { + return CaselessStringEqualFunctor::operator()( lhs->m_Name.Get(), rhs ); + } +}; + + + +//----------------------------------------------------------------------------- +// Purpose: Base class for sound emitter system handling (can be used by tools) +//----------------------------------------------------------------------------- +class CSoundEmitterSystemBase : public ISoundEmitterSystemBase +{ +public: + CSoundEmitterSystemBase(); + virtual ~CSoundEmitterSystemBase() { } + + // Methods of IAppSystem + virtual bool Connect( CreateInterfaceFn factory ); + virtual void Disconnect(); + virtual void *QueryInterface( const char *pInterfaceName ); + virtual InitReturnVal_t Init(); + virtual void Shutdown(); + +public: + + virtual bool ModInit(); + virtual void ModShutdown(); + + virtual int GetSoundIndex( const char *pName ) const; + virtual bool IsValidIndex( int index ); + virtual int GetSoundCount( void ); + + virtual const char *GetSoundName( int index ); + virtual bool GetParametersForSound( const char *soundname, CSoundParameters& params, gender_t gender, bool isbeingemitted = false ); + virtual const char *GetWaveName( CUtlSymbol& sym ); + + virtual CUtlSymbol AddWaveName( const char *name ); + + virtual soundlevel_t LookupSoundLevel( const char *soundname ); + virtual const char *GetWavFileForSound( const char *soundname, char const *actormodel ); + virtual const char *GetWavFileForSound( const char *soundname, gender_t gender ); + + virtual int CheckForMissingWavFiles( bool verbose ); + virtual const char *GetSourceFileForSound( int index ) const; + // Iteration methods + virtual int First() const; + virtual int Next( int i ) const; + virtual int InvalidIndex() const; + + virtual CSoundParametersInternal *InternalGetParametersForSound( int index ); + + + // The host application is responsible for dealing with dirty sound scripts, etc. + virtual bool AddSound( const char *soundname, const char *scriptfile, const CSoundParametersInternal& params ); + virtual void RemoveSound( const char *soundname ); + + virtual void MoveSound( const char *soundname, const char *newscript ); + + virtual void RenameSound( const char *soundname, const char *newname ); + virtual void UpdateSoundParameters( const char *soundname, const CSoundParametersInternal& params ); + + virtual int GetNumSoundScripts() const; + virtual char const *GetSoundScriptName( int index ) const; + virtual bool IsSoundScriptDirty( int index ) const; + virtual int FindSoundScript( const char *name ) const; + + virtual void SaveChangesToSoundScript( int scriptindex ); + + virtual void ExpandSoundNameMacros( CSoundParametersInternal& params, char const *wavename ); + virtual gender_t GetActorGender( char const *actormodel ); + virtual void GenderExpandString( char const *actormodel, char const *in, char *out, int maxlen ); + virtual void GenderExpandString( gender_t gender, char const *in, char *out, int maxlen ); + virtual bool IsUsingGenderToken( char const *soundname ); + virtual unsigned int GetManifestFileTimeChecksum(); + + virtual bool GetParametersForSoundEx( const char *soundname, HSOUNDSCRIPTHANDLE& handle, CSoundParameters& params, gender_t gender, bool isbeingemitted = false ); + virtual soundlevel_t LookupSoundLevelByHandle( char const *soundname, HSOUNDSCRIPTHANDLE& handle ); + + + // Called from both client and server (single player) or just one (server only in dedicated server and client only if connected to a remote server) + // Called by LevelInitPreEntity to override sound scripts for the mod with level specific overrides based on custom mapnames, etc. + virtual void AddSoundOverrides( char const *scriptfile, bool bPreload = false ); + + // Called by either client or server in LevelShutdown to clear out custom overrides + virtual void ClearSoundOverrides(); + + virtual void ReloadSoundEntriesInList( IFileList *pFilesToReload ); + + // Called by either client or server to force ModShutdown and ModInit + virtual void Flush(); + +private: + + bool InternalModInit(); + void InternalModShutdown(); + + void AddSoundsFromFile( const char *filename, bool bPreload, bool bIsOverride = false, bool bRefresh = false ); + + bool InitSoundInternalParameters( const char *soundname, KeyValues *kv, CSoundParametersInternal& params ); + + void LoadGlobalActors(); + + float TranslateAttenuation( const char *key ); + soundlevel_t TranslateSoundLevel( const char *key ); + int TranslateChannel( const char *name ); + + int FindBestSoundForGender( SoundFile *pSoundnames, int c, gender_t gender ); + void EnsureAvailableSlotsForGender( SoundFile *pSoundnames, int c, gender_t gender ); + void AddSoundName( CSoundParametersInternal& params, char const *wavename, gender_t gender ); + + CUtlHashtable< CUtlConstString, gender_t, CaselessStringHashFunctor, UTLConstStringCaselessStringEqualFunctor<char> > m_ActorGenders; + CUtlStableHashtable< CSoundEntry*, empty_t, CSoundEntryHashFunctor, CSoundEntryEqualFunctor, uint16, const char* > m_Sounds; + + CUtlVector< CSoundEntry * > m_SavedOverrides; + CUtlVector< FileNameHandle_t > m_OverrideFiles; + + struct CSoundScriptFile + { + FileNameHandle_t hFilename; + bool dirty; + }; + + CUtlVector< CSoundScriptFile > m_SoundKeyValues; + int m_nInitCount; + unsigned int m_uManifestPlusScriptChecksum; + + CUtlSymbolTable m_Waves; +}; + +#endif // SOUNDEMITTERSYSTEMBASE_H |