bgm_play, bgm_stop and bgm_fade should default to stopping/fading all channels when no channel is specified

This commit is contained in:
Struma 2023-04-22 09:32:55 -04:00
parent 6e9e8a4075
commit 5d39805aeb
3 changed files with 42 additions and 13 deletions

View file

@ -92,7 +92,7 @@ RB_METHOD(audio_bgmPlay)
int volume = 100;
int pitch = 100;
double pos = 0.0;
int channel = 0;
int channel = -127;
rb_get_args(argc, argv, "z|iifi", &filename, &volume, &pitch, &pos, &channel RB_ARG_END);
GUARD_EXC( shState->audio().bgmPlay(filename, volume, pitch, pos, channel); )
return Qnil;
@ -101,7 +101,9 @@ RB_METHOD(audio_bgmPlay)
RB_METHOD(audio_bgmStop)
{
RB_UNUSED_PARAM;
shState->audio().bgmStop();
int channel = -127;
rb_get_args(argc, argv, "|i", &channel RB_ARG_END);
shState->audio().bgmStop(channel);
return Qnil;
}
@ -135,7 +137,17 @@ DEF_PLAY_STOP_POS( bgs )
DEF_PLAY_STOP( me )
DEF_FADE( bgm )
//DEF_FADE( bgm )
RB_METHOD(audio_bgmFade)
{
RB_UNUSED_PARAM;
int time;
int channel = -127;
rb_get_args(argc, argv, "i|i", &time, &channel RB_ARG_END);
shState->audio().bgmFade(time, channel);
return Qnil;
}
DEF_FADE( bgs )
DEF_FADE( me )

View file

@ -283,20 +283,37 @@ void Audio::bgmPlay(const char *filename,
float pos,
int channel)
{
// todo: error if the channel is out of range
if (channel == -127) {
for (auto chan : p->bgmChannels)
chan->stop();
channel = 0;
}
p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->play(filename, volume, pitch, pos);
}
void Audio::bgmStop()
void Audio::bgmStop(int channel)
{
for (auto chan : p->bgmChannels)
chan->stop();
if (channel == -127) {
for (auto chan : p->bgmChannels)
chan->stop();
return;
}
p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->stop();
}
void Audio::bgmFade(int time)
void Audio::bgmFade(int time, int channel)
{
for (auto chan : p->bgmChannels)
chan->fadeOut(time);
if (channel == -127) {
for (auto chan : p->bgmChannels)
chan->fadeOut(time);
return;
}
p->bgmChannels[clamp(channel, 0, (int)p->bgmChannels.size() - 1)]->fadeOut(time);
}
int Audio::bgmGetVolume(int channel)

View file

@ -42,9 +42,9 @@ public:
int volume = 100,
int pitch = 100,
float pos = 0,
int channel = 0);
void bgmStop();
void bgmFade(int time);
int channel = -127);
void bgmStop(int channel = -127);
void bgmFade(int time, int channel = -127);
int bgmGetVolume(int channel = -127);
void bgmSetVolume(int volume = 100, int channel = -127);