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