- do not allow playing sounds during PlayerFinishLevel.

This gets called right before the level ends, any sound in here would play during the intermission or at the start of the next level.
This commit is contained in:
Christoph Oelckers 2020-06-09 21:01:14 +02:00
parent c9833a811e
commit b41ae2dfdd
3 changed files with 10 additions and 1 deletions

View file

@ -378,7 +378,7 @@ FSoundChan *SoundEngine::StartSound(int type, const void *source,
FVector3 pos, vel; FVector3 pos, vel;
FRolloffInfo *rolloff; FRolloffInfo *rolloff;
if (sound_id <= 0 || volume <= 0 || nosfx || nosound ) if (sound_id <= 0 || volume <= 0 || nosfx || nosound || blockNewSounds)
return NULL; return NULL;
// prevent crashes. // prevent crashes.

View file

@ -238,6 +238,7 @@ protected:
TArray<uint8_t> S_SoundCurve; TArray<uint8_t> S_SoundCurve;
TMap<int, int> ResIdMap; TMap<int, int> ResIdMap;
TArray<FRandomSoundList> S_rnd; TArray<FRandomSoundList> S_rnd;
bool blockNewSounds = false;
private: private:
void LinkChannel(FSoundChan* chan, FSoundChan** head); void LinkChannel(FSoundChan* chan, FSoundChan** head);
@ -268,6 +269,11 @@ public:
} }
void EvictAllChannels(); void EvictAllChannels();
void BlockNewSounds(bool on)
{
blockNewSounds = on;
}
virtual int SoundSourceIndex(FSoundChan* chan) { return 0; } virtual int SoundSourceIndex(FSoundChan* chan) { return 0; }
virtual void SetSource(FSoundChan* chan, int index) {} virtual void SetSource(FSoundChan* chan, int index) {}

View file

@ -954,6 +954,8 @@ bool FLevelLocals::DoCompleted (FString nextlevel, wbstartstruct_t &wminfo)
// Intermission stats for entire hubs // Intermission stats for entire hubs
G_LeavingHub(this, mode, thiscluster, &wminfo); G_LeavingHub(this, mode, thiscluster, &wminfo);
// Do not allow playing sounds in here - they'd never be able to play properly.
soundEngine->BlockNewSounds(true);
for (i = 0; i < MAXPLAYERS; i++) for (i = 0; i < MAXPLAYERS; i++)
{ {
if (playeringame[i]) if (playeringame[i])
@ -961,6 +963,7 @@ bool FLevelLocals::DoCompleted (FString nextlevel, wbstartstruct_t &wminfo)
G_PlayerFinishLevel (i, mode, changeflags); G_PlayerFinishLevel (i, mode, changeflags);
} }
} }
soundEngine->BlockNewSounds(false);
if (mode == FINISH_SameHub) if (mode == FINISH_SameHub)
{ // Remember the level's state for re-entry. { // Remember the level's state for re-entry.