Next track / repeat on song completion.

This commit is contained in:
Paul Chote
2010-09-10 21:51:11 +12:00
parent f645049054
commit 8b4551c605
4 changed files with 43 additions and 4 deletions

View File

@@ -118,7 +118,7 @@ namespace OpenRA
{
lastTime += Settings.Game.Timestep;
Widget.DoTick(world);
Sound.Tick();
orderManager.TickImmediate(world);
var isNetTick = LocalTick % NetTickScale == 0;

View File

@@ -49,6 +49,7 @@ namespace OpenRA.GameRules
public float MusicVolume = 0.5f;
public float VideoVolume = 0.5f;
public bool Shuffle = false;
public bool Repeat = false;
}
public class PlayerSettings

View File

@@ -102,9 +102,27 @@ namespace OpenRA
soundEngine.StopSound(video);
}
public static void Tick()
{
// Song finished
if (MusicPlaying && !music.Playing)
{
StopMusic();
OnMusicComplete();
}
}
static Action OnMusicComplete;
public static bool MusicPlaying { get; private set; }
public static void PlayMusic(string name)
{
PlayMusicThen(name, () => {});
}
public static void PlayMusicThen(string name, Action then)
{
OnMusicComplete = then;
if (name == "" || name == null)
return;
@@ -118,7 +136,7 @@ namespace OpenRA
currentMusic = name;
MusicPlaying = true;
var sound = sounds[name];
music = soundEngine.Play2D(sound, true, true, float2.Zero, MusicVolume);
music = soundEngine.Play2D(sound, false, true, float2.Zero, MusicVolume);
}
public static void PlayMusic()
@@ -236,6 +254,7 @@ namespace OpenRA
{
float Volume { get; set; }
float SeekPosition { get; }
bool Playing { get; }
}
class OpenAlSoundEngine : ISoundEngine
@@ -448,5 +467,15 @@ namespace OpenRA
return pos/22050f;
}
}
public bool Playing
{
get
{
int state;
Al.alGetSourcei(source, Al.AL_SOURCE_STATE, out state);
return state == Al.AL_PLAYING;
}
}
}
}

View File

@@ -38,7 +38,8 @@ namespace OpenRA.Widgets.Delegates
if (CurrentSong == null)
return true;
Sound.PlayMusic(Rules.Music[CurrentSong].Filename);
Sound.PlayMusicThen(Rules.Music[CurrentSong].Filename,
() => bg.GetWidget(Game.Settings.Sound.Repeat ? "BUTTON_PLAY" : "BUTTON_NEXT").OnMouseUp(new MouseInput()));
bg.GetWidget("BUTTON_PLAY").Visible = false;
bg.GetWidget("BUTTON_PAUSE").Visible = true;
@@ -82,6 +83,14 @@ namespace OpenRA.Widgets.Delegates
};
shuffle.Checked = () => Game.Settings.Sound.Shuffle;
var repeat = bg.GetWidget<CheckboxWidget>("REPEAT");
repeat.OnMouseDown = mi =>
{
Game.Settings.Sound.Repeat ^= true;
return true;
};
repeat.Checked = () => Game.Settings.Sound.Repeat;
bg.GetWidget<LabelWidget>("TIME").GetText = () =>
{
if (CurrentSong == null)