diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 541e8cf7fe..d612675bec 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -339,7 +339,11 @@ namespace OpenRA.Traits public interface ILintPass { void Run(Action emitError, Action emitWarning, Map map); } - public interface IObjectivesPanel { string PanelName { get; } } + public interface IObjectivesPanel + { + string PanelName { get; } + int ExitDelay { get; } + } public interface INotifyObjectivesUpdated { diff --git a/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs b/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs index 6d7aa0a1d7..8e8082590f 100644 --- a/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs +++ b/OpenRA.Mods.Common/Traits/Player/MissionObjectives.cs @@ -250,13 +250,18 @@ namespace OpenRA.Mods.Common.Traits public class ObjectivesPanelInfo : ITraitInfo { public string PanelName = null; + + [Desc("in ms")] + public int ExitDelay = 1400; + public object Create(ActorInitializer init) { return new ObjectivesPanel(this); } } public class ObjectivesPanel : IObjectivesPanel { - ObjectivesPanelInfo info; + readonly ObjectivesPanelInfo info; public ObjectivesPanel(ObjectivesPanelInfo info) { this.info = info; } public string PanelName { get { return info.PanelName; } } + public int ExitDelay { get { return info.ExitDelay; } } } } diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs index 4460f912de..2d7d1e8ece 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/IngameMenuLogic.cs @@ -9,8 +9,10 @@ #endregion using System; +using System.Linq; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; +using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets.Logic @@ -41,7 +43,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic resumeDisabled = true; - var exitDelay = 1200; + var iop = world.WorldActor.TraitsImplementing().FirstOrDefault(); + var exitDelay = iop != null ? iop.ExitDelay : 0; if (mpe != null) { Game.RunAfterDelay(exitDelay, () => mpe.Fade(MenuPaletteEffect.EffectType.Black)); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/LeaveMapLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LeaveMapLogic.cs index eb6b21c99f..446fadfe43 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/LeaveMapLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/LeaveMapLogic.cs @@ -106,7 +106,7 @@ namespace OpenRA.Mods.Common.Widgets Sound.PlayNotification(world.Map.Rules, null, "Speech", "Leave", world.LocalPlayer == null ? null : world.LocalPlayer.Country.Race); - var exitDelay = 1200; + var exitDelay = iop != null ? iop.ExitDelay : 0; if (mpe != null) { Game.RunAfterDelay(exitDelay, () => mpe.Fade(MenuPaletteEffect.EffectType.Black));