Cache FrozenActorLayer on the Player object.

This avoids unnecessary trait queries.
This commit is contained in:
Paul Chote
2018-11-28 08:52:55 +00:00
committed by Oliver Brakmann
parent f238e2c5cc
commit 3e490e5843
6 changed files with 11 additions and 12 deletions

View File

@@ -112,11 +112,10 @@ namespace OpenRA
if (world == null || !TryGetActorFromUInt(world, playerActorID, out playerActor))
break;
var frozenLayer = playerActor.TraitOrDefault<FrozenActorLayer>();
if (frozenLayer == null)
if (playerActor.Owner.FrozenActorLayer == null)
break;
var frozen = frozenLayer.FromID(frozenActorID);
var frozen = playerActor.Owner.FrozenActorLayer.FromID(frozenActorID);
if (frozen != null)
target = Target.FromFrozenActor(frozen);

View File

@@ -56,6 +56,8 @@ namespace OpenRA
public readonly PlayerReference PlayerReference;
public readonly bool IsBot;
public readonly string BotType;
public readonly Shroud Shroud;
public readonly FrozenActorLayer FrozenActorLayer;
/// <summary>The faction (including Random, etc) that was selected in the lobby.</summary>
public readonly FactionInfo DisplayFaction;
@@ -65,7 +67,6 @@ namespace OpenRA
public bool HasObjectives = false;
public bool Spectating;
public Shroud Shroud;
public World World { get; private set; }
readonly bool inMissionMap;
@@ -156,6 +157,7 @@ namespace OpenRA
var playerActorType = world.Type == WorldType.Editor ? "EditorPlayer" : "Player";
PlayerActor = world.CreateActor(playerActorType, new TypeDictionary { new OwnerInit(this) });
Shroud = PlayerActor.Trait<Shroud>();
FrozenActorLayer = PlayerActor.TraitOrDefault<FrozenActorLayer>();
// Enable the bot logic on the host
IsBot = BotType != null;