summaryrefslogtreecommitdiff
path: root/soundemittersystem/soundemittersystembase.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /soundemittersystem/soundemittersystembase.h
downloadarchived-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.h183
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