Add "Build off Ally ConYards" option. Fixes #2464.
This commit is contained in:
@@ -56,11 +56,17 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
return devMode.FastBuild || progress == 0;
|
||||
}
|
||||
|
||||
bool ValidRenderPlayer()
|
||||
{
|
||||
var allyBuildRadius = self.World.LobbyInfo.GlobalSettings.AllyBuildRadius;
|
||||
return self.Owner == self.World.RenderPlayer || (allyBuildRadius && self.Owner.IsAlliedWith(self.World.RenderPlayer));
|
||||
}
|
||||
|
||||
// Range circle
|
||||
public void RenderAfterWorld(WorldRenderer wr)
|
||||
{
|
||||
// Visible to player and allies
|
||||
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
|
||||
if (!ValidRenderPlayer())
|
||||
return;
|
||||
|
||||
wr.DrawRangeCircleWithContrast(
|
||||
@@ -73,7 +79,7 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
public float GetValue()
|
||||
{
|
||||
// Visible to player and allies
|
||||
if (!self.Owner.IsAlliedWith(self.World.RenderPlayer))
|
||||
if (!ValidRenderPlayer())
|
||||
return 0f;
|
||||
|
||||
// Ready or delay disabled
|
||||
|
||||
@@ -43,7 +43,8 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
var center = topLeft.CenterPosition + FootprintUtils.CenterOffset(this);
|
||||
foreach (var bp in world.ActorsWithTrait<BaseProvider>())
|
||||
{
|
||||
if (bp.Actor.Owner.Stances[p] != Stance.Ally || !bp.Trait.Ready())
|
||||
var validOwner = bp.Actor.Owner == p || (world.LobbyInfo.GlobalSettings.AllyBuildRadius && bp.Actor.Owner.Stances[p] == Stance.Ally);
|
||||
if (!validOwner || !bp.Trait.Ready())
|
||||
continue;
|
||||
|
||||
// Range is counted from the center of the actor, not from each cell.
|
||||
@@ -72,14 +73,21 @@ namespace OpenRA.Mods.RA.Buildings
|
||||
var nearnessCandidates = new List<CPos>();
|
||||
|
||||
var bi = world.WorldActor.Trait<BuildingInfluence>();
|
||||
var allyBuildRadius = world.LobbyInfo.GlobalSettings.AllyBuildRadius;
|
||||
|
||||
for (var y = scanStart.Y; y < scanEnd.Y; y++)
|
||||
{
|
||||
for (var x = scanStart.X; x < scanEnd.X; x++)
|
||||
{
|
||||
var at = bi.GetBuildingAt(new CPos(x, y));
|
||||
if (at != null && at.Owner.Stances[p] == Stance.Ally && at.HasTrait<GivesBuildableArea>())
|
||||
nearnessCandidates.Add(new CPos(x, y));
|
||||
var pos = new CPos(x, y);
|
||||
var at = bi.GetBuildingAt(pos);
|
||||
if (at == null || !at.HasTrait<GivesBuildableArea>())
|
||||
continue;
|
||||
|
||||
if (at.Owner == p || (allyBuildRadius && at.Owner.Stances[p] == Stance.Ally))
|
||||
nearnessCandidates.Add(pos);
|
||||
}
|
||||
}
|
||||
|
||||
var buildingTiles = FootprintUtils.Tiles(buildingName, this, topLeft).ToList();
|
||||
return nearnessCandidates
|
||||
|
||||
@@ -437,6 +437,25 @@ namespace OpenRA.Mods.RA.Server
|
||||
server.SyncLobbyInfo();
|
||||
return true;
|
||||
}},
|
||||
{ "allybuildradius",
|
||||
s =>
|
||||
{
|
||||
if (!client.IsAdmin)
|
||||
{
|
||||
server.SendOrderTo(conn, "Message", "Only the host can set that option");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (server.Map.Options.AllyBuildRadius.HasValue)
|
||||
{
|
||||
server.SendOrderTo(conn, "Message", "Map has disabled ally build radius configuration");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool.TryParse(s, out server.lobbyInfo.GlobalSettings.AllyBuildRadius);
|
||||
server.SyncLobbyInfo();
|
||||
return true;
|
||||
}},
|
||||
{ "difficulty",
|
||||
s =>
|
||||
{
|
||||
|
||||
@@ -286,6 +286,15 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
||||
"crates {0}".F(!orderManager.LobbyInfo.GlobalSettings.Crates)));
|
||||
}
|
||||
|
||||
var allybuildradius = optionsBin.GetOrNull<CheckboxWidget>("ALLYBUILDRADIUS_CHECKBOX");
|
||||
if (allybuildradius != null)
|
||||
{
|
||||
allybuildradius.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius;
|
||||
allybuildradius.IsDisabled = () => Map.Options.AllyBuildRadius.HasValue || configurationDisabled();
|
||||
allybuildradius.OnClick = () => orderManager.IssueOrder(Order.Command(
|
||||
"allybuildradius {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllyBuildRadius)));
|
||||
}
|
||||
|
||||
var fragileAlliance = optionsBin.GetOrNull<CheckboxWidget>("FRAGILEALLIANCES_CHECKBOX");
|
||||
if (fragileAlliance != null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user