Create FrozenActor.RefreshState method for better encapsulation and reuse of this logic.

This commit is contained in:
RoosterDragon
2015-12-31 01:40:49 +00:00
parent 3026bdcea5
commit c98df23b57
2 changed files with 28 additions and 24 deletions

View File

@@ -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)

View File

@@ -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)