Refactor common fmv playing code

This commit is contained in:
Paul Chote
2010-08-22 11:15:32 +12:00
parent 3f08f16b9b
commit f635835b1c
2 changed files with 54 additions and 43 deletions

View File

@@ -102,6 +102,7 @@ namespace OpenRA
soundEngine.StopSound(video); soundEngine.StopSound(video);
} }
public static bool MusicPlaying { get; private set; }
public static void PlayMusic(string name) public static void PlayMusic(string name)
{ {
if (name == "" || name == null) if (name == "" || name == null)
@@ -115,22 +116,35 @@ namespace OpenRA
StopMusic(); StopMusic();
currentMusic = name; currentMusic = name;
MusicPlaying = true;
var sound = sounds[name]; var sound = sounds[name];
music = soundEngine.Play2D(sound, true, true, float2.Zero, MusicVolume); music = soundEngine.Play2D(sound, true, true, float2.Zero, MusicVolume);
} }
public static void PlayMusic()
{
if (music == null)
return;
MusicPlaying = true;
soundEngine.PauseSound(music, false);
}
public static void StopMusic() public static void StopMusic()
{ {
if (music != null) if (music != null)
soundEngine.StopSound(music); soundEngine.StopSound(music);
MusicPlaying = false;
currentMusic = null; currentMusic = null;
} }
public static void PauseMusic() public static void PauseMusic()
{ {
if (music != null) if (music == null)
soundEngine.PauseSound(music, true); return;
MusicPlaying = false;
soundEngine.PauseSound(music, true);
} }
public static float GlobalVolume public static float GlobalVolume

View File

@@ -15,6 +15,7 @@ using OpenRA.Widgets;
using OpenRA.Traits.Activities; using OpenRA.Traits.Activities;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using System;
namespace OpenRA.Mods.RA namespace OpenRA.Mods.RA
{ {
@@ -26,6 +27,29 @@ namespace OpenRA.Mods.RA
Dictionary<string, Player> Players; Dictionary<string, Player> Players;
Map Map; Map Map;
public static void PlayFullscreenFMVThen(World w, string movie, Action then)
{
var playerRoot = Widget.RootWidget.OpenWindow("FMVPLAYER");
var player = playerRoot.GetWidget<VqaPlayerWidget>("PLAYER");
w.DisableTick = true;
player.Load(movie);
// Stop music while fmv plays
var music = Sound.MusicPlaying;
if (music)
Sound.PauseMusic();
player.PlayThen(() =>
{
if (music)
Sound.PlayMusic();
Widget.RootWidget.CloseWindow();
w.DisableTick = false;
then();
});
}
public void WorldLoaded(World w) public void WorldLoaded(World w)
{ {
Map = w.Map; Map = w.Map;
@@ -33,68 +57,41 @@ namespace OpenRA.Mods.RA
Actors = w.WorldActor.Trait<SpawnMapActors>().Actors; Actors = w.WorldActor.Trait<SpawnMapActors>().Actors;
Game.MoveViewport((.5f * (w.Map.TopLeft + w.Map.BottomRight).ToFloat2()).ToInt2()); Game.MoveViewport((.5f * (w.Map.TopLeft + w.Map.BottomRight).ToFloat2()).ToInt2());
var playerRoot = Widget.RootWidget.OpenWindow("FMVPLAYER"); PlayFullscreenFMVThen(w, "gdi1.vqa", () => PlayFullscreenFMVThen(w, "landing.vqa", () =>
var player = playerRoot.GetWidget<VqaPlayerWidget>("PLAYER");
w.DisableTick = true;
player.Load("gdi1.vqa");
player.PlayThen(() =>
{ {
player.Load("landing.vqa"); Sound.PlayMusic(Rules.Music["aoi"].Filename);
player.PlayThen(() => started = true;
{ }));
Widget.RootWidget.CloseWindow();
w.DisableTick = false;
Sound.PlayMusic(Rules.Music["aoi"].Filename);
started = true;
});
});
} }
public void OnVictory(World w) public void OnVictory(World w)
{ {
started = false; started = false;
Sound.PlayToPlayer(w.LocalPlayer, "accom1.aud"); Sound.PlayToPlayer(Players["GoodGuy"], "accom1.aud");
w.LocalPlayer.WinState = WinState.Won; Players["GoodGuy"].WinState = WinState.Won;
w.WorldActor.CancelActivity(); w.WorldActor.CancelActivity();
w.WorldActor.QueueActivity(new Wait(125)); w.WorldActor.QueueActivity(new Wait(125));
w.WorldActor.QueueActivity(new CallFunc(() => w.WorldActor.QueueActivity(new CallFunc(() => PlayFullscreenFMVThen(w, "consyard.vqa", () =>
{ {
Sound.StopMusic(); Sound.StopMusic();
w.DisableTick = true; Game.Disconnect();
var player = Widget.RootWidget.OpenWindow("FMVPLAYER").GetWidget<VqaPlayerWidget>("PLAYER"); })));
player.Load("consyard.vqa");
player.PlayThen(() =>
{
Widget.RootWidget.CloseWindow();
w.DisableTick = false;
Game.Disconnect();
});
}));
} }
public void OnLose(World w) public void OnLose(World w)
{ {
started = false; started = false;
Sound.PlayToPlayer(w.LocalPlayer, "fail1.aud"); Sound.PlayToPlayer(Players["GoodGuy"], "fail1.aud");
w.LocalPlayer.WinState = WinState.Lost; Players["GoodGuy"].WinState = WinState.Lost;
w.WorldActor.CancelActivity(); w.WorldActor.CancelActivity();
w.WorldActor.QueueActivity(new Wait(125)); w.WorldActor.QueueActivity(new Wait(125));
w.WorldActor.QueueActivity(new CallFunc(() => w.WorldActor.QueueActivity(new CallFunc(() => PlayFullscreenFMVThen(w, "gameover.vqa", () =>
{ {
Sound.StopMusic(); Sound.StopMusic();
w.DisableTick = true; Game.Disconnect();
var player = Widget.RootWidget.OpenWindow("FMVPLAYER").GetWidget<VqaPlayerWidget>("PLAYER"); })));
player.Load("gameover.vqa");
player.PlayThen(() =>
{
Widget.RootWidget.CloseWindow();
w.DisableTick = false;
Game.Disconnect();
});
}));
} }
int ticks = 0; int ticks = 0;