/*
* call-seq:
* volume = new_vol
*
* Set the new #volume level of the sound.
* 0.0 is totally silent, 1.0 is full volume.
*
* Volume cannot be set while the sound is fading in or out.
* Be sure to check #fading? or rescue from SDLError when
* using this method.
*
* May raise:: SDLError if the sound is fading in or out.
*
*/
static VALUE rg_sound_setvolume( VALUE self, VALUE volume )
{
RG_Sound *sound;
Data_Get_Struct(self, RG_Sound, sound);
/* Change channel volume if Sound is currently assigned to a channel */
if( _rg_sound_channel_check(sound) )
{
/* But only if it's not fading right now. */
if( Mix_FadingChannel(sound->channel) == MIX_NO_FADING )
{
sound->volume = NUM2DBL(volume);
Mix_Volume( sound->channel, (int)(MIX_MAX_VOLUME * sound->volume) );
}
else
{
rb_raise(eSDLError, "cannot set Sound volume while fading");
}
}
else
{
/* Save it for later. */
sound->volume = NUM2DBL(volume);
}
return volume;
}