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

@@ -268,10 +268,14 @@ namespace OpenRA.Mods.Common.Traits
IsMovingInMyDirection(self, otherActor))
return false;
// If there is a temporary blocker in our path, but we can remove it, we are not blocked.
var temporaryBlocker = otherActor.TraitOrDefault<ITemporaryBlocker>();
if (temporaryBlocker != null && temporaryBlocker.CanRemoveBlockage(otherActor, self))
return false;
// PERF: Only perform ITemporaryBlocker trait look-up if mod/map rules contain any actors that are temporary blockers
if (self.World.RulesContainTemporaryBlocker)
{
// If there is a temporary blocker in our path, but we can remove it, we are not blocked.
var temporaryBlocker = otherActor.TraitOrDefault<ITemporaryBlocker>();
if (temporaryBlocker != null && temporaryBlocker.CanRemoveBlockage(otherActor, self))
return false;
}
// If we cannot crush the other actor in our way, we are blocked.
if (Crushes == null || Crushes.Count == 0)