Create FrozenActor.RefreshState method for better encapsulation and reuse of this logic.
This commit is contained in:
@@ -36,13 +36,15 @@ namespace OpenRA.Traits
|
||||
readonly Actor actor;
|
||||
readonly Shroud shroud;
|
||||
|
||||
public Player Owner;
|
||||
public Player Owner { get; private set; }
|
||||
|
||||
public ITooltipInfo TooltipInfo;
|
||||
public Player TooltipOwner;
|
||||
public ITooltipInfo TooltipInfo { get; private set; }
|
||||
public Player TooltipOwner { get; private set; }
|
||||
readonly ITooltip tooltip;
|
||||
|
||||
public int HP;
|
||||
public DamageState DamageState;
|
||||
public int HP { get; private set; }
|
||||
public DamageState DamageState { get; private set; }
|
||||
readonly IHealth health;
|
||||
|
||||
public bool Visible = true;
|
||||
public bool Shrouded { get; private set; }
|
||||
@@ -68,6 +70,9 @@ namespace OpenRA.Traits
|
||||
Bounds = self.Bounds;
|
||||
TargetTypes = self.GetEnabledTargetTypes().ToHashSet();
|
||||
|
||||
tooltip = self.TraitsImplementing<ITooltip>().FirstOrDefault();
|
||||
health = self.TraitOrDefault<IHealth>();
|
||||
|
||||
UpdateVisibility();
|
||||
}
|
||||
|
||||
@@ -76,6 +81,23 @@ namespace OpenRA.Traits
|
||||
public ActorInfo Info { get { return actor.Info; } }
|
||||
public Actor Actor { get { return !actor.IsDead ? actor : null; } }
|
||||
|
||||
public void RefreshState()
|
||||
{
|
||||
Owner = actor.Owner;
|
||||
|
||||
if (health != null)
|
||||
{
|
||||
HP = health.HP;
|
||||
DamageState = health.DamageState;
|
||||
}
|
||||
|
||||
if (tooltip != null)
|
||||
{
|
||||
TooltipInfo = tooltip.TooltipInfo;
|
||||
TooltipOwner = tooltip.Owner;
|
||||
}
|
||||
}
|
||||
|
||||
public void Tick()
|
||||
{
|
||||
if (flashTicks > 0)
|
||||
|
||||
@@ -37,8 +37,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
readonly PPos[] footprint;
|
||||
|
||||
PlayerDictionary<FrozenState> frozenStates;
|
||||
ITooltip tooltip;
|
||||
Health health;
|
||||
bool isRendering;
|
||||
|
||||
class FrozenState
|
||||
@@ -65,9 +63,6 @@ namespace OpenRA.Mods.Common.Traits
|
||||
|
||||
public void Created(Actor self)
|
||||
{
|
||||
tooltip = self.TraitsImplementing<ITooltip>().FirstOrDefault();
|
||||
health = self.TraitOrDefault<Health>();
|
||||
|
||||
frozenStates = new PlayerDictionary<FrozenState>(self.World, (player, playerIndex) =>
|
||||
{
|
||||
var frozenActor = new FrozenActor(self, footprint, player.Shroud, startsRevealed);
|
||||
@@ -81,20 +76,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
void UpdateFrozenActor(Actor self, FrozenActor frozenActor, int playerIndex)
|
||||
{
|
||||
VisibilityHash |= 1 << (playerIndex % 32);
|
||||
|
||||
frozenActor.Owner = self.Owner;
|
||||
|
||||
if (health != null)
|
||||
{
|
||||
frozenActor.HP = health.HP;
|
||||
frozenActor.DamageState = health.DamageState;
|
||||
}
|
||||
|
||||
if (tooltip != null)
|
||||
{
|
||||
frozenActor.TooltipInfo = tooltip.TooltipInfo;
|
||||
frozenActor.TooltipOwner = tooltip.Owner;
|
||||
}
|
||||
frozenActor.RefreshState();
|
||||
}
|
||||
|
||||
bool IsVisibleInner(Actor self, Player byPlayer)
|
||||
|
||||
Reference in New Issue
Block a user