Fixed playing multiple instances of the same Music.

This commit is contained in:
rude
2009-12-27 17:38:51 +01:00
parent 3c79a33931
commit 8e74574544
6 changed files with 35 additions and 8 deletions
+2 -1
View File
@@ -59,7 +59,8 @@ namespace audio
* Creates a new Source.
* @returns A new Source.
**/
virtual Source * newSource(Audible * audible) = 0;
virtual Source * newSource(Sound * sound) = 0;
virtual Source * newSource(Music * music) = 0;
/**
* Gets the current number of simulatenous playing sources.
+6 -1
View File
@@ -49,7 +49,12 @@ namespace null
return new Music(decoder);
}
love::audio::Source * Audio::newSource(Audible * audible)
love::audio::Source * Audio::newSource(love::audio::Sound * sound)
{
return new Source();
}
love::audio::Source * Audio::newSource(love::audio::Music * music)
{
return new Source();
}
+2 -1
View File
@@ -49,7 +49,8 @@ namespace null
// Implements Audio.
love::audio::Sound * newSound(love::sound::SoundData * data);
love::audio::Music * newMusic(love::sound::Decoder * decoder);
love::audio::Source * newSource(Audible * audible);
love::audio::Source * newSource(love::audio::Sound * sound);
love::audio::Source * newSource(love::audio::Music * music);
int getNumSources() const;
int getMaxSources() const;
void play(love::audio::Source * source);
+7 -2
View File
@@ -92,9 +92,14 @@ namespace openal
return new Music(pool, decoder);
}
love::audio::Source * Audio::newSource(Audible * audible)
love::audio::Source * Audio::newSource(love::audio::Sound * sound)
{
return new Source(pool, audible);
return new Source(pool, sound);
}
love::audio::Source * Audio::newSource(love::audio::Music * music)
{
return new Source(pool, music->clone());
}
int Audio::getNumSources() const
+2 -1
View File
@@ -88,7 +88,8 @@ namespace openal
// Implements Audio.
love::audio::Sound * newSound(love::sound::SoundData * data);
love::audio::Music * newMusic(love::sound::Decoder * decoder);
love::audio::Source * newSource(Audible * audible);
love::audio::Source * newSource(love::audio::Sound * sound);
love::audio::Source * newSource(love::audio::Music * music);
int getNumSources() const;
int getMaxSources() const;
void play(love::audio::Source * source);
+16 -2
View File
@@ -67,8 +67,22 @@ namespace audio
int w_newSource(lua_State * L)
{
Audible * a = luax_checktype<Audible>(L, 1, "Audible", AUDIO_AUDIBLE_T);
Source * t = instance->newSource(a);
Source * t = 0;
if(luax_istype(L, 1, AUDIO_SOUND_T))
{
Sound * s = luax_checksound(L, 1);
t = instance->newSource(s);
}
else if(luax_istype(L, 1, AUDIO_MUSIC_T))
{
Music * m = luax_checkmusic(L, 1);
t = instance->newSource(m);
}
if(!t)
return luaL_error(L, "No matching overload");
luax_newtype(L, "Source", AUDIO_SOURCE_T, (void*)t);
return 1;
}