From c333b59eb9e844486e671ce0cfb19338a9aa95e2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 9 Jan 2014 17:59:20 +1300 Subject: [PATCH] Cache trait lookups in MoveAdjacentTo. --- OpenRA.Mods.RA/Activities/Enter.cs | 2 +- OpenRA.Mods.RA/Activities/ExternalCaptureActor.cs | 2 +- OpenRA.Mods.RA/Activities/LayMines.cs | 2 +- OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs | 12 +++++++++--- OpenRA.Mods.RA/DemoTruck.cs | 2 +- OpenRA.Mods.RA/MadTank.cs | 2 +- OpenRA.Mods.RA/Passenger.cs | 2 +- OpenRA.Mods.RA/Repairable.cs | 2 +- 8 files changed, 16 insertions(+), 10 deletions(-) diff --git a/OpenRA.Mods.RA/Activities/Enter.cs b/OpenRA.Mods.RA/Activities/Enter.cs index cd74111176..cb12e5b8f5 100755 --- a/OpenRA.Mods.RA/Activities/Enter.cs +++ b/OpenRA.Mods.RA/Activities/Enter.cs @@ -34,7 +34,7 @@ namespace OpenRA.Mods.RA.Activities return NextActivity; if (!Util.AdjacentCells(target).Any(c => c == self.Location)) - return Util.SequenceActivities(new MoveAdjacentTo(target), this); + return Util.SequenceActivities(new MoveAdjacentTo(self, target), this); // Move to the middle of the target, ignoring impassable tiles var mobile = self.Trait(); diff --git a/OpenRA.Mods.RA/Activities/ExternalCaptureActor.cs b/OpenRA.Mods.RA/Activities/ExternalCaptureActor.cs index 8d56c20ca3..5d9f5978d6 100644 --- a/OpenRA.Mods.RA/Activities/ExternalCaptureActor.cs +++ b/OpenRA.Mods.RA/Activities/ExternalCaptureActor.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA.Activities var nearest = target.Actor.OccupiesSpace.NearestCellTo(mobile.toCell); if ((nearest - mobile.toCell).LengthSquared > 2) - return Util.SequenceActivities(new MoveAdjacentTo(target), this); + return Util.SequenceActivities(new MoveAdjacentTo(self, target), this); if (!capturable.CaptureInProgress) capturable.BeginCapture(self); diff --git a/OpenRA.Mods.RA/Activities/LayMines.cs b/OpenRA.Mods.RA/Activities/LayMines.cs index 1cd5bfbeda..3d14ee2c53 100644 --- a/OpenRA.Mods.RA/Activities/LayMines.cs +++ b/OpenRA.Mods.RA/Activities/LayMines.cs @@ -37,7 +37,7 @@ namespace OpenRA.Mods.RA.Activities return new Wait(20); return Util.SequenceActivities( - new MoveAdjacentTo(Target.FromActor(rearmTarget)), + new MoveAdjacentTo(self, Target.FromActor(rearmTarget)), mobile.MoveTo(rearmTarget.CenterPosition.ToCPos(), rearmTarget), new Rearm(self), new Repair(rearmTarget), diff --git a/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs b/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs index 083a8b04be..224a7ec441 100755 --- a/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs +++ b/OpenRA.Mods.RA/Activities/MoveAdjacentTo.cs @@ -16,15 +16,21 @@ namespace OpenRA.Mods.RA.Activities public class MoveAdjacentTo : Activity { readonly Target target; + readonly Mobile mobile; + readonly PathFinder pathFinder; - public MoveAdjacentTo(Target target) { this.target = target; } + public MoveAdjacentTo(Actor self, Target target) + { + this.target = target; + mobile = self.Trait(); + pathFinder = self.World.WorldActor.Trait(); + } public override Activity Tick(Actor self) { if (IsCanceled || !target.IsValidFor(self)) return NextActivity; - var mobile = self.Trait(); var ps1 = new PathSearch(self.World, mobile.Info, self) { checkForBlocked = true, @@ -42,7 +48,7 @@ namespace OpenRA.Mods.RA.Activities ps1.heuristic = PathSearch.DefaultEstimator(mobile.toCell); var ps2 = PathSearch.FromPoint(self.World, mobile.Info, self, mobile.toCell, target.CenterPosition.ToCPos(), true); - var ret = self.World.WorldActor.Trait().FindBidiPath(ps1, ps2); + var ret = pathFinder.FindBidiPath(ps1, ps2); return Util.SequenceActivities(mobile.MoveTo(() => ret), this); } diff --git a/OpenRA.Mods.RA/DemoTruck.cs b/OpenRA.Mods.RA/DemoTruck.cs index f1050b4d71..fb1aa97baf 100644 --- a/OpenRA.Mods.RA/DemoTruck.cs +++ b/OpenRA.Mods.RA/DemoTruck.cs @@ -65,7 +65,7 @@ namespace OpenRA.Mods.RA self.CancelActivity(); self.SetTargetLine(target, Color.Red); - self.QueueActivity(new MoveAdjacentTo(target)); + self.QueueActivity(new MoveAdjacentTo(self, target)); self.QueueActivity(new CallFunc(() => Explode(self))); } diff --git a/OpenRA.Mods.RA/MadTank.cs b/OpenRA.Mods.RA/MadTank.cs index 04e5c0c205..8dedafd03b 100644 --- a/OpenRA.Mods.RA/MadTank.cs +++ b/OpenRA.Mods.RA/MadTank.cs @@ -146,7 +146,7 @@ namespace OpenRA.Mods.RA self.CancelActivity(); self.SetTargetLine(target, Color.Red); - self.QueueActivity(new MoveAdjacentTo(target)); + self.QueueActivity(new MoveAdjacentTo(self, target)); self.QueueActivity(new CallFunc(StartDetonationSequence)); } diff --git a/OpenRA.Mods.RA/Passenger.cs b/OpenRA.Mods.RA/Passenger.cs index b9e06883fe..4a04de827c 100644 --- a/OpenRA.Mods.RA/Passenger.cs +++ b/OpenRA.Mods.RA/Passenger.cs @@ -79,7 +79,7 @@ namespace OpenRA.Mods.RA self.SetTargetLine(target, Color.Green); self.CancelActivity(); - self.QueueActivity(new MoveAdjacentTo(target)); + self.QueueActivity(new MoveAdjacentTo(self, target)); self.QueueActivity(new EnterTransport(self, order.TargetActor)); } } diff --git a/OpenRA.Mods.RA/Repairable.cs b/OpenRA.Mods.RA/Repairable.cs index 1fb9c2b5a9..e34488d9f0 100644 --- a/OpenRA.Mods.RA/Repairable.cs +++ b/OpenRA.Mods.RA/Repairable.cs @@ -78,7 +78,7 @@ namespace OpenRA.Mods.RA self.SetTargetLine(target, Color.Green); self.CancelActivity(); - self.QueueActivity(new MoveAdjacentTo(target)); + self.QueueActivity(new MoveAdjacentTo(self, target)); self.QueueActivity(mobile.MoveTo(order.TargetActor.CenterPosition.ToCPos(), order.TargetActor)); self.QueueActivity(new Rearm(self)); self.QueueActivity(new Repair(order.TargetActor));