118 lines
No EOL
2.9 KiB
C++
118 lines
No EOL
2.9 KiB
C++
#ifndef __SND_AMBIENT__
|
|
#define __SND_AMBIENT__
|
|
|
|
// Includes
|
|
|
|
#pragma warning ( disable : 4786 )
|
|
#pragma warning ( disable : 4511 ) //copy constructor could not be gen
|
|
#pragma warning ( disable : 4512 ) //assign constructor could not be gen
|
|
|
|
//these don't work because stl re-sets them
|
|
//#pragma warning ( disable : 4663 ) //spcialize class
|
|
//#pragma warning ( disable : 4018 ) //signed/unsigned
|
|
#pragma warning (disable:4503) // decorated name length xceeded, name was truncated
|
|
#pragma warning (push, 3) //go back down to 3 for the stl include
|
|
|
|
#include "../qcommon/sstring.h" // #include <string>
|
|
#include <vector>
|
|
#include <map>
|
|
#pragma warning (pop)
|
|
#pragma warning (disable:4503) // decorated name length xceeded, name was truncated
|
|
|
|
using namespace std;
|
|
|
|
// Defines
|
|
|
|
#define AMBIENT_SET_FILENAME "sound/sound.txt"
|
|
|
|
const int MAX_WAVES_PER_GROUP = 8;
|
|
const int MAX_SET_NAME_LENGTH = 64;
|
|
|
|
// Enums
|
|
|
|
enum set_e
|
|
{
|
|
AS_SET_GENERAL, //General sets
|
|
AS_SET_LOCAL, //Local sets (regional)
|
|
AS_SET_BMODEL, //Brush model sets (doors, plats, etc.)
|
|
|
|
NUM_AS_SETS
|
|
};
|
|
|
|
enum setKeyword_e
|
|
{
|
|
SET_KEYWORD_TIMEBETWEENWAVES,
|
|
SET_KEYWORD_SUBWAVES,
|
|
SET_KEYWORD_LOOPEDWAVE,
|
|
SET_KEYWORD_VOLRANGE,
|
|
SET_KEYWORD_RADIUS,
|
|
SET_KEYWORD_TYPE,
|
|
SET_KEYWORD_AMSDIR,
|
|
SET_KEYWORD_OUTDIR,
|
|
SET_KEYWORD_BASEDIR,
|
|
|
|
NUM_AS_KEYWORDS,
|
|
};
|
|
|
|
// Structures
|
|
|
|
//NOTENOTE: Was going to make this a class, but don't want to muck around
|
|
typedef struct ambientSet_s
|
|
{
|
|
char name[MAX_SET_NAME_LENGTH];
|
|
unsigned char loopedVolume;
|
|
unsigned int time_start, time_end;
|
|
unsigned int volRange_start, volRange_end;
|
|
unsigned char numSubWaves;
|
|
int subWaves[MAX_WAVES_PER_GROUP];
|
|
int loopedWave;
|
|
int radius; //NOTENOTE: -1 is global
|
|
int masterVolume; //Used for fading ambient sets (not a byte to prevent wrapping)
|
|
int id; //Used for easier referencing of sets
|
|
int fadeTime; //When the fade was started on this set
|
|
} ambientSet_t;
|
|
|
|
typedef void (*parseFunc_t)( ambientSet_t & );
|
|
|
|
// Classes
|
|
|
|
//NOTENOTE: But this one should be a class because of all the mapping and internal data handling
|
|
class CSetGroup
|
|
{
|
|
public:
|
|
|
|
CSetGroup();
|
|
~CSetGroup();
|
|
|
|
void Init( void )
|
|
{
|
|
Free();
|
|
}
|
|
|
|
void Free( void );
|
|
|
|
ambientSet_t *AddSet( const char *name );
|
|
|
|
ambientSet_t *GetSet ( const char *name );
|
|
ambientSet_t *GetSet ( int ID );
|
|
|
|
protected:
|
|
|
|
int m_numSets;
|
|
vector < ambientSet_t * > *m_ambientSets;
|
|
map < sstring_t, ambientSet_t * > *m_setMap;
|
|
};
|
|
|
|
// Prototypes
|
|
|
|
extern void AS_Init( void );
|
|
extern void AS_Free( void );
|
|
extern void AS_ParseSets( void );
|
|
extern void AS_AddPrecacheEntry( const char *name );
|
|
|
|
extern void S_UpdateAmbientSet ( const char *name, vec3_t origin );
|
|
extern int S_AddLocalSet( const char *name, vec3_t listener_origin, vec3_t origin, int entID, int time );
|
|
|
|
extern sfxHandle_t AS_GetBModelSound( const char *name, int stage );
|
|
|
|
#endif //__SND_AMBIENT__
|