Make AI skip harvester orders if map has no resources
This commit is contained in:
@@ -264,6 +264,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
public Player Player { get; private set; }
|
public Player Player { get; private set; }
|
||||||
|
|
||||||
readonly DomainIndex domainIndex;
|
readonly DomainIndex domainIndex;
|
||||||
|
readonly ResourceLayer resLayer;
|
||||||
readonly ResourceClaimLayer claimLayer;
|
readonly ResourceClaimLayer claimLayer;
|
||||||
readonly IPathFinder pathfinder;
|
readonly IPathFinder pathfinder;
|
||||||
|
|
||||||
@@ -311,6 +312,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
domainIndex = World.WorldActor.Trait<DomainIndex>();
|
domainIndex = World.WorldActor.Trait<DomainIndex>();
|
||||||
|
resLayer = World.WorldActor.TraitOrDefault<ResourceLayer>();
|
||||||
claimLayer = World.WorldActor.TraitOrDefault<ResourceClaimLayer>();
|
claimLayer = World.WorldActor.TraitOrDefault<ResourceClaimLayer>();
|
||||||
pathfinder = World.WorldActor.Trait<IPathFinder>();
|
pathfinder = World.WorldActor.Trait<IPathFinder>();
|
||||||
|
|
||||||
@@ -667,6 +669,7 @@ namespace OpenRA.Mods.Common.AI
|
|||||||
if (--assignRolesTicks <= 0)
|
if (--assignRolesTicks <= 0)
|
||||||
{
|
{
|
||||||
assignRolesTicks = Info.AssignRolesInterval;
|
assignRolesTicks = Info.AssignRolesInterval;
|
||||||
|
if (resLayer != null && !resLayer.IsResourceLayerEmpty)
|
||||||
GiveOrdersToIdleHarvesters();
|
GiveOrdersToIdleHarvesters();
|
||||||
FindNewUnits(self);
|
FindNewUnits(self);
|
||||||
FindAndDeployBackupMcv(self);
|
FindAndDeployBackupMcv(self);
|
||||||
|
|||||||
@@ -36,7 +36,10 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
protected readonly CellLayer<CellContents> Content;
|
protected readonly CellLayer<CellContents> Content;
|
||||||
protected readonly CellLayer<CellContents> RenderContent;
|
protected readonly CellLayer<CellContents> RenderContent;
|
||||||
|
|
||||||
|
public bool IsResourceLayerEmpty { get { return resCells < 1; } }
|
||||||
|
|
||||||
bool disposed;
|
bool disposed;
|
||||||
|
int resCells;
|
||||||
|
|
||||||
public ResourceLayer(Actor self)
|
public ResourceLayer(Actor self)
|
||||||
{
|
{
|
||||||
@@ -217,6 +220,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
CellContents CreateResourceCell(ResourceType t, CPos cell)
|
CellContents CreateResourceCell(ResourceType t, CPos cell)
|
||||||
{
|
{
|
||||||
world.Map.CustomTerrain[cell] = world.Map.Rules.TileSet.GetTerrainIndex(t.Info.TerrainType);
|
world.Map.CustomTerrain[cell] = world.Map.Rules.TileSet.GetTerrainIndex(t.Info.TerrainType);
|
||||||
|
++resCells;
|
||||||
|
|
||||||
return new CellContents
|
return new CellContents
|
||||||
{
|
{
|
||||||
@@ -255,6 +259,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
{
|
{
|
||||||
Content[cell] = EmptyCell;
|
Content[cell] = EmptyCell;
|
||||||
world.Map.CustomTerrain[cell] = byte.MaxValue;
|
world.Map.CustomTerrain[cell] = byte.MaxValue;
|
||||||
|
--resCells;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Content[cell] = c;
|
Content[cell] = c;
|
||||||
@@ -270,6 +275,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
if (Content[cell].Type == null)
|
if (Content[cell].Type == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
--resCells;
|
||||||
|
|
||||||
// Clear cell
|
// Clear cell
|
||||||
Content[cell] = EmptyCell;
|
Content[cell] = EmptyCell;
|
||||||
world.Map.CustomTerrain[cell] = byte.MaxValue;
|
world.Map.CustomTerrain[cell] = byte.MaxValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user