/* call-seq: * play( repeats = 0 ) -> self * * Play music, repeating a certain number of extra times. If * any music was already playing, that music will be stopped * first, and this music will start. * * Raises SDLError if something goes wrong. * * This method takes these arguments: * repeats:: how many extra times to play the music. * Can be -1 to repeat forever until it is stopped. */ VALUE rbgm_mixmusic_play(int argc, VALUE *argv, VALUE self) { Mix_Music* music; int reps, result; VALUE repsv; Data_Get_Struct( self, Mix_Music, music ); rb_scan_args(argc, argv, "01", &repsv); if( RTEST(repsv) ) { reps = NUM2INT(repsv); } else { reps = 0; } if( reps > -1 ) { /* Adjust so repeats means the same as it does for Samples */ reps += 1; } result = Mix_PlayMusic(music, reps); if ( result < 0 ) { rb_raise(eSDLError, "Error playing music: %s", Mix_GetError()); } return self; }