Files
OpenRA/OpenRA.Mods.Common/Widgets/Logic/Ingame/LoadIngamePlayerOrObserverUILogic.cs
deniz1a 5546298866 Merges LeaveMapLogic into GameInfoLogic.
Opens options menu when game ends.

Closes settings or music window before opening options menu.

Moves game end video playback logic from GameInfoLogic to
LoadIngamePlayerOrObserverUILogic.

Improves menu buttons.

Stop video from playing on fatal lua script error
2015-07-25 18:56:24 +03:00

69 lines
2.2 KiB
C#

#region Copyright & License Information
/*
* Copyright 2007-2015 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see COPYING.
*/
#endregion
using OpenRA.Mods.Common.Scripting;
using OpenRA.Widgets;
namespace OpenRA.Mods.Common.Widgets.Logic
{
public class LoadIngamePlayerOrObserverUILogic
{
[ObjectCreator.UseCtor]
public LoadIngamePlayerOrObserverUILogic(Widget widget, World world)
{
var ingameRoot = widget.Get("INGAME_ROOT");
var worldRoot = ingameRoot.Get("WORLD_ROOT");
var menuRoot = ingameRoot.Get("MENU_ROOT");
var playerRoot = worldRoot.Get("PLAYER_ROOT");
if (world.LocalPlayer == null)
Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
else
{
var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
var sidebarTicker = playerWidgets.Get<LogicTickerWidget>("SIDEBAR_TICKER");
sidebarTicker.OnTick = () =>
{
// Switch to observer mode after win/loss
if (world.ObserveAfterWinOrLose && world.LocalPlayer.WinState != WinState.Undefined)
Game.RunAfterTick(() =>
{
world.LocalPlayer.Spectating = true;
playerRoot.RemoveChildren();
Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
});
};
}
Game.LoadWidget(world, "CHAT_PANEL", worldRoot, new WidgetArgs());
world.GameOver += () =>
{
Ui.CloseWindow();
menuRoot.RemoveChildren();
if (world.LocalPlayer != null)
{
var scriptContext = world.WorldActor.TraitOrDefault<LuaScript>();
var video = world.LocalPlayer.WinState == WinState.Won ? world.Map.Videos.GameWon : world.Map.Videos.GameLost;
if (!string.IsNullOrEmpty(video) && !(scriptContext != null && scriptContext.FatalErrorOccurred))
Media.PlayFMVFullscreen(world, video, () => { });
}
var optionsButton = playerRoot.GetOrNull<MenuButtonWidget>("OPTIONS_BUTTON");
if (optionsButton != null)
optionsButton.OnClick();
};
}
}
}