diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index 0224602384..1d6b56c009 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -17,6 +17,7 @@ using System.Threading; using OpenRA.Graphics; using OpenRA.Mods.Common.Traits; using OpenRA.Network; +using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.Common.Widgets.Logic @@ -24,6 +25,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic public class MissionBrowserLogic : ChromeLogic { enum PlayingVideo { None, Info, Briefing, GameStart } + enum PanelType { MissionInfo, Options } [TranslationReference] const string NoVideoTitle = "dialog-no-video.title"; @@ -43,16 +45,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic [TranslationReference] const string CantPlayCancel = "dialog-cant-play-video.cancel"; - [TranslationReference] - const string DifficultyNormal = "options-difficulty.normal"; - readonly ModData modData; readonly Action onStart; + readonly Widget missionDetail; + readonly Widget optionsContainer; + readonly Widget checkboxRowTemplate; + readonly Widget dropdownRowTemplate; readonly ScrollPanelWidget descriptionPanel; readonly LabelWidget description; readonly SpriteFont descriptionFont; - readonly DropDownButtonWidget difficultyButton; - readonly DropDownButtonWidget gameSpeedButton; readonly ButtonWidget startBriefingVideoButton; readonly ButtonWidget stopBriefingVideoButton; readonly ButtonWidget startInfoVideoButton; @@ -66,9 +67,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic MapPreview selectedMap; PlayingVideo playingVideo; - - string difficulty; - string gameSpeed; + readonly Dictionary missionOptions = new(); + PanelType panel = PanelType.MissionInfo; [ObjectCreator.UseCtor] public MissionBrowserLogic(Widget widget, ModData modData, World world, Action onStart, Action onExit, string initialMap) @@ -96,13 +96,18 @@ namespace OpenRA.Mods.Common.Widgets.Logic widget.Get("MISSION_BIN").IsVisible = () => playingVideo != PlayingVideo.None; fullscreenVideoPlayer = Ui.LoadWidget("FULLSCREEN_PLAYER", Ui.Root, new WidgetArgs { { "world", world } }); - descriptionPanel = widget.Get("MISSION_DESCRIPTION_PANEL"); + missionDetail = widget.Get("MISSION_DETAIL"); + + descriptionPanel = missionDetail.Get("MISSION_DESCRIPTION_PANEL"); + descriptionPanel.IsVisible = () => panel == PanelType.MissionInfo; description = descriptionPanel.Get("MISSION_DESCRIPTION"); descriptionFont = Game.Renderer.Fonts[description.Font]; - difficultyButton = widget.Get("DIFFICULTY_DROPDOWNBUTTON"); - gameSpeedButton = widget.GetOrNull("GAMESPEED_DROPDOWNBUTTON"); + optionsContainer = missionDetail.Get("MISSION_OPTIONS"); + optionsContainer.IsVisible = () => panel == PanelType.Options; + checkboxRowTemplate = optionsContainer.Get("CHECKBOX_ROW_TEMPLATE"); + dropdownRowTemplate = optionsContainer.Get("DROPDOWN_ROW_TEMPLATE"); startBriefingVideoButton = widget.Get("START_BRIEFING_VIDEO_BUTTON"); stopBriefingVideoButton = widget.Get("STOP_BRIEFING_VIDEO_BUTTON"); @@ -191,6 +196,19 @@ namespace OpenRA.Mods.Common.Widgets.Logic Ui.CloseWindow(); onExit(); }; + + var tabContainer = widget.Get("MISSION_TABS"); + tabContainer.IsVisible = () => true; + + var optionsTab = tabContainer.Get("OPTIONS_TAB"); + optionsTab.IsHighlighted = () => panel == PanelType.Options; + optionsTab.IsDisabled = () => false; + optionsTab.OnClick = () => panel = PanelType.Options; + + var missionTab = tabContainer.Get("MISSIONINFO_TAB"); + missionTab.IsHighlighted = () => panel == PanelType.MissionInfo; + missionTab.IsDisabled = () => false; + missionTab.OnClick = () => panel = PanelType.MissionInfo; } void OnGameStart() @@ -238,28 +256,16 @@ namespace OpenRA.Mods.Common.Widgets.Logic { selectedMap = preview; - // Cache the rules on a background thread to avoid jank - var difficultyDisabled = true; - var difficulties = new Dictionary(); - var briefingVideo = ""; var briefingVideoVisible = false; var infoVideo = ""; var infoVideoVisible = false; + panel = PanelType.MissionInfo; + new Thread(() => { - var mapDifficulty = preview.WorldActorInfo.TraitInfos() - .FirstOrDefault(sld => sld.ID == "difficulty"); - - if (mapDifficulty != null) - { - difficulty = mapDifficulty.Default; - difficulties = mapDifficulty.Values; - difficultyDisabled = mapDifficulty.Locked; - } - var missionData = preview.WorldActorInfo.TraitInfoOrDefault(); if (missionData != null) { @@ -291,58 +297,107 @@ namespace OpenRA.Mods.Common.Widgets.Logic descriptionPanel.ScrollToTop(); - if (difficultyButton != null) + RebuildOptions(); + } + + void RebuildOptions() + { + if (selectedMap == null || selectedMap.WorldActorInfo == null) + return; + + missionOptions.Clear(); + optionsContainer.RemoveChildren(); + + var allOptions = selectedMap.PlayerActorInfo.TraitInfos() + .Concat(selectedMap.WorldActorInfo.TraitInfos()) + .SelectMany(t => t.LobbyOptions(selectedMap)) + .Where(o => o.IsVisible) + .OrderBy(o => o.DisplayOrder).ToArray(); + + Widget row = null; + var checkboxColumns = new Queue(); + var dropdownColumns = new Queue(); + + var yOffset = 0; + foreach (var option in allOptions.Where(o => o is LobbyBooleanOption)) { - var difficultyName = new CachedTransform(id => preview.GetLocalisedString( - id == null || !difficulties.ContainsKey(id) ? DifficultyNormal : difficulties[id])); + missionOptions[option.Id] = option.DefaultValue; - difficultyButton.IsDisabled = () => difficultyDisabled; - difficultyButton.GetText = () => difficultyName.Update(difficulty); - difficultyButton.OnMouseDown = _ => + if (checkboxColumns.Count == 0) { - var options = difficulties.Select(kv => new DropDownOption - { - Title = preview.GetLocalisedString(kv.Value), - IsSelected = () => difficulty == kv.Key, - OnClick = () => difficulty = kv.Key - }); + row = checkboxRowTemplate.Clone(); + row.Bounds.Y = yOffset; + yOffset += row.Bounds.Height; + foreach (var child in row.Children) + if (child is CheckboxWidget childCheckbox) + checkboxColumns.Enqueue(childCheckbox); - ScrollItemWidget SetupItem(DropDownOption option, ScrollItemWidget template) - { - var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick); - item.Get("LABEL").GetText = () => option.Title; - return item; - } + optionsContainer.AddChild(row); + } - difficultyButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, SetupItem); + var checkbox = checkboxColumns.Dequeue(); + + checkbox.GetText = () => option.Name; + if (option.Description != null) + checkbox.GetTooltipText = () => option.Description; + + checkbox.IsVisible = () => true; + checkbox.IsChecked = () => missionOptions[option.Id] == "True"; + checkbox.IsDisabled = () => option.IsLocked; + checkbox.OnClick = () => + { + if (missionOptions[option.Id] == "True") + missionOptions[option.Id] = "False"; + else + missionOptions[option.Id] = "True"; }; } - if (gameSpeedButton != null) + foreach (var option in allOptions.Where(o => o is not LobbyBooleanOption)) { - var speeds = modData.Manifest.Get().Speeds; - gameSpeed = "default"; + missionOptions[option.Id] = option.DefaultValue; - var speedText = new CachedTransform(s => TranslationProvider.GetString(speeds[s].Name)); - gameSpeedButton.GetText = () => speedText.Update(gameSpeed); - gameSpeedButton.OnMouseDown = _ => + if (dropdownColumns.Count == 0) { - var options = speeds.Select(s => new DropDownOption - { - Title = TranslationProvider.GetString(s.Value.Name), - IsSelected = () => gameSpeed == s.Key, - OnClick = () => gameSpeed = s.Key - }); + row = dropdownRowTemplate.Clone(); + row.Bounds.Y = yOffset; + yOffset += row.Bounds.Height; + foreach (var child in row.Children) + if (child is DropDownButtonWidget dropDown) + dropdownColumns.Enqueue(dropDown); - ScrollItemWidget SetupItem(DropDownOption option, ScrollItemWidget template) + optionsContainer.AddChild(row); + } + + var dropdown = dropdownColumns.Dequeue(); + + dropdown.GetText = () => option.Values[missionOptions[option.Id]]; + if (option.Description != null) + dropdown.GetTooltipText = () => option.Description; + dropdown.IsVisible = () => true; + dropdown.IsDisabled = () => option.IsLocked; + + dropdown.OnMouseDown = _ => + { + ScrollItemWidget SetupItem(KeyValuePair c, ScrollItemWidget template) { - var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick); - item.Get("LABEL").GetText = () => option.Title; + bool IsSelected() => missionOptions[option.Id] == c.Key; + void OnClick() => missionOptions[option.Id] = c.Key; + + var item = ScrollItemWidget.Setup(template, IsSelected, OnClick); + item.Get("LABEL").GetText = () => c.Value; return item; } - gameSpeedButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, SetupItem); + dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", option.Values.Count * 30, option.Values, SetupItem); }; + + var label = row.GetOrNull(dropdown.Id + "_DESC"); + if (label != null) + { + label.GetText = () => option.Name + ":"; + label.IsVisible = () => true; + } } } @@ -432,10 +487,10 @@ namespace OpenRA.Mods.Common.Widgets.Logic selectedMap = modData.MapCache[map]; var orders = new List(); - if (difficulty != null) - orders.Add(Order.Command($"option difficulty {difficulty}")); - orders.Add(Order.Command($"option gamespeed {gameSpeed}")); + foreach (var option in missionOptions) + orders.Add(Order.Command($"option {option.Key} {option.Value}")); + orders.Add(Order.Command($"state {Session.ClientState.Ready}")); var missionData = selectedMap.WorldActorInfo.TraitInfoOrDefault(); @@ -449,12 +504,5 @@ namespace OpenRA.Mods.Common.Widgets.Logic else Game.CreateAndStartLocalServer(selectedMap.Uid, orders); } - - sealed class DropDownOption - { - public string Title; - public Func IsSelected; - public Action OnClick; - } } } diff --git a/mods/cnc/chrome/missionbrowser.yaml b/mods/cnc/chrome/missionbrowser.yaml index 224721e5b2..64e8380be3 100644 --- a/mods/cnc/chrome/missionbrowser.yaml +++ b/mods/cnc/chrome/missionbrowser.yaml @@ -67,42 +67,89 @@ Container@MISSIONBROWSER_PANEL: IgnoreMouseOver: True IgnoreMouseInput: True ShowSpawnPoints: False - ScrollPanel@MISSION_DESCRIPTION_PANEL: + Container@MISSION_DETAIL: Y: 213 Width: PARENT_RIGHT - Height: 157 - TopBottomSpacing: 5 + Height: 170 Children: - Label@MISSION_DESCRIPTION: - X: 4 - Width: PARENT_RIGHT - 32 - VAlign: Top - Font: Small - Label@DIFFICULTY_DESC: - Y: PARENT_BOTTOM - HEIGHT - Width: 56 - Height: 25 - Text: label-mission-info-difficulty-desc - Align: Right - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 61 - Y: PARENT_BOTTOM - HEIGHT - Width: 120 - Height: 25 - Font: Regular - Label@GAMESPEED_DESC: - X: PARENT_RIGHT - WIDTH - 125 - Y: PARENT_BOTTOM - HEIGHT - Width: 120 - Height: 25 - Text: label-mission-info-gamespeed-desc - Align: Right - DropDownButton@GAMESPEED_DROPDOWNBUTTON: - X: PARENT_RIGHT - WIDTH - Y: PARENT_BOTTOM - HEIGHT - Width: 120 - Height: 25 - Font: Regular + ScrollPanel@MISSION_DESCRIPTION_PANEL: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Label@MISSION_DESCRIPTION: + X: 4 + Width: PARENT_RIGHT - 32 + VAlign: Top + Font: Small + ScrollPanel@MISSION_OPTIONS: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Container@CHECKBOX_ROW_TEMPLATE: + Width: PARENT_RIGHT + Height: 30 + Children: + Checkbox@A: + X: 10 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Checkbox@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@DROPDOWN_ROW_TEMPLATE: + Height: 60 + Width: PARENT_RIGHT + Children: + LabelForInput@A_DESC: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: A + DropDownButton@A: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + LabelForInput@B_DESC: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: B + DropDownButton@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@MISSION_TABS: + Width: PARENT_RIGHT + Y: PARENT_BOTTOM - 50 + Children: + Button@MISSIONINFO_TAB: + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-info + Button@OPTIONS_TAB: + X: PARENT_RIGHT / 2 + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-options Button@BACK_BUTTON: Y: PARENT_BOTTOM - 1 Width: 140 diff --git a/mods/cnc/languages/chrome/en.ftl b/mods/cnc/languages/chrome/en.ftl index d9de8b6cce..4fc2ce4090 100644 --- a/mods/cnc/languages/chrome/en.ftl +++ b/mods/cnc/languages/chrome/en.ftl @@ -513,9 +513,9 @@ button-bg-cancel = Back ## missionbrowser.yaml label-missionbrowser-panel-title = Missions -label-mission-info-difficulty-desc = Difficulty: -label-mission-info-gamespeed-desc = Speed: button-missionbrowser-panel-back = Back +button-missionbrowser-panel-mission-info = Mission Info +button-missionbrowser-panel-mission-options = Options button-missionbrowser-panel-start-briefing-video = Watch Briefing button-missionbrowser-panel-stop-briefing-video = Stop Briefing button-missionbrowser-panel-start-info-video = Watch Info Video diff --git a/mods/cnc/languages/difficulties/en.ftl b/mods/cnc/languages/difficulties/en.ftl index 90ad411397..5521c17cd5 100644 --- a/mods/cnc/languages/difficulties/en.ftl +++ b/mods/cnc/languages/difficulties/en.ftl @@ -4,4 +4,5 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard diff --git a/mods/cnc/languages/rules/en.ftl b/mods/cnc/languages/rules/en.ftl index be758e9ab9..a2efaa4f82 100644 --- a/mods/cnc/languages/rules/en.ftl +++ b/mods/cnc/languages/rules/en.ftl @@ -30,9 +30,6 @@ dropdown-map-creeps = .label = Creep Actors .description = Hostile forces spawn on the battlefield -options-difficulty = - .normal = Normal - ## Structures notification-construction-complete = Construction complete. notification-unit-ready = Unit ready. diff --git a/mods/cnc/maps/nod06a/languages/en.ftl b/mods/cnc/maps/nod06a/languages/en.ftl index 2088d2bcc6..309a674b65 100644 --- a/mods/cnc/maps/nod06a/languages/en.ftl +++ b/mods/cnc/maps/nod06a/languages/en.ftl @@ -4,5 +4,6 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard .tough = Real tough guy diff --git a/mods/cnc/maps/nod06b/languages/en.ftl b/mods/cnc/maps/nod06b/languages/en.ftl index 2088d2bcc6..309a674b65 100644 --- a/mods/cnc/maps/nod06b/languages/en.ftl +++ b/mods/cnc/maps/nod06b/languages/en.ftl @@ -4,5 +4,6 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard .tough = Real tough guy diff --git a/mods/common/chrome/missionbrowser.yaml b/mods/common/chrome/missionbrowser.yaml index b119537b05..79c82bb1f1 100644 --- a/mods/common/chrome/missionbrowser.yaml +++ b/mods/common/chrome/missionbrowser.yaml @@ -61,42 +61,89 @@ Background@MISSIONBROWSER_PANEL: IgnoreMouseOver: True IgnoreMouseInput: True ShowSpawnPoints: False - ScrollPanel@MISSION_DESCRIPTION_PANEL: + Container@MISSION_DETAIL: Y: 212 Width: PARENT_RIGHT - Height: 143 - TopBottomSpacing: 5 + Height: 155 Children: - Label@MISSION_DESCRIPTION: - X: 4 - Width: PARENT_RIGHT - 32 - VAlign: Top - Font: Small - Label@DIFFICULTY_DESC: - Y: PARENT_BOTTOM - HEIGHT - Width: 56 - Height: 25 - Text: label-mission-info-difficulty-desc - Align: Right - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 61 - Y: PARENT_BOTTOM - HEIGHT - Width: 135 - Height: 25 - Font: Regular - Label@GAMESPEED_DESC: - X: PARENT_RIGHT - WIDTH - 115 - Y: PARENT_BOTTOM - HEIGHT - Width: 120 - Height: 25 - Text: label-mission-info-gamespeed-desc - Align: Right - DropDownButton@GAMESPEED_DROPDOWNBUTTON: - X: PARENT_RIGHT - WIDTH - Y: PARENT_BOTTOM - HEIGHT - Width: 110 - Height: 25 - Font: Regular + ScrollPanel@MISSION_DESCRIPTION_PANEL: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Label@MISSION_DESCRIPTION: + X: 4 + Width: PARENT_RIGHT - 32 + VAlign: Top + Font: Small + ScrollPanel@MISSION_OPTIONS: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Container@CHECKBOX_ROW_TEMPLATE: + Width: PARENT_RIGHT + Height: 30 + Children: + Checkbox@A: + X: 10 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Checkbox@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@DROPDOWN_ROW_TEMPLATE: + Height: 60 + Width: PARENT_RIGHT + Children: + LabelForInput@A_DESC: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: A + DropDownButton@A: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + LabelForInput@B_DESC: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: B + DropDownButton@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@MISSION_TABS: + Width: PARENT_RIGHT + Y: PARENT_BOTTOM - 50 + Children: + Button@MISSIONINFO_TAB: + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-info + Button@OPTIONS_TAB: + X: PARENT_RIGHT / 2 + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-options Button@START_BRIEFING_VIDEO_BUTTON: X: 20 Y: PARENT_BOTTOM - 45 diff --git a/mods/common/languages/chrome/en.ftl b/mods/common/languages/chrome/en.ftl index fb4fd5f9ab..e7dbfbde0b 100644 --- a/mods/common/languages/chrome/en.ftl +++ b/mods/common/languages/chrome/en.ftl @@ -368,6 +368,8 @@ button-missionbrowser-panel-start-info-video = Watch Info Video button-missionbrowser-panel-stop-info-video = Stop Info Video button-missionbrowser-panel-startgame = Play button-missionbrowser-panel-back = Back +button-missionbrowser-panel-mission-info = Mission Info +button-missionbrowser-panel-mission-options = Options ## multiplayer-browser.yaml label-multiplayer-panel-title = Multiplayer diff --git a/mods/d2k/chrome/missionbrowser.yaml b/mods/d2k/chrome/missionbrowser.yaml index ca834b212f..ecdf76fb96 100644 --- a/mods/d2k/chrome/missionbrowser.yaml +++ b/mods/d2k/chrome/missionbrowser.yaml @@ -42,32 +42,34 @@ Background@MISSIONBROWSER_PANEL: Height: 25 TooltipContainer: TOOLTIP_CONTAINER TooltipTemplate: SIMPLE_TOOLTIP - Label@DIFFICULTY_DESC: - X: 210 - WIDTH - 125 - Y: 468 - Width: 56 + Button@START_BRIEFING_VIDEO_BUTTON: + X: 20 + Y: 455 + Width: 190 Height: 25 - Text: label-missionbrowser-panel-difficulty-desc - Align: Right - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 210 - WIDTH - Y: 468 - Width: 120 + Text: button-missionbrowser-panel-start-briefing-video + Font: Bold + Button@STOP_BRIEFING_VIDEO_BUTTON: + X: 20 + Y: 455 + HEIGHT + Width: 190 Height: 25 - Font: Regular - Label@GAMESPEED_DESC: - X: 210 - WIDTH - 125 - Y: 508 - Width: 120 + Text: button-missionbrowser-panel-stop-briefing-video + Font: Bold + Button@START_INFO_VIDEO_BUTTON: + X: 20 + Y: 455 + 2 * HEIGHT + Width: 190 Height: 25 - Text: label-missionbrowser-panel-gamespeed-desc - Align: Right - DropDownButton@GAMESPEED_DROPDOWNBUTTON: - X: 210 - WIDTH - Y: 508 - Width: 120 + Text: button-missionbrowser-panel-start-info-video + Font: Bold + Button@STOP_INFO_VIDEO_BUTTON: + X: 20 + Y: 455 + 3 * HEIGHT + Width: 190 Height: 25 - Font: Regular + Text: button-missionbrowser-panel-stop-info-video + Font: Bold Container@MISSION_INFO: X: 220 Y: 50 @@ -87,45 +89,90 @@ Background@MISSIONBROWSER_PANEL: IgnoreMouseOver: True IgnoreMouseInput: True ShowSpawnPoints: False - ScrollPanel@MISSION_DESCRIPTION_PANEL: + Container@MISSION_DETAIL: Y: 337 Width: PARENT_RIGHT Height: 146 Children: - Label@MISSION_DESCRIPTION: - X: 4 - Y: 1 - Width: PARENT_RIGHT - 32 - VAlign: Top - Font: Small - Button@START_BRIEFING_VIDEO_BUTTON: + ScrollPanel@MISSION_DESCRIPTION_PANEL: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Label@MISSION_DESCRIPTION: + X: 4 + Width: PARENT_RIGHT - 32 + VAlign: Top + Font: Small + ScrollPanel@MISSION_OPTIONS: + Height: PARENT_BOTTOM + Width: PARENT_RIGHT + TopBottomSpacing: 5 + Children: + Container@CHECKBOX_ROW_TEMPLATE: + Width: PARENT_RIGHT + Height: 30 + Children: + Checkbox@A: + X: 10 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Checkbox@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 25 + Height: 20 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@DROPDOWN_ROW_TEMPLATE: + Height: 60 + Width: PARENT_RIGHT + Children: + LabelForInput@A_DESC: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: A + DropDownButton@A: + X: 10 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + LabelForInput@B_DESC: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Height: 20 + Visible: False + For: B + DropDownButton@B: + X: PARENT_RIGHT / 2 + 5 + Width: PARENT_RIGHT / 2 - 35 + Y: 25 + Height: 25 + Visible: False + TooltipContainer: TOOLTIP_CONTAINER + Container@MISSION_TABS: + Width: 320 X: 220 - Y: PARENT_BOTTOM - 45 - Width: 130 - Height: 25 - Text: button-missionbrowser-panel-start-briefing-video - Font: Bold - Button@STOP_BRIEFING_VIDEO_BUTTON: - X: 220 - Y: PARENT_BOTTOM - 45 - Width: 130 - Height: 25 - Text: button-missionbrowser-panel-stop-briefing-video - Font: Bold - Button@START_INFO_VIDEO_BUTTON: - X: 360 - Y: PARENT_BOTTOM - 45 - Width: 130 - Height: 25 - Text: button-missionbrowser-panel-start-info-video - Font: Bold - Button@STOP_INFO_VIDEO_BUTTON: - X: 360 - Y: PARENT_BOTTOM - 45 - Width: 130 - Height: 25 - Text: button-missionbrowser-panel-stop-info-video - Font: Bold + Y: PARENT_BOTTOM - 84 + Children: + Button@MISSIONINFO_TAB: + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-info + Button@OPTIONS_TAB: + X: PARENT_RIGHT / 2 + Width: PARENT_RIGHT / 2 + Y: 25 + Height: 28 + Font: Bold + Text: button-missionbrowser-panel-mission-options Button@STARTGAME_BUTTON: X: PARENT_RIGHT - 140 - 130 Y: PARENT_BOTTOM - 45 diff --git a/mods/d2k/languages/chrome/en.ftl b/mods/d2k/languages/chrome/en.ftl index a9af8670ca..5fbcd9b356 100644 --- a/mods/d2k/languages/chrome/en.ftl +++ b/mods/d2k/languages/chrome/en.ftl @@ -245,8 +245,6 @@ label-update-notice-b = Download the latest version from www.openra.net ## missionbrowser.yaml label-missionbrowser-panel-title = Missions -label-missionbrowser-panel-difficulty-desc = Difficulty: -label-missionbrowser-panel-gamespeed-desc = Speed: button-missionbrowser-panel-start-briefing-video = Watch Briefing button-missionbrowser-panel-stop-briefing-video = Stop Briefing button-missionbrowser-panel-start-info-video = Watch Info Video diff --git a/mods/d2k/languages/difficulties/en.ftl b/mods/d2k/languages/difficulties/en.ftl index 90ad411397..5521c17cd5 100644 --- a/mods/d2k/languages/difficulties/en.ftl +++ b/mods/d2k/languages/difficulties/en.ftl @@ -4,4 +4,5 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard diff --git a/mods/d2k/languages/rules/en.ftl b/mods/d2k/languages/rules/en.ftl index 3550c79bac..abd0975b90 100644 --- a/mods/d2k/languages/rules/en.ftl +++ b/mods/d2k/languages/rules/en.ftl @@ -31,9 +31,6 @@ options-starting-units = .light-support = Light Support .heavy-support = Heavy Support -options-difficulty = - .normal = Normal - ## Arrakis notification-worm-attack = Worm attack. notification-worm-sign = Worm sign. diff --git a/mods/ra/languages/chrome/en.ftl b/mods/ra/languages/chrome/en.ftl index c933e1fa56..6820cff21f 100644 --- a/mods/ra/languages/chrome/en.ftl +++ b/mods/ra/languages/chrome/en.ftl @@ -2,10 +2,6 @@ label-gamesave-loading-screen-title = Loading Saved Game label-gamesave-loading-screen-desc = Press Escape to cancel loading and return to the main menu -## missionbrowser.yaml -label-mission-info-difficulty-desc = Difficulty: -label-mission-info-gamespeed-desc = Speed: - ## ingame-observer.yaml button-observer-widgets-pause-tooltip = Pause button-observer-widgets-play-tooltip = Play diff --git a/mods/ra/languages/difficulties/en.ftl b/mods/ra/languages/difficulties/en.ftl index 90ad411397..5521c17cd5 100644 --- a/mods/ra/languages/difficulties/en.ftl +++ b/mods/ra/languages/difficulties/en.ftl @@ -4,4 +4,5 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard diff --git a/mods/ra/languages/rules/en.ftl b/mods/ra/languages/rules/en.ftl index bd9a74e183..e710717037 100644 --- a/mods/ra/languages/rules/en.ftl +++ b/mods/ra/languages/rules/en.ftl @@ -32,9 +32,6 @@ options-starting-units = .light-support = Light Support .heavy-support = Heavy Support -options-difficulty = - .normal = Normal - ## Structures notification-construction-complete = Construction complete. notification-unit-ready = Unit ready. diff --git a/mods/ra/maps/allies-02/languages/en.ftl b/mods/ra/maps/allies-02/languages/en.ftl index 2088d2bcc6..309a674b65 100644 --- a/mods/ra/maps/allies-02/languages/en.ftl +++ b/mods/ra/maps/allies-02/languages/en.ftl @@ -4,5 +4,6 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard .tough = Real tough guy diff --git a/mods/ra/maps/allies-04/languages/en.ftl b/mods/ra/maps/allies-04/languages/en.ftl index 2088d2bcc6..309a674b65 100644 --- a/mods/ra/maps/allies-04/languages/en.ftl +++ b/mods/ra/maps/allies-04/languages/en.ftl @@ -4,5 +4,6 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard .tough = Real tough guy diff --git a/mods/ra/maps/allies-05a/languages/en.ftl b/mods/ra/maps/allies-05a/languages/en.ftl index 2088d2bcc6..309a674b65 100644 --- a/mods/ra/maps/allies-05a/languages/en.ftl +++ b/mods/ra/maps/allies-05a/languages/en.ftl @@ -4,5 +4,6 @@ dropdown-difficulty = options-difficulty = .easy = Easy + .normal = Normal .hard = Hard .tough = Real tough guy diff --git a/mods/ts/languages/chrome/en.ftl b/mods/ts/languages/chrome/en.ftl index 141cb6835c..1db5b3e349 100644 --- a/mods/ts/languages/chrome/en.ftl +++ b/mods/ts/languages/chrome/en.ftl @@ -13,10 +13,6 @@ label-voxel-selector-pitch = Pitch label-voxel-selector-yaw = Yaw button-assetbrowser-panel-close = Close -## missionbrowser.yaml -label-mission-info-difficulty-desc = Difficulty: -label-mission-info-gamespeed-desc = Speed: - ## color-picker.yaml button-color-chooser-random = Random button-color-chooser-store = Store diff --git a/mods/ts/languages/rules/en.ftl b/mods/ts/languages/rules/en.ftl index 6b9d936cc3..f193cde92b 100644 --- a/mods/ts/languages/rules/en.ftl +++ b/mods/ts/languages/rules/en.ftl @@ -29,9 +29,6 @@ dropdown-map-creeps = .label = Creep Actors .description = Hostile forces spawn on the battlefield -options-difficulty = - .normal = Normal - ## Structures notification-construction-complete = Construction complete. notification-unit-ready = Unit ready.