diff --git a/OpenRA.Game/Graphics/ShroudRenderer.cs b/OpenRA.Game/Graphics/ShroudRenderer.cs index 3a8358ae2f..3f8ef3ed2e 100644 --- a/OpenRA.Game/Graphics/ShroudRenderer.cs +++ b/OpenRA.Game/Graphics/ShroudRenderer.cs @@ -15,8 +15,8 @@ namespace OpenRA.Graphics { public class ShroudRenderer { + World world; Map map; - ShroudInfo shroudInfo; Sprite[] shadowBits = Game.modData.SpriteLoader.LoadAllSprites("shadow"); Sprite[,] sprites, fogSprites; int shroudHash; @@ -46,8 +46,8 @@ namespace OpenRA.Graphics public ShroudRenderer(World world) { + this.world = world; this.map = world.Map; - shroudInfo = Rules.Info["player"].Traits.Get(); sprites = new Sprite[map.MapSize.X, map.MapSize.Y]; fogSprites = new Sprite[map.MapSize.X, map.MapSize.Y]; @@ -152,9 +152,10 @@ namespace OpenRA.Graphics { if (initializePalettes) { - if (shroudInfo.Fog) + if (world.LobbyInfo.GlobalSettings.Fog) fogPalette = wr.Palette("fog"); - shroudPalette = wr.Palette("shroud"); + + shroudPalette = world.LobbyInfo.GlobalSettings.Fog ? wr.Palette("shroud") : wr.Palette("shroudfog"); initializePalettes = false; } @@ -165,7 +166,7 @@ namespace OpenRA.Graphics // We draw the shroud when disabled to hide the sharp map edges DrawShroud(wr, clipRect, sprites, shroudPalette); - if (shroudInfo.Fog) + if (world.LobbyInfo.GlobalSettings.Fog) DrawShroud(wr, clipRect, fogSprites, fogPalette); } diff --git a/OpenRA.Game/Network/Session.cs b/OpenRA.Game/Network/Session.cs index d6e52d77ad..7fe75b715f 100644 --- a/OpenRA.Game/Network/Session.cs +++ b/OpenRA.Game/Network/Session.cs @@ -92,6 +92,8 @@ namespace OpenRA.Network public bool Dedicated; public string Difficulty; public bool Crates = true; + public bool Shroud = true; + public bool Fog = true; public string StartingUnitsClass = "default"; public bool AllowVersionMismatch; } diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index 2b87e4b872..86fb52a6a5 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -18,14 +18,11 @@ namespace OpenRA.Traits { public class ShroudInfo : ITraitInfo { - public readonly bool Shroud = true; - public readonly bool Fog = true; - public object Create(ActorInitializer init) { return new Shroud(init.self, this); } + public object Create(ActorInitializer init) { return new Shroud(init.self); } } public class Shroud { - public ShroudInfo Info; Actor self; Map map; @@ -42,9 +39,8 @@ namespace OpenRA.Traits public int Hash { get; private set; } - public Shroud(Actor self, ShroudInfo info) + public Shroud(Actor self) { - Info = info; this.self = self; map = self.World.Map; @@ -58,7 +54,7 @@ namespace OpenRA.Traits self.World.ActorAdded += AddShroudGeneration; self.World.ActorRemoved += RemoveShroudGeneration; - if (!info.Shroud) + if (!self.World.LobbyInfo.GlobalSettings.Shroud) ExploredBounds = map.Bounds; } @@ -252,7 +248,7 @@ namespace OpenRA.Traits if (!map.IsInMap(x, y)) return false; - if (!Info.Shroud) + if (!self.World.LobbyInfo.GlobalSettings.Shroud) return true; return explored[x, y] && (generatedShroudCount[x, y] == 0 || visibleCount[x, y] > 0); @@ -271,7 +267,7 @@ namespace OpenRA.Traits if (x < 0 || x >= map.MapSize.X || y < 0 || y >= map.MapSize.Y) return false; - if (!Info.Fog) + if (!self.World.LobbyInfo.GlobalSettings.Fog) return true; return visibleCount[x, y] > 0; diff --git a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs index 6b28a1b7a7..a20246f745 100644 --- a/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs +++ b/OpenRA.Mods.RA/ServerTraits/LobbyCommands.cs @@ -326,6 +326,32 @@ namespace OpenRA.Mods.RA.Server server.SyncLobbyInfo(); return true; }}, + { "shroud", + s => + { + if (!client.IsAdmin) + { + server.SendOrderTo(conn, "Message", "Only the host can set that option"); + return true; + } + + bool.TryParse(s, out server.lobbyInfo.GlobalSettings.Shroud); + server.SyncLobbyInfo(); + return true; + }}, + { "fog", + s => + { + if (!client.IsAdmin) + { + server.SendOrderTo(conn, "Message", "Only the host can set that option"); + return true; + } + + bool.TryParse(s, out server.lobbyInfo.GlobalSettings.Fog); + server.SyncLobbyInfo(); + return true; + }}, { "assignteams", s => { diff --git a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs index d8869f06d0..73841e332b 100644 --- a/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs +++ b/OpenRA.Mods.RA/Widgets/Logic/LobbyLogic.cs @@ -360,6 +360,24 @@ namespace OpenRA.Mods.RA.Widgets.Logic optionsBin.Get("STARTINGUNITS_DESC").IsVisible = startingUnits.IsVisible; } + var enableShroud = optionsBin.GetOrNull("SHROUD_CHECKBOX"); + if (enableShroud != null) + { + enableShroud.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.Shroud; + enableShroud.IsDisabled = configurationDisabled; + enableShroud.OnClick = () => orderManager.IssueOrder(Order.Command( + "shroud {0}".F(!orderManager.LobbyInfo.GlobalSettings.Shroud))); + }; + + var enableFog = optionsBin.GetOrNull("FOG_CHECKBOX"); + if (enableFog != null) + { + enableFog.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.Fog; + enableFog.IsDisabled = configurationDisabled; + enableFog.OnClick = () => orderManager.IssueOrder(Order.Command( + "fog {0}".F(!orderManager.LobbyInfo.GlobalSettings.Fog))); + }; + var disconnectButton = lobby.Get("DISCONNECT_BUTTON"); disconnectButton.OnClick = () => { CloseWindow(); onExit(); }; diff --git a/mods/cnc/chrome/dialogs.yaml b/mods/cnc/chrome/dialogs.yaml index deefa547d7..a0ebdc245a 100644 --- a/mods/cnc/chrome/dialogs.yaml +++ b/mods/cnc/chrome/dialogs.yaml @@ -206,45 +206,57 @@ Background@LOBBY_OPTIONS_BIN: Children: Label@TITLE: X:0 - Y:50 + Y:40 Width:PARENT_RIGHT Height:25 Font:Bold Align:Center Text: Map Options Checkbox@ALLOWCHEATS_CHECKBOX: - X:150 - Y:80 + X:80 + Y:75 Width:230 Height:20 - Text:Enable Cheats / Debug Menu + Text:Cheats / Debug Menu Checkbox@CRATES_CHECKBOX: - X:150 + X:80 Y:110 Width:230 Height:20 - Text:Enable Crates + Text:Crates + Checkbox@SHROUD_CHECKBOX: + X:310 + Y:75 + Width:230 + Height:20 + Text:Shroud + Checkbox@FOG_CHECKBOX: + X:310 + Y:110 + Width:230 + Height:20 + Text:Fog of War Label@STARTINGUNITS_DESC: - X:150 - Y:140 + X:135 + Y:142 Width:120 Height:25 Text:Starting Units: DropDownButton@STARTINGUNITS_DROPDOWNBUTTON: - X:245 - Y:140 + X:230 + Y:142 Width:140 Height:25 Font:Bold Label@DIFFICULTY_DESC: - X:150 - Y:170 + X:125 + Y:177 Width:120 Height:25 Text:Mission Difficulty: DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X:265 - Y:170 + X:230 + Y:177 Width:100 Height:25 - Font:Bold \ No newline at end of file + Font:Bold diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 0c325bed6b..0ac21865b0 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -123,6 +123,8 @@ LobbyDefaults: Crates: true StartingUnitsClass: default FragileAlliances: false + Shroud: true + Fog: true ChromeMetrics: mods/cnc/metrics.yaml diff --git a/mods/cnc/rules/system.yaml b/mods/cnc/rules/system.yaml index 0da2d447c6..823f799146 100644 --- a/mods/cnc/rules/system.yaml +++ b/mods/cnc/rules/system.yaml @@ -264,6 +264,9 @@ World: ShroudPalette@fog: Name: fog Type: Fog + ShroudPalette@combined: + Name: shroudfog + Type: Combined Country@gdi: Name: GDI Race: gdi diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 0509fe4abd..1241b90666 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -109,6 +109,8 @@ LobbyDefaults: Crates: true StartingUnitsClass: default FragileAlliances: false + Shroud: false + Fog: true ChromeMetrics: mods/d2k/metrics.yaml diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 0241c1bd2c..80c271f178 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -342,6 +342,9 @@ World: ShroudPalette@fog: Name: fog Type: Fog + ShroudPalette@combined: + Name: shroudfog + Type: Combined Country@Atreides: Name: Atreides Race: atreides diff --git a/mods/ra/chrome/lobby-dialogs.yaml b/mods/ra/chrome/lobby-dialogs.yaml index 3e5c90b046..f26378c3b4 100644 --- a/mods/ra/chrome/lobby-dialogs.yaml +++ b/mods/ra/chrome/lobby-dialogs.yaml @@ -59,39 +59,63 @@ Background@LOBBY_OPTIONS_BIN: Children: Label@TITLE: X:0 - Y:50 + Y:40 Width:PARENT_RIGHT Height:25 Font:Bold Align:Center Text: Map Options Checkbox@ALLOWCHEATS_CHECKBOX: - X:150 - Y:80 - Width:220 + X:80 + Y:75 + Width:230 Height:20 - Text:Enable Cheats / Debug Menu - Checkbox@CRATES_CHECKBOX: - X:150 + Text:Cheats / Debug Menu + Checkbox@FRAGILEALLIANCES_CHECKBOX: + X:80 Y:110 Width:220 Height:20 - Text:Enable Crates - Checkbox@FRAGILEALLIANCES_CHECKBOX: - X:150 - Y:140 - Width:220 - Height:20 Text:Allow Team Changes + Checkbox@CRATES_CHECKBOX: + X:80 + Y:145 + Width:230 + Height:20 + Text:Crates + Checkbox@SHROUD_CHECKBOX: + X:310 + Y:75 + Width:230 + Height:20 + Text:Shroud + Checkbox@FOG_CHECKBOX: + X:310 + Y:110 + Width:230 + Height:20 + Text:Fog of War + Label@STARTINGUNITS_DESC: + X:215 + Y:142 + Width:120 + Height:25 + Text:Starting Units: + DropDownButton@STARTINGUNITS_DROPDOWNBUTTON: + X:310 + Y:142 + Width:140 + Height:25 + Font:Bold Label@DIFFICULTY_DESC: - X:150 - Y:170 + X:195 + Y:177 Width:120 Height:25 Text:Mission Difficulty: DropDownButton@DIFFICULTY_DROPDOWNBUTTON: - X:265 - Y:170 + X:310 + Y:177 Width:100 Height:25 - Font:Bold \ No newline at end of file + Font:Bold diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index 8cbb3e805a..be5cfd8cd3 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -125,6 +125,8 @@ LobbyDefaults: Crates: true StartingUnitsClass: default FragileAlliances: false + Shroud: true + Fog: true ChromeMetrics: mods/ra/metrics.yaml diff --git a/mods/ra/rules/system.yaml b/mods/ra/rules/system.yaml index 59ca031e8f..ebbc2e2686 100644 --- a/mods/ra/rules/system.yaml +++ b/mods/ra/rules/system.yaml @@ -601,6 +601,9 @@ World: ShroudPalette@fog: Name: fog Type: Fog + ShroudPalette@combined: + Name: shroudfog + Type: Combined Country@0: Name: Allies Race: allies diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index b466b1fc1b..84af14ec3d 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -148,6 +148,8 @@ LobbyDefaults: Crates: true StartingUnitsClass: default FragileAlliances: false + Shroud: true + Fog: true ChromeMetrics: mods/ra/metrics.yaml