Cache FrozenActorLayer on the Player object.
This avoids unnecessary trait queries.
This commit is contained in:
committed by
Oliver Brakmann
parent
f238e2c5cc
commit
3e490e5843
@@ -41,7 +41,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
readonly World world;
|
||||
readonly Player player;
|
||||
FrozenActorLayer frozenLayer;
|
||||
SupportPowerManager supportPowerManager;
|
||||
Dictionary<SupportPowerInstance, int> waitingPowers = new Dictionary<SupportPowerInstance, int>();
|
||||
Dictionary<string, SupportPowerDecision> powerDecisions = new Dictionary<string, SupportPowerDecision>();
|
||||
@@ -55,7 +54,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
protected override void TraitEnabled(Actor self)
|
||||
{
|
||||
frozenLayer = player.PlayerActor.TraitOrDefault<FrozenActorLayer>();
|
||||
supportPowerManager = player.PlayerActor.Trait<SupportPowerManager>();
|
||||
foreach (var decision in Info.Decisions)
|
||||
powerDecisions.Add(decision.OrderName, decision);
|
||||
@@ -140,7 +138,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var wbr = world.Map.CenterOfCell(br.ToCPos(map));
|
||||
var targets = world.ActorMap.ActorsInBox(wtl, wbr);
|
||||
|
||||
var frozenTargets = frozenLayer != null ? frozenLayer.FrozenActorsInRegion(region) : Enumerable.Empty<FrozenActor>();
|
||||
var frozenTargets = player.FrozenActorLayer != null ? player.FrozenActorLayer.FrozenActorsInRegion(region) : Enumerable.Empty<FrozenActor>();
|
||||
var consideredAttractiveness = powerDecision.GetAttractiveness(targets, player) + powerDecision.GetAttractiveness(frozenTargets, player);
|
||||
if (consideredAttractiveness <= bestAttractiveness || consideredAttractiveness < powerDecision.MinimumAttractiveness)
|
||||
continue;
|
||||
@@ -176,7 +174,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
var y = checkPos.Y + j;
|
||||
var pos = world.Map.CenterOfCell(new CPos(x, y));
|
||||
var consideredAttractiveness = 0;
|
||||
consideredAttractiveness += powerDecision.GetAttractiveness(pos, player, frozenLayer);
|
||||
consideredAttractiveness += powerDecision.GetAttractiveness(pos, player);
|
||||
|
||||
if (consideredAttractiveness <= bestAttractiveness || consideredAttractiveness < powerDecision.MinimumAttractiveness)
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user