mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-07 02:39:56 +00:00
TSAGE: Implemented more _sf methods
This commit is contained in:
parent
1d866e5749
commit
3457253f03
@ -89,7 +89,7 @@ Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) {
|
||||
}
|
||||
|
||||
void SoundManager::installConfigDrivers() {
|
||||
|
||||
installDriver(ADLIB_DRIVER_NUM);
|
||||
}
|
||||
|
||||
Common::List<SoundDriverEntry> &SoundManager::getDriverList(bool detectFlag) {
|
||||
@ -324,6 +324,10 @@ void SoundManager::listenerSynchronize(Serializer &s) {
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
SoundManager &SoundManager::sfManager() {
|
||||
return _globals->_soundManager;
|
||||
}
|
||||
|
||||
void SoundManager::_soSetTimeIndex(int timeIndex) {
|
||||
warning("TODO: _soSetTimeIndex");
|
||||
}
|
||||
@ -341,12 +345,19 @@ int SoundManager::_sfDetermineGroup(const byte *soundData) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void SoundManager::_sfAddToPlayList(Sound*soundData) {
|
||||
|
||||
void SoundManager::_sfAddToPlayList(Sound *sound) {
|
||||
++sfManager()._suspendCtr;
|
||||
_sfDoAddToPlayList(sound);
|
||||
sound->_field6 = 0;
|
||||
_sfRethinkVoiceTypes();
|
||||
--sfManager()._suspendCtr;
|
||||
}
|
||||
|
||||
void SoundManager::_sfRemoveFromPlayList(Sound *sound) {
|
||||
|
||||
++sfManager()._suspendCtr;
|
||||
if (_sfDoRemoveFromPlayList(sound))
|
||||
_sfRethinkVoiceTypes();
|
||||
--sfManager()._suspendCtr;
|
||||
}
|
||||
|
||||
bool SoundManager::_sfIsOnPlayList(Sound *sound) {
|
||||
@ -363,23 +374,35 @@ void SoundManager::_sfRethinkVoiceTypes() {
|
||||
|
||||
void SoundManager::_sfUpdateVolume(Sound *sound) {
|
||||
_sfDereferenceAll();
|
||||
sub_233EE(sound);
|
||||
_sfDoUpdateVolume(sound);
|
||||
}
|
||||
|
||||
void SoundManager::_sfDereferenceAll() {
|
||||
|
||||
}
|
||||
|
||||
void SoundManager::sub_233EE(Sound *sound) {
|
||||
|
||||
// Orignal used handles for both the driver list and voiceStructPtrs list. This method then refreshed
|
||||
// pointer lists based on the handles. Since in ScummVM we're just using pointers directly, this
|
||||
// method doesn't need any implementation
|
||||
}
|
||||
|
||||
void SoundManager::_sfUpdatePriority(Sound *sound) {
|
||||
++_globals->_soundManager._suspendCtr;
|
||||
|
||||
int tempPriority = (sound->_priority2 == 255) ? sound->_soundPriority : sound->_priority;
|
||||
if (sound->_priority != tempPriority) {
|
||||
sound->_priority = tempPriority;
|
||||
if (_sfDoRemoveFromPlayList(sound)) {
|
||||
_sfDoAddToPlayList(sound);
|
||||
_sfRethinkVoiceTypes();
|
||||
}
|
||||
}
|
||||
|
||||
--_globals->_soundManager._suspendCtr;
|
||||
}
|
||||
|
||||
void SoundManager::_sfUpdateLoop(Sound *sound) {
|
||||
|
||||
if (sound->_loopFlag2)
|
||||
sound->_loopFlag = sound->_loop;
|
||||
else
|
||||
sound->_loopFlag = sound->_loopFlag2;
|
||||
}
|
||||
|
||||
void SoundManager::_sfSetMasterVol(int volume) {
|
||||
@ -447,6 +470,53 @@ void SoundManager::_sfInstallPatchBank(const byte *bankData) {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the specified sound in the playing sound list, inserting in order of priority
|
||||
*/
|
||||
void SoundManager::_sfDoAddToPlayList(Sound *sound) {
|
||||
++sfManager()._suspendCtr;
|
||||
|
||||
Common::List<Sound *>::iterator i = sfManager()._playList.begin();
|
||||
while ((i != sfManager()._playList.end()) && (sound->_priority > (*i)->_priority))
|
||||
++i;
|
||||
|
||||
sfManager()._playList.insert(i, sound);
|
||||
--sfManager()._suspendCtr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the specified sound from the play list
|
||||
*/
|
||||
bool SoundManager::_sfDoRemoveFromPlayList(Sound *sound) {
|
||||
++sfManager()._suspendCtr;
|
||||
|
||||
bool result = false;
|
||||
for (Common::List<Sound *>::iterator i = sfManager()._playList.begin(); i != sfManager()._playList.end(); ++i) {
|
||||
if (*i == sound) {
|
||||
result = true;
|
||||
sfManager()._playList.erase(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
--sfManager()._suspendCtr;
|
||||
return result;
|
||||
}
|
||||
|
||||
void SoundManager::_sfDoUpdateVolume(Sound *sound) {
|
||||
++_globals->_soundManager._suspendCtr;
|
||||
|
||||
for (int idx = 0; idx < 16; ++idx) {
|
||||
Sound *snd = sfManager()._voiceStructPtrs[idx];
|
||||
if (!snd)
|
||||
continue;
|
||||
|
||||
// TODO: More stuff
|
||||
}
|
||||
|
||||
--_globals->_soundManager._suspendCtr;
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
Sound::Sound() {
|
||||
|
@ -85,6 +85,7 @@ public:
|
||||
int _field89[SOUND_ARR_SIZE];
|
||||
uint16 _groupList[SOUND_ARR_SIZE];
|
||||
int _fieldE9[SOUND_ARR_SIZE];
|
||||
Sound *_voiceStructPtrs[SOUND_ARR_SIZE];
|
||||
public:
|
||||
SoundManager();
|
||||
~SoundManager();
|
||||
@ -129,6 +130,7 @@ public:
|
||||
void unloadSound(int soundNum);
|
||||
|
||||
// _so methods
|
||||
static SoundManager &sfManager();
|
||||
static void _sfTerminate();
|
||||
static void _soSetTimeIndex(int timeIndex);
|
||||
static int _sfDetermineGroup(const byte *soundData);
|
||||
@ -138,7 +140,6 @@ public:
|
||||
static void _sfRethinkVoiceTypes();
|
||||
static void _sfUpdateVolume(Sound *sound);
|
||||
static void _sfDereferenceAll();
|
||||
static void sub_233EE(Sound *sound);
|
||||
static void _sfUpdatePriority(Sound *sound);
|
||||
static void _sfUpdateLoop(Sound *sound);
|
||||
static void _sfSetMasterVol(int volume);
|
||||
@ -147,6 +148,9 @@ public:
|
||||
static bool _sfInstallDriver(SoundDriver *driver);
|
||||
static void _sfUnInstallDriver(SoundDriver *driver);
|
||||
static void _sfInstallPatchBank(const byte *bankData);
|
||||
static void _sfDoAddToPlayList(Sound *sound);
|
||||
static bool _sfDoRemoveFromPlayList(Sound *sound);
|
||||
static void _sfDoUpdateVolume(Sound *sound);
|
||||
};
|
||||
|
||||
class Sound: public EventHandler {
|
||||
@ -155,6 +159,7 @@ private:
|
||||
void _unPrime();
|
||||
void orientAfterRestore();
|
||||
public:
|
||||
int _field0;
|
||||
int _field6;
|
||||
int _soundNum;
|
||||
int _groupNum;
|
||||
|
Loading…
x
Reference in New Issue
Block a user