Created addSingleSfx() to the sfx_manager. Extends ability of sfx_manager to load custom sounds during run-time. Will be used for loading character voices. Replaced SFXType with int in several places and added bounds checking.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/irrlicht@3891 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
b5e25d1298
commit
6c0f94190b
@ -214,11 +214,55 @@ bool loadVorbisBuffer(const char *name, ALuint buffer)
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
addSingleSfx()
|
||||||
|
|
||||||
|
Introduces a mechanism by which one can load sound effects beyond the basic
|
||||||
|
enumerated types. This will be used when loading custom sound effects for
|
||||||
|
individual karts (character voices) so that we can avoid creating an
|
||||||
|
enumeration for each effect, for each kart.
|
||||||
|
|
||||||
|
sfxFile must be an absolute pathname, so get that straight first.
|
||||||
|
|
||||||
|
*/
|
||||||
|
int SFXManager::addSingleSfx(std::string sfxFile,
|
||||||
|
int positional,
|
||||||
|
float rolloff,
|
||||||
|
float gain)
|
||||||
|
/* Returns sfx ID */
|
||||||
|
{
|
||||||
|
int sfxID;
|
||||||
|
|
||||||
|
m_sfx_buffers.push_back(0);
|
||||||
|
sfxID = m_sfx_buffers.size() - 1;
|
||||||
|
|
||||||
|
/* FIXME: Check for existance of file before resizing vectors */
|
||||||
|
|
||||||
|
m_sfx_rolloff.push_back(rolloff);
|
||||||
|
m_sfx_positional.push_back(positional);
|
||||||
|
m_sfx_gain.push_back(gain);
|
||||||
|
|
||||||
|
alGenBuffers(1, &(m_sfx_buffers[sfxID]));
|
||||||
|
if (!checkError("generating a buffer")) return -1;
|
||||||
|
|
||||||
|
if (!loadVorbisBuffer(sfxFile.c_str(), sfxID))
|
||||||
|
{
|
||||||
|
printf("Failed to load sound effect %s\n", sfxFile.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
return sfxID;
|
||||||
|
}
|
||||||
|
|
||||||
void SFXManager::loadSingleSfx(const lisp::Lisp* lisp,
|
void SFXManager::loadSingleSfx(const lisp::Lisp* lisp,
|
||||||
const char *name, SFXType item)
|
const char *name, int item)
|
||||||
{
|
{
|
||||||
|
if (item < 0 || item >= m_sfx_gain.size())
|
||||||
|
{
|
||||||
|
printf("loadSingleSfx: Invalid SFX ID.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const lisp::Lisp* sfxLisp = lisp->getLisp(name);
|
const lisp::Lisp* sfxLisp = lisp->getLisp(name);
|
||||||
std::string wav; float rolloff = 0.1f; float gain = 1.0f; int positional = 0;
|
std::string wav; float rolloff = 0.1f; float gain = 1.0f; int positional = 0;
|
||||||
|
|
||||||
@ -249,9 +293,16 @@ void SFXManager::loadSingleSfx(const lisp::Lisp* lisp,
|
|||||||
* call deleteSFX().
|
* call deleteSFX().
|
||||||
* \param id Identifier of the sound effect to create.
|
* \param id Identifier of the sound effect to create.
|
||||||
*/
|
*/
|
||||||
SFXBase *SFXManager::newSFX(SFXType id)
|
SFXBase *SFXManager::newSFX(int id)
|
||||||
{
|
{
|
||||||
bool positional = false;
|
bool positional = false;
|
||||||
|
|
||||||
|
if (id < 0 || id >= m_sfx_gain.size())
|
||||||
|
{
|
||||||
|
printf("newSFX: Invalid SFX ID.\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if(race_manager->getNumLocalPlayers() < 2)
|
if(race_manager->getNumLocalPlayers() < 2)
|
||||||
positional = m_sfx_positional[id]!=0;
|
positional = m_sfx_positional[id]!=0;
|
||||||
|
|
||||||
|
@ -67,15 +67,22 @@ private:
|
|||||||
std::vector<SFXBase*> m_all_sfx;
|
std::vector<SFXBase*> m_all_sfx;
|
||||||
bool m_initialized;
|
bool m_initialized;
|
||||||
float m_masterGain;
|
float m_masterGain;
|
||||||
|
|
||||||
void loadSfx();
|
void loadSfx();
|
||||||
|
|
||||||
void loadSingleSfx(const lisp::Lisp *lisp,
|
void loadSingleSfx(const lisp::Lisp *lisp,
|
||||||
const char *name,
|
const char *name,
|
||||||
SFXType type);
|
int type);
|
||||||
|
|
||||||
|
int addSingleSfx( std::string filename,
|
||||||
|
int positional,
|
||||||
|
float rolloff,
|
||||||
|
float gain);
|
||||||
public:
|
public:
|
||||||
SFXManager();
|
SFXManager();
|
||||||
virtual ~SFXManager();
|
virtual ~SFXManager();
|
||||||
bool sfxAllowed();
|
bool sfxAllowed();
|
||||||
SFXBase *newSFX(SFXType id);
|
SFXBase *newSFX(int id);
|
||||||
void deleteSFX(SFXBase *sfx);
|
void deleteSFX(SFXBase *sfx);
|
||||||
void pauseAll();
|
void pauseAll();
|
||||||
void resumeAll();
|
void resumeAll();
|
||||||
|
Loading…
Reference in New Issue
Block a user