From c323046ed019c68fec642238427d1795ec903d50 Mon Sep 17 00:00:00 2001 From: Pavel Penev Date: Thu, 27 Aug 2015 14:26:37 +0300 Subject: [PATCH] Make AppearsOnRadar implement INotifyCreated Cache the IRadarColorModifier so we don't look for it on every render tick. --- OpenRA.Mods.Common/Traits/AppearsOnRadar.cs | 22 ++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs b/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs index 5697e9dc60..ad2ec15534 100644 --- a/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs +++ b/OpenRA.Mods.Common/Traits/AppearsOnRadar.cs @@ -23,21 +23,29 @@ namespace OpenRA.Mods.Common.Traits public object Create(ActorInitializer init) { return new AppearsOnRadar(this); } } - public class AppearsOnRadar : IRadarSignature + public class AppearsOnRadar : IRadarSignature, INotifyCreated { - AppearsOnRadarInfo info; + readonly AppearsOnRadarInfo info; + IRadarColorModifier modifier; - public AppearsOnRadar(AppearsOnRadarInfo info) { this.info = info; } + public AppearsOnRadar(AppearsOnRadarInfo info) + { + this.info = info; + } + + public void Created(Actor self) + { + modifier = self.TraitsImplementing().FirstOrDefault(); + } public IEnumerable> RadarSignatureCells(Actor self) { - var mod = self.TraitsImplementing().FirstOrDefault(); - var color = mod != null ? mod.RadarColorOverride(self) : self.Owner.Color.RGB; + var color = modifier != null ? modifier.RadarColorOverride(self) : self.Owner.Color.RGB; if (info.UseLocation) return new[] { Pair.New(self.Location, color) }; - else - return self.OccupiesSpace.OccupiedCells().Select(c => Pair.New(c.First, color)); + + return self.OccupiesSpace.OccupiedCells().Select(c => Pair.New(c.First, color)); } } } \ No newline at end of file