diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index 1f2cfadb07..d2c2a23f06 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -30,6 +30,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic readonly LabelWidget description; readonly SpriteFont descriptionFont; readonly DropDownButtonWidget difficultyButton; + readonly DropDownButtonWidget gameSpeedButton; readonly ButtonWidget startBriefingVideoButton; readonly ButtonWidget stopBriefingVideoButton; readonly ButtonWidget startInfoVideoButton; @@ -46,6 +47,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic PlayingVideo playingVideo; string difficulty; + string gameSpeed; [ObjectCreator.UseCtor] public MissionBrowserLogic(Widget widget, World world, Action onStart, Action onExit) @@ -77,6 +79,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic descriptionFont = Game.Renderer.Fonts[description.Font]; difficultyButton = widget.Get("DIFFICULTY_DROPDOWNBUTTON"); + gameSpeedButton = widget.GetOrNull("GAMESPEED_DROPDOWNBUTTON"); startBriefingVideoButton = widget.Get("START_BRIEFING_VIDEO_BUTTON"); stopBriefingVideoButton = widget.Get("STOP_BRIEFING_VIDEO_BUTTON"); @@ -186,27 +189,57 @@ namespace OpenRA.Mods.Common.Widgets.Logic descriptionPanel.ScrollToTop(); descriptionPanel.Layout.AdjustChildren(); - difficultyButton.IsVisible = () => map.Options.Difficulties.Any(); - if (!map.Options.Difficulties.Any()) - return; - - difficulty = map.Options.Difficulties.First(); - difficultyButton.OnMouseDown = _ => + if (difficultyButton != null) { - var options = map.Options.Difficulties.Select(d => new DropDownOption + difficultyButton.IsDisabled = () => !map.Options.Difficulties.Any(); + + difficulty = map.Options.Difficulties.FirstOrDefault(); + difficultyButton.GetText = () => difficulty ?? "Normal"; + difficultyButton.OnMouseDown = _ => { - Title = d, - IsSelected = () => difficulty == d, - OnClick = () => difficulty = d - }); - Func setupItem = (option, template) => - { - var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick); - item.Get("LABEL").GetText = () => option.Title; - return item; + var options = map.Options.Difficulties.Select(d => new DropDownOption + { + Title = d, + IsSelected = () => difficulty == d, + OnClick = () => difficulty = d + }); + + Func setupItem = (option, template) => + { + var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick); + item.Get("LABEL").GetText = () => option.Title; + return item; + }; + + difficultyButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem); }; - difficultyButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem); - }; + } + + if (gameSpeedButton != null) + { + var speeds = Game.ModData.Manifest.Get().Speeds; + gameSpeed = "default"; + + gameSpeedButton.GetText = () => speeds[gameSpeed].Name; + gameSpeedButton.OnMouseDown = _ => + { + var options = speeds.Select(s => new DropDownOption + { + Title = s.Value.Name, + IsSelected = () => gameSpeed == s.Key, + OnClick = () => gameSpeed = s.Key + }); + + Func setupItem = (option, template) => + { + var item = ScrollItemWidget.Setup(template, option.IsSelected, option.OnClick); + item.Get("LABEL").GetText = () => option.Title; + return item; + }; + + gameSpeedButton.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", options.Count() * 30, options, setupItem); + }; + } } float cachedSoundVolume; @@ -280,6 +313,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic Action lobbyReady = null; lobbyReady = () => { + om.IssueOrder(Order.Command("gamespeed {0}".F(gameSpeed))); om.IssueOrder(Order.Command("difficulty {0}".F(difficulty))); Game.LobbyInfoChanged -= lobbyReady; onStart(); diff --git a/mods/cnc/chrome/missionbrowser.yaml b/mods/cnc/chrome/missionbrowser.yaml index b38435c7e2..e1ce1cb06e 100644 --- a/mods/cnc/chrome/missionbrowser.yaml +++ b/mods/cnc/chrome/missionbrowser.yaml @@ -21,7 +21,7 @@ Container@MISSIONBROWSER_PANEL: X: 15 Y: 15 Width: 239 - Height: 307 + Height: 347 Children: ScrollItem@HEADER: Width: PARENT_RIGHT-27 @@ -66,7 +66,7 @@ Container@MISSIONBROWSER_PANEL: ScrollPanel@MISSION_DESCRIPTION_PANEL: Y: 213 Width: PARENT_RIGHT - Height: 134 + Height: 99 Children: Label@MISSION_DESCRIPTION: X: 4 @@ -74,13 +74,31 @@ Container@MISSIONBROWSER_PANEL: Width: PARENT_RIGHT - 32 VAlign: Top Font: Small - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 15 - Y: 337 - Width: 239 - Height: 25 - Text: Difficulty - Font: Regular + Label@DIFFICULTY_DESC: + Y: 322 + Width: 56 + Height: 25 + Text: Difficulty: + Align: Right + DropDownButton@DIFFICULTY_DROPDOWNBUTTON: + X: 61 + Y: 322 + Width: 120 + Height: 25 + Font: Regular + Label@GAMESPEED_DESC: + X: PARENT_RIGHT - WIDTH - 125 + Y: 322 + Width: 120 + Height: 25 + Text: Speed: + Align: Right + DropDownButton@GAMESPEED_DROPDOWNBUTTON: + X: PARENT_RIGHT - WIDTH + Y: 322 + Width: 120 + Height: 25 + Font: Regular Button@BACK_BUTTON: Y: 376 Width: 140 diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index f029dd1d5e..8bbcfa44b0 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -223,7 +223,7 @@ GameSpeeds: Timestep: 50 OrderLatency: 3 default: - Name: Default + Name: Normal Timestep: 40 OrderLatency: 3 faster: diff --git a/mods/d2k/chrome/missionbrowser.yaml b/mods/d2k/chrome/missionbrowser.yaml index 290406cc5a..3fd6e2484f 100644 --- a/mods/d2k/chrome/missionbrowser.yaml +++ b/mods/d2k/chrome/missionbrowser.yaml @@ -2,8 +2,8 @@ Background@MISSIONBROWSER_PANEL: Logic: MissionBrowserLogic X: (WINDOW_RIGHT - WIDTH)/2 Y: (WINDOW_BOTTOM - HEIGHT)/2 - Width: 960 - Height: 690 + Width: 880 + Height: 591 Children: Label@MISSIONBROWSER_TITLE: Y: 20 @@ -15,8 +15,8 @@ Background@MISSIONBROWSER_PANEL: ScrollPanel@MISSION_LIST: X: 20 Y: 50 - Width: 270 - Height: 542 + Width: 190 + Height: 405 Children: ScrollItem@HEADER: BaseName: scrollheader @@ -39,15 +39,41 @@ Background@MISSIONBROWSER_PANEL: X: 10 Width: PARENT_RIGHT-20 Height: 25 + Label@DIFFICULTY_DESC: + X: 210 - WIDTH - 125 + Y: 468 + Width: 56 + Height: 25 + Text: Difficulty: + Align: Right + DropDownButton@DIFFICULTY_DROPDOWNBUTTON: + X: 210 - WIDTH + Y: 468 + Width: 120 + Height: 25 + Font: Regular + Label@GAMESPEED_DESC: + X: 210 - WIDTH - 125 + Y: 508 + Width: 120 + Height: 25 + Text: Speed: + Align: Right + DropDownButton@GAMESPEED_DROPDOWNBUTTON: + X: 210 - WIDTH + Y: 508 + Width: 120 + Height: 25 + Font: Regular Container@MISSION_INFO: - X: 300 + X: 220 Y: 50 Width: 642 Height: 800 Children: Background@MISSION_BG: Width: PARENT_RIGHT - Height: 402 + Height: 327 Background: dialog3 Children: MapPreview@MISSION_PREVIEW: @@ -59,9 +85,9 @@ Background@MISSIONBROWSER_PANEL: IgnoreMouseInput: True ShowSpawnPoints: False ScrollPanel@MISSION_DESCRIPTION_PANEL: - Y: 412 + Y: 337 Width: PARENT_RIGHT - Height: 170 + Height: 146 Children: Label@MISSION_DESCRIPTION: X: 4 @@ -70,28 +96,28 @@ Background@MISSIONBROWSER_PANEL: VAlign: Top Font: Small Button@START_BRIEFING_VIDEO_BUTTON: - X: 20 + X: 220 Y: PARENT_BOTTOM - 45 Width: 130 Height: 25 Text: Watch Briefing Font: Bold Button@STOP_BRIEFING_VIDEO_BUTTON: - X: 20 + X: 220 Y: PARENT_BOTTOM - 45 Width: 130 Height: 25 Text: Stop Briefing Font: Bold Button@START_INFO_VIDEO_BUTTON: - X: 160 + X: 360 Y: PARENT_BOTTOM - 45 Width: 130 Height: 25 Text: Watch Info Video Font: Bold Button@STOP_INFO_VIDEO_BUTTON: - X: 160 + X: 360 Y: PARENT_BOTTOM - 45 Width: 130 Height: 25 @@ -112,26 +138,19 @@ Background@MISSIONBROWSER_PANEL: Text: Back Font: Bold Key: escape - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 20 - Y: 632 - HEIGHT - Width: 270 - Height: 25 - Text: Difficulty - Font: Bold Background@MISSION_BIN: - X: 300 + X: 220 Y: 50 Width: 642 - Height: 402 + Height: 483 Background: dialog3 Children: VqaPlayer@MISSION_VIDEO: X: 1 Y: 1 Width: 640 - Height: 400 - AspectRatio: 1 + Height: 480 + AspectRatio: 1.2 DrawOverlay: False Background@FULLSCREEN_PLAYER: Width: WINDOW_RIGHT diff --git a/mods/d2k/maps/atreides-01a/map.png b/mods/d2k/maps/atreides-01a/map.png index 847106f0a9..1f85ea0aa9 100644 Binary files a/mods/d2k/maps/atreides-01a/map.png and b/mods/d2k/maps/atreides-01a/map.png differ diff --git a/mods/d2k/maps/atreides-01b/map.png b/mods/d2k/maps/atreides-01b/map.png index 76b7b1bb57..1109584d87 100644 Binary files a/mods/d2k/maps/atreides-01b/map.png and b/mods/d2k/maps/atreides-01b/map.png differ diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 98f1770ed2..e645b40a52 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -199,7 +199,7 @@ GameSpeeds: Timestep: 50 OrderLatency: 3 default: - Name: Default + Name: Normal Timestep: 40 OrderLatency: 3 faster: diff --git a/mods/ra/chrome/missionbrowser.yaml b/mods/ra/chrome/missionbrowser.yaml index 573016812a..b7a155a255 100644 --- a/mods/ra/chrome/missionbrowser.yaml +++ b/mods/ra/chrome/missionbrowser.yaml @@ -16,7 +16,7 @@ Background@MISSIONBROWSER_PANEL: X: 20 Y: 50 Width: 270 - Height: 332 + Height: 377 Children: ScrollItem@HEADER: BaseName: scrollheader @@ -61,7 +61,7 @@ Background@MISSIONBROWSER_PANEL: ScrollPanel@MISSION_DESCRIPTION_PANEL: Y: 212 Width: PARENT_RIGHT - Height: 165 + Height: 130 Children: Label@MISSION_DESCRIPTION: X: 4 @@ -69,6 +69,32 @@ Background@MISSIONBROWSER_PANEL: Width: PARENT_RIGHT - 32 VAlign: Top Font: Small + Label@DIFFICULTY_DESC: + Y: 352 + Width: 56 + Height: 25 + Text: Difficulty: + Align: Right + DropDownButton@DIFFICULTY_DROPDOWNBUTTON: + X: 61 + Y: 352 + Width: 120 + Height: 25 + Font: Regular + Label@GAMESPEED_DESC: + X: PARENT_RIGHT - WIDTH - 125 + Y: 352 + Width: 120 + Height: 25 + Text: Speed: + Align: Right + DropDownButton@GAMESPEED_DROPDOWNBUTTON: + X: PARENT_RIGHT - WIDTH + Y: 352 + Width: 120 + Height: 25 + Font: Regular + Button@START_BRIEFING_VIDEO_BUTTON: X: 20 Y: PARENT_BOTTOM - 45 @@ -112,13 +138,6 @@ Background@MISSIONBROWSER_PANEL: Text: Back Font: Bold Key: escape - DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X: 20 - Y: 427 - HEIGHT - Width: 270 - Height: 25 - Text: Difficulty - Font: Bold Background@MISSION_BIN: X: 20 Y: 50 diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 50140769e9..4d1c8226fe 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -222,7 +222,7 @@ GameSpeeds: Timestep: 50 OrderLatency: 3 default: - Name: Default + Name: Normal Timestep: 40 OrderLatency: 3 faster: diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index 9ff47d5397..a082b8b627 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -263,7 +263,7 @@ GameSpeeds: Timestep: 50 OrderLatency: 3 default: - Name: Default + Name: Normal Timestep: 40 OrderLatency: 3 faster: