diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index 581254116f..f35057e164 100755 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -1,4 +1,4 @@ - + Debug @@ -99,7 +99,6 @@ - @@ -237,7 +236,7 @@ OpenRA.FileFormats - + False diff --git a/OpenRA.Game/Widgets/Delegates/IngameChromeDelegate.cs b/OpenRA.Game/Widgets/Delegates/IngameChromeDelegate.cs index 3a8631cc35..278d0cdf25 100644 --- a/OpenRA.Game/Widgets/Delegates/IngameChromeDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/IngameChromeDelegate.cs @@ -8,6 +8,8 @@ */ #endregion +using OpenRA.Traits; +using System.Linq; namespace OpenRA.Widgets.Delegates { public class IngameChromeDelegate : IWidgetDelegate @@ -53,7 +55,36 @@ namespace OpenRA.Widgets.Delegates return true; }; - Game.AddChatLine += gameRoot.GetWidget("CHAT_DISPLAY").AddLine; - } + Game.AddChatLine += gameRoot.GetWidget("CHAT_DISPLAY").AddLine; + + + var postgameBG = gameRoot.GetWidget("POSTGAME_BG"); + var postgameText = postgameBG.GetWidget("TEXT"); + postgameBG.IsVisible = () => + { + var conds = Game.world.Queries.WithTrait() + .Where(c => !c.Actor.Owner.NonCombatant); + + if (Game.world.LocalPlayer != null && conds.Count() > 1) + { + if (conds.Any(c => c.Actor.Owner == Game.world.LocalPlayer && c.Trait.HasLost) + || conds.All(c => AreMutualAllies(c.Actor.Owner, Game.world.LocalPlayer) || c.Trait.HasLost)) + return true; + } + + return false; + }; + + postgameText.GetText = () => + { + var lost = Game.world.Queries.WithTrait() + .Where(c => c.Actor.Owner == Game.world.LocalPlayer) + .Any(c => c.Trait.HasLost); + + return (lost) ? "YOU ARE DEFEATED" : "YOU ARE VICTORIOUS"; + }; + } + bool AreMutualAllies(Player a, Player b) { return a.Stances[b] == Stance.Ally && b.Stances[a] == Stance.Ally; } + } } diff --git a/OpenRA.Game/Widgets/PostGameWidget.cs b/OpenRA.Game/Widgets/PostGameWidget.cs deleted file mode 100644 index c2166a96d0..0000000000 --- a/OpenRA.Game/Widgets/PostGameWidget.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2010 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 LICENSE. - */ -#endregion - -using System.Drawing; -using System.Linq; -using OpenRA.Traits; - -namespace OpenRA.Widgets -{ - class PostGameWidget : Widget - { - public PostGameWidget() : base() { } - - bool AreMutualAllies(Player a, Player b) { return a.Stances[b] == Stance.Ally && b.Stances[a] == Stance.Ally; } - - // todo: all this shit needs to move, probably to Player. - - public override void DrawInner(World world) - { - if (world.LocalPlayer == null) return; - - if (world.players.Count > 2) /* more than just us + neutral */ - { - var conds = world.Queries.WithTrait() - .Where(c => !c.Actor.Owner.NonCombatant); - - if (conds.Any(c => c.Actor.Owner == world.LocalPlayer && c.Trait.HasLost)) - DrawText("YOU ARE DEFEATED"); - else if (conds.All(c => AreMutualAllies(c.Actor.Owner, world.LocalPlayer) || c.Trait.HasLost)) - DrawText("YOU ARE VICTORIOUS"); - } - } - - void DrawText(string s) - { - var size = Game.chrome.renderer.TitleFont.Measure(s); - - WidgetUtils.DrawPanel("dialog4", new Rectangle( - (Game.viewport.Width - size.X - 40) / 2, - (Game.viewport.Height - size.Y - 10) / 2, - size.X + 40, - size.Y + 13)); - - Game.chrome.renderer.TitleFont.DrawText(s, - new float2((Game.viewport.Width - size.X) / 2, - (Game.viewport.Height - size.Y) / 2 - .2f * size.Y), Color.White); - - Game.chrome.renderer.RgbaSpriteRenderer.Flush(); - } - } -} diff --git a/mods/cnc/chrome/ingame.yaml b/mods/cnc/chrome/ingame.yaml index 39b58c689b..20707576c5 100644 --- a/mods/cnc/chrome/ingame.yaml +++ b/mods/cnc/chrome/ingame.yaml @@ -9,8 +9,23 @@ Container@ROOT: Id:GAME_TIMER X: WINDOW_RIGHT/2 Y: 10 - PostGame@POSTGAME_TEXT: - Id:POSTGAME_TEXT + Background@POSTGAME_BG: + Id:POSTGAME_BG + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:400 + Height:100 + Background:dialog4 + Visible:false + Children: + Label@TEXT: + Id:TEXT + X:(PARENT_RIGHT - WIDTH)/2 + Y:(PARENT_BOTTOM - HEIGHT)/2 + Width:200 + Height:40 + Align:Center + Bold:True SpecialPowerBin@INGAME_POWERS_BIN: Id:INGAME_POWERS_BIN X:0 diff --git a/mods/ra/chrome/ingame.yaml b/mods/ra/chrome/ingame.yaml index a8146f5d03..d751e60af5 100644 --- a/mods/ra/chrome/ingame.yaml +++ b/mods/ra/chrome/ingame.yaml @@ -9,8 +9,23 @@ Container@ROOT: Id:GAME_TIMER X: WINDOW_RIGHT/2 Y: 10 - PostGame@POSTGAME_TEXT: - Id:POSTGAME_TEXT + Background@POSTGAME_BG: + Id:POSTGAME_BG + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:400 + Height:100 + Background:dialog4 + Visible:false + Children: + Label@TEXT: + Id:TEXT + X:(PARENT_RIGHT - WIDTH)/2 + Y:(PARENT_BOTTOM - HEIGHT)/2 + Width:200 + Height:40 + Align:Center + Bold:True SpecialPowerBin@INGAME_POWERS_BIN: Id:INGAME_POWERS_BIN X:0