Move build radius configuration to rules.

This commit is contained in:
Paul Chote
2016-02-29 22:24:50 +00:00
parent cce292a68a
commit 5b2bf5b284
9 changed files with 45 additions and 5 deletions

View File

@@ -58,15 +58,12 @@ namespace OpenRA
public class MapOptions public class MapOptions
{ {
public bool? AllyBuildRadius;
public string TechLevel; public string TechLevel;
public string[] Difficulties = { }; public string[] Difficulties = { };
public bool? ShortGame; public bool? ShortGame;
public void UpdateServerSettings(Session.Global settings) public void UpdateServerSettings(Session.Global settings)
{ {
if (AllyBuildRadius.HasValue)
settings.AllyBuildRadius = AllyBuildRadius.Value;
if (ShortGame.HasValue) if (ShortGame.HasValue)
settings.ShortGame = ShortGame.Value; settings.ShortGame = ShortGame.Value;
} }

View File

@@ -733,6 +733,7 @@
<Compile Include="ColorValidator.cs" /> <Compile Include="ColorValidator.cs" />
<Compile Include="UtilityCommands\ResizeMapCommand.cs" /> <Compile Include="UtilityCommands\ResizeMapCommand.cs" />
<Compile Include="Traits\World\MapCreeps.cs" /> <Compile Include="Traits\World\MapCreeps.cs" />
<Compile Include="Traits\World\MapBuildRadius.cs" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup> <PropertyGroup>

View File

@@ -569,7 +569,8 @@ namespace OpenRA.Mods.Common.Server
return true; return true;
} }
if (server.Map.Options.AllyBuildRadius.HasValue) var mapBuildRadius = server.Map.Rules.Actors["world"].TraitInfoOrDefault<MapBuildRadiusInfo>();
if (mapBuildRadius == null || mapBuildRadius.AllyBuildRadiusLocked)
{ {
server.SendOrderTo(conn, "Message", "Map has disabled ally build radius configuration."); server.SendOrderTo(conn, "Message", "Map has disabled ally build radius configuration.");
return true; return true;
@@ -1035,6 +1036,9 @@ namespace OpenRA.Mods.Common.Server
var startingUnits = server.Map.Rules.Actors["world"].TraitInfoOrDefault<SpawnMPUnitsInfo>(); var startingUnits = server.Map.Rules.Actors["world"].TraitInfoOrDefault<SpawnMPUnitsInfo>();
gs.StartingUnitsClass = startingUnits == null ? "none" : startingUnits.StartingUnitsClass; gs.StartingUnitsClass = startingUnits == null ? "none" : startingUnits.StartingUnitsClass;
var mapBuildRadius = server.Map.Rules.Actors["world"].TraitInfoOrDefault<MapBuildRadiusInfo>();
gs.AllyBuildRadius = mapBuildRadius != null && mapBuildRadius.AllyBuildRadiusEnabled;
server.Map.Options.UpdateServerSettings(server.LobbyInfo.GlobalSettings); server.Map.Options.UpdateServerSettings(server.LobbyInfo.GlobalSettings);
} }

View File

@@ -0,0 +1,28 @@
#region Copyright & License Information
/*
* Copyright 2007-2016 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation, either version 3 of
* the License, or (at your option) any later version. For more
* information, see COPYING.
*/
#endregion
using System.Collections.Generic;
using OpenRA.Traits;
namespace OpenRA.Mods.Common.Traits
{
[Desc("Controls the build radius checkboxes in the lobby options.")]
public class MapBuildRadiusInfo : TraitInfo<MapBuildRadius>
{
[Desc("Default value of the ally build radius checkbox in the lobby.")]
public readonly bool AllyBuildRadiusEnabled = true;
[Desc("Prevent the ally build radius state from being changed in the lobby.")]
public readonly bool AllyBuildRadiusLocked = false;
}
public class MapBuildRadius { }
}

View File

@@ -391,8 +391,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var allybuildradius = optionsBin.GetOrNull<CheckboxWidget>("ALLYBUILDRADIUS_CHECKBOX"); var allybuildradius = optionsBin.GetOrNull<CheckboxWidget>("ALLYBUILDRADIUS_CHECKBOX");
if (allybuildradius != null) if (allybuildradius != null)
{ {
var allyBuildRadiusLocked = new CachedTransform<Map, bool>(map =>
{
var mapBuildRadius = map.Rules.Actors["world"].TraitInfoOrDefault<MapBuildRadiusInfo>();
return mapBuildRadius == null || mapBuildRadius.AllyBuildRadiusLocked;
});
allybuildradius.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius; allybuildradius.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius;
allybuildradius.IsDisabled = () => configurationDisabled() || Map.Options.AllyBuildRadius.HasValue; allybuildradius.IsDisabled = () => configurationDisabled() || allyBuildRadiusLocked.Update(Map);
allybuildradius.OnClick = () => orderManager.IssueOrder(Order.Command( allybuildradius.OnClick = () => orderManager.IssueOrder(Order.Command(
"allybuildradius {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius))); "allybuildradius {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius)));
} }

View File

@@ -74,6 +74,7 @@ World:
WarheadDebugOverlay: WarheadDebugOverlay:
MapCreeps: MapCreeps:
SpawnMapActors: SpawnMapActors:
MapBuildRadius:
MPStartLocations: MPStartLocations:
CreateMPPlayers: CreateMPPlayers:
MPStartUnits@mcvonly: MPStartUnits@mcvonly:

View File

@@ -89,6 +89,7 @@ World:
SmokePercentage: 0 SmokePercentage: 0
MapCreeps: MapCreeps:
SpawnMapActors: SpawnMapActors:
MapBuildRadius:
CreateMPPlayers: CreateMPPlayers:
MPStartLocations: MPStartLocations:
MPStartUnits@mcv: MPStartUnits@mcv:

View File

@@ -120,6 +120,7 @@ World:
PathfinderDebugOverlay: PathfinderDebugOverlay:
WarheadDebugOverlay: WarheadDebugOverlay:
SpawnMapActors: SpawnMapActors:
MapBuildRadius:
CreateMPPlayers: CreateMPPlayers:
MPStartUnits@mcvonly: MPStartUnits@mcvonly:
Class: none Class: none

View File

@@ -98,6 +98,7 @@ World:
PathfinderDebugOverlay: PathfinderDebugOverlay:
WarheadDebugOverlay: WarheadDebugOverlay:
SpawnMapActors: SpawnMapActors:
MapBuildRadius:
CreateMPPlayers: CreateMPPlayers:
MPStartUnits@MCV: MPStartUnits@MCV:
Class: none Class: none