Add lobby options for Shroud and Fog.

This commit is contained in:
Paul Chote
2013-08-04 12:25:32 +12:00
parent d867e8200f
commit c08f602661
14 changed files with 143 additions and 47 deletions

View File

@@ -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<ShroudInfo>();
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);
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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 =>
{

View File

@@ -360,6 +360,24 @@ namespace OpenRA.Mods.RA.Widgets.Logic
optionsBin.Get<LabelWidget>("STARTINGUNITS_DESC").IsVisible = startingUnits.IsVisible;
}
var enableShroud = optionsBin.GetOrNull<CheckboxWidget>("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<CheckboxWidget>("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<ButtonWidget>("DISCONNECT_BUTTON");
disconnectButton.OnClick = () => { CloseWindow(); onExit(); };

View File

@@ -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
Font:Bold

View File

@@ -123,6 +123,8 @@ LobbyDefaults:
Crates: true
StartingUnitsClass: default
FragileAlliances: false
Shroud: true
Fog: true
ChromeMetrics:
mods/cnc/metrics.yaml

View File

@@ -264,6 +264,9 @@ World:
ShroudPalette@fog:
Name: fog
Type: Fog
ShroudPalette@combined:
Name: shroudfog
Type: Combined
Country@gdi:
Name: GDI
Race: gdi

View File

@@ -109,6 +109,8 @@ LobbyDefaults:
Crates: true
StartingUnitsClass: default
FragileAlliances: false
Shroud: false
Fog: true
ChromeMetrics:
mods/d2k/metrics.yaml

View File

@@ -342,6 +342,9 @@ World:
ShroudPalette@fog:
Name: fog
Type: Fog
ShroudPalette@combined:
Name: shroudfog
Type: Combined
Country@Atreides:
Name: Atreides
Race: atreides

View File

@@ -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
Font:Bold

View File

@@ -125,6 +125,8 @@ LobbyDefaults:
Crates: true
StartingUnitsClass: default
FragileAlliances: false
Shroud: true
Fog: true
ChromeMetrics:
mods/ra/metrics.yaml

View File

@@ -601,6 +601,9 @@ World:
ShroudPalette@fog:
Name: fog
Type: Fog
ShroudPalette@combined:
Name: shroudfog
Type: Combined
Country@0:
Name: Allies
Race: allies

View File

@@ -148,6 +148,8 @@ LobbyDefaults:
Crates: true
StartingUnitsClass: default
FragileAlliances: false
Shroud: true
Fog: true
ChromeMetrics:
mods/ra/metrics.yaml