Skip check for ITemporaryBlocker entirely if rules don't contain any temporary blockers

This benefits all mods without temporary blockers like gates or energy walls.
This commit is contained in:
reaperrr
2018-04-30 09:26:38 +02:00
committed by abcdefg30
parent 2a4299906d
commit 3c34330925
6 changed files with 19 additions and 6 deletions

View File

@@ -299,6 +299,8 @@ namespace OpenRA.Traits
void SetVisualPosition(Actor self, WPos pos);
}
public interface ITemporaryBlockerInfo : ITraitInfoInterface { }
[RequireExplicitImplementation]
public interface ITemporaryBlocker
{

View File

@@ -149,6 +149,8 @@ namespace OpenRA
}
}
public bool RulesContainTemporaryBlocker { get; private set; }
internal World(ModData modData, Map map, OrderManager orderManager, WorldType type)
{
Type = type;
@@ -185,6 +187,8 @@ namespace OpenRA
MapUid = Map.Uid,
MapTitle = Map.Title
};
RulesContainTemporaryBlocker = map.Rules.Actors.Any(a => a.Value.HasTraitInfo<ITemporaryBlockerInfo>());
}
public void AddToMaps(Actor self, IOccupySpace ios)

View File

@@ -45,6 +45,9 @@ namespace OpenRA
public static bool ContainsTemporaryBlocker(this World world, CPos cell, Actor ignoreActor = null)
{
if (!world.RulesContainTemporaryBlocker)
return false;
var temporaryBlockers = world.ActorMap.GetActorsAt(cell);
foreach (var temporaryBlocker in temporaryBlockers)
{