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:
@@ -299,6 +299,8 @@ namespace OpenRA.Traits
|
||||
void SetVisualPosition(Actor self, WPos pos);
|
||||
}
|
||||
|
||||
public interface ITemporaryBlockerInfo : ITraitInfoInterface { }
|
||||
|
||||
[RequireExplicitImplementation]
|
||||
public interface ITemporaryBlocker
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user