- this should take care of the S_* interface.

This commit is contained in:
Christoph Oelckers 2022-11-24 14:23:18 +01:00
parent 7e8de9d1ba
commit d13f12cc37
6 changed files with 34 additions and 32 deletions

View file

@ -27,10 +27,6 @@ class FSoundID
public:
FSoundID() = default;
static FSoundID byResId(int ndx)
{
return FSoundID(S_FindSoundByResID(ndx));
}
constexpr FSoundID(int id) : ID(id)
{
}

View file

@ -208,8 +208,8 @@ void A_StartSoundIfNotSame(AActor *self, int soundid, int checksoundid, int chan
DEFINE_ACTION_FUNCTION_NATIVE(AActor, A_StartSoundIfNotSame, A_StartSoundIfNotSame)
{
PARAM_SELF_PROLOGUE(AActor);
PARAM_SOUND(soundid);
PARAM_SOUND(checksoundid);
PARAM_INT(soundid);
PARAM_INT(checksoundid);
PARAM_INT(channel);
PARAM_INT(flags);
PARAM_FLOAT(volume);
@ -220,7 +220,13 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, A_StartSoundIfNotSame, A_StartSoundIfNotSa
return 0;
}
DEFINE_ACTION_FUNCTION_NATIVE(AActor, IsActorPlayingSound, S_IsActorPlayingSomething)
// direct native scripting export.
static int S_IsActorPlayingSomethingID(AActor* actor, int channel, int sound_id)
{
return S_IsActorPlayingSomething(actor, channel, FSoundID::fromInt(sound_id));
}
DEFINE_ACTION_FUNCTION_NATIVE(AActor, IsActorPlayingSound, S_IsActorPlayingSomethingID)
{
PARAM_SELF_PROLOGUE(AActor);
PARAM_INT(channel);

View file

@ -163,7 +163,7 @@ struct FSavedPlayerSoundInfo
{
FName pclass;
int gender;
int refid;
FSoundID refid;
int lumpnum;
bool alias;
};
@ -180,8 +180,8 @@ extern bool IsFloat (const char *str);
// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
static int SortPlayerClasses (const void *a, const void *b);
static int S_DupPlayerSound (const char *pclass, int gender, int refid, int aliasref);
static void S_SavePlayerSound (const char *pclass, int gender, int refid, int lumpnum, bool alias);
static FSoundID S_DupPlayerSound (const char *pclass, int gender, FSoundID refid, FSoundID aliasref);
static void S_SavePlayerSound (const char *pclass, int gender, FSoundID refid, int lumpnum, bool alias);
static void S_RestorePlayerSounds();
static int S_AddPlayerClass (const char *name);
static int S_AddPlayerGender (int classnum, int gender);
@ -468,8 +468,7 @@ static FSoundID S_AddSound (const char *logicalname, int lumpnum, FScanner *sc)
// Adds the given sound lump to the player sound lists.
//==========================================================================
int S_AddPlayerSound (const char *pclass, int gender, int refid,
const char *lumpname)
int S_AddPlayerSound (const char *pclass, int gender, FSoundID refid, const char *lumpname)
{
int lump=-1;
@ -481,7 +480,7 @@ int S_AddPlayerSound (const char *pclass, int gender, int refid,
return S_AddPlayerSound (pclass, gender, refid, lump);
}
int S_AddPlayerSound (const char *pclass, int gender, int refid, int lumpnum, bool fromskin)
int S_AddPlayerSound (const char *pclass, int gender, FSoundID refid, int lumpnum, bool fromskin)
{
FString fakename;
int id;
@ -513,7 +512,7 @@ int S_AddPlayerSound (const char *pclass, int gender, int refid, int lumpnum, bo
// Adds the player sound as an alias to an existing sound.
//==========================================================================
int S_AddPlayerSoundExisting (const char *pclass, int gender, int refid, int aliasto, bool fromskin)
int S_AddPlayerSoundExisting (const char *pclass, int gender, FSoundID refid, FSoundID aliasto, bool fromskin)
{
int classnum = S_AddPlayerClass (pclass);
int soundlist = S_AddPlayerGender (classnum, gender);
@ -522,7 +521,7 @@ int S_AddPlayerSoundExisting (const char *pclass, int gender, int refid, int ali
PlayerSounds[soundlist].AddSound (sfx->link, aliasto);
if (fromskin) S_SavePlayerSound(pclass, gender, refid, aliasto, true);
if (fromskin) S_SavePlayerSound(pclass, gender, refid, aliasto.index(), true);
return aliasto;
}
@ -534,7 +533,7 @@ int S_AddPlayerSoundExisting (const char *pclass, int gender, int refid, int ali
// Adds a player sound that uses the same sound as an existing player sound.
//==========================================================================
int S_DupPlayerSound (const char *pclass, int gender, int refid, int aliasref)
FSoundID S_DupPlayerSound (const char *pclass, int gender, FSoundID refid, FSoundID aliasref)
{
int aliasto = S_LookupPlayerSound (pclass, gender, aliasref);
return S_AddPlayerSoundExisting (pclass, gender, refid, aliasto);
@ -1369,7 +1368,7 @@ static FSoundID S_LookupPlayerSound (int classidx, int gender, FSoundID refid)
//
//==========================================================================
static void S_SavePlayerSound (const char *pclass, int gender, int refid, int lumpnum, bool alias)
static void S_SavePlayerSound (const char *pclass, int gender, FSoundID refid, int lumpnum, bool alias)
{
FSavedPlayerSoundInfo spi;
@ -1388,7 +1387,7 @@ static void S_RestorePlayerSounds()
FSavedPlayerSoundInfo * spi = &SavedPlayerSounds[i];
if (spi->alias)
{
S_AddPlayerSoundExisting(spi->pclass.GetChars(), spi->gender, spi->refid, spi->lumpnum);
S_AddPlayerSoundExisting(spi->pclass.GetChars(), spi->gender, spi->refid, FSoundID::fromInt(spi->lumpnum));
}
else
{

View file

@ -413,7 +413,7 @@ DEFINE_ACTION_FUNCTION(DObject, S_Sound)
PARAM_FLOAT(attn);
PARAM_FLOAT(pitch);
PARAM_FLOAT(startTime);
S_SoundPitch(channel & 7, EChanFlags::FromInt(channel & ~7), id, static_cast<float>(volume), static_cast<float>(attn), static_cast<float>(pitch), static_cast<float>(startTime));
S_SoundPitch(channel & 7, EChanFlags::FromInt(channel & ~7), FSoundID::fromInt(id), static_cast<float>(volume), static_cast<float>(attn), static_cast<float>(pitch), static_cast<float>(startTime));
return 0;
}
@ -427,7 +427,7 @@ DEFINE_ACTION_FUNCTION(DObject, S_StartSound)
PARAM_FLOAT(attn);
PARAM_FLOAT(pitch);
PARAM_FLOAT(startTime);
S_SoundPitch(channel, EChanFlags::FromInt(flags), id, static_cast<float>(volume), static_cast<float>(attn), static_cast<float>(pitch), static_cast<float>(startTime));
S_SoundPitch(channel, EChanFlags::FromInt(flags), FSoundID::fromInt(id), static_cast<float>(volume), static_cast<float>(attn), static_cast<float>(pitch), static_cast<float>(startTime));
return 0;
}
@ -620,7 +620,7 @@ void S_PlaySound(AActor *a, int chan, EChanFlags flags, FSoundID sid, float vol,
void A_StartSound(AActor *self, int soundid, int channel, int flags, double volume, double attenuation, double pitch, double startTime)
{
S_PlaySoundPitch(self, channel, EChanFlags::FromInt(flags), soundid, (float)volume, (float)attenuation, (float)pitch, (float)startTime);
S_PlaySoundPitch(self, channel, EChanFlags::FromInt(flags), FSoundID::fromInt(soundid), (float)volume, (float)attenuation, (float)pitch, (float)startTime);
}
void A_PlaySound(AActor* self, int soundid, int channel, double volume, int looping, double attenuation, int local, double pitch)
@ -727,17 +727,17 @@ void S_ChangeActorSoundPitch(AActor *actor, int channel, double pitch)
// Is a sound being played by a specific emitter?
//==========================================================================
bool S_GetSoundPlayingInfo (const AActor *actor, int sound_id)
bool S_GetSoundPlayingInfo (const AActor *actor, FSoundID sound_id)
{
return soundEngine->GetSoundPlayingInfo(SOURCE_Actor, actor, sound_id);
}
bool S_GetSoundPlayingInfo (const sector_t *sec, int sound_id)
bool S_GetSoundPlayingInfo (const sector_t *sec, FSoundID sound_id)
{
return soundEngine->GetSoundPlayingInfo(SOURCE_Sector, sec, sound_id);
}
bool S_GetSoundPlayingInfo (const FPolyObj *poly, int sound_id)
bool S_GetSoundPlayingInfo (const FPolyObj *poly, FSoundID sound_id)
{
return soundEngine->GetSoundPlayingInfo(SOURCE_Polyobj, poly, sound_id);
}
@ -748,7 +748,7 @@ bool S_GetSoundPlayingInfo (const FPolyObj *poly, int sound_id)
//
//==========================================================================
int S_IsActorPlayingSomething (AActor *actor, int channel, int sound_id)
bool S_IsActorPlayingSomething (AActor *actor, int channel, FSoundID sound_id)
{
if (compatflags & COMPATF_MAGICSILENCE)
{

View file

@ -40,11 +40,11 @@ void S_StopActorSounds(AActor *actor, int chanmin, int chanmax);
void S_RelinkSound (AActor *from, AActor *to);
// Is the sound playing on one of the emitter's channels?
bool S_GetSoundPlayingInfo (const AActor *actor, int sound_id);
bool S_GetSoundPlayingInfo (const sector_t *sector, int sound_id);
bool S_GetSoundPlayingInfo (const FPolyObj *poly, int sound_id);
bool S_GetSoundPlayingInfo (const AActor *actor, FSoundID sound_id = INVALID_SOUND);
bool S_GetSoundPlayingInfo (const sector_t *sector, FSoundID sound_id = INVALID_SOUND);
bool S_GetSoundPlayingInfo (const FPolyObj *poly, FSoundID sound_id = INVALID_SOUND);
int S_IsActorPlayingSomething (AActor *actor, int channel, int sound_id);
bool S_IsActorPlayingSomething (AActor *actor, int channel, FSoundID sound_id = INVALID_SOUND);
// Change a playing sound's volume
void S_ChangeActorSoundVolume(AActor *actor, int channel, double volume);
@ -55,6 +55,7 @@ void S_ChangeActorSoundPitch(AActor *actor, int channel, double pitch);
// Stores/retrieves playing channel information in an archive.
void S_SerializeSounds(FSerializer &arc);
// these must retain their integer sound IDs because they are direct native functions for ZScript.
void A_PlaySound(AActor *self, int soundid, int channel, double volume, int looping, double attenuation, int local, double pitch);
void A_StartSound(AActor* self, int soundid, int channel, int flags, double volume, double attenuation, double pitch, double startTime = 0.);
static void S_SetListener(AActor *listenactor);

View file

@ -72,9 +72,9 @@ const char *S_GetSoundClass(AActor *pp);
FSoundID S_FindSkinnedSound (AActor *actor, FSoundID refid);
int S_FindSkinnedSoundEx (AActor *actor, const char *logicalname, const char *extendedname);
FSoundID S_AddSound (const char *logicalname, const char *lumpname, FScanner *sc=NULL); // Add sound by lumpname
int S_AddPlayerSound (const char *playerclass, const int gender, int refid, const char *lumpname);
int S_AddPlayerSound (const char *playerclass, const int gender, int refid, int lumpnum, bool fromskin=false);
int S_AddPlayerSoundExisting (const char *playerclass, const int gender, int refid, int aliasto, bool fromskin=false);
int S_AddPlayerSound (const char *playerclass, const int gender, FSoundID refid, const char *lumpname);
int S_AddPlayerSound (const char *playerclass, const int gender, FSoundID refid, int lumpnum, bool fromskin=false);
int S_AddPlayerSoundExisting (const char *playerclass, const int gender, FSoundID refid, FSoundID aliasto, bool fromskin=false);
void S_MarkPlayerSounds (AActor *player);
void S_ShrinkPlayerSoundLists ();
unsigned int S_GetMSLength(FSoundID sound);