Merge ConditionManager trait directly into Actor

This commit is contained in:
atlimit8
2020-04-18 23:25:05 -05:00
committed by reaperrr
parent e12c1dc9aa
commit 259c8d2c98
65 changed files with 466 additions and 707 deletions

View File

@@ -47,20 +47,13 @@ namespace OpenRA.Mods.Common.Traits
{
const string OrderID = "PrimaryProducer";
ConditionManager conditionManager;
int primaryToken = ConditionManager.InvalidConditionToken;
int primaryToken = Actor.InvalidConditionToken;
public bool IsPrimary { get; private set; }
public PrimaryBuilding(Actor self, PrimaryBuildingInfo info)
: base(info) { }
protected override void Created(Actor self)
{
conditionManager = self.TraitOrDefault<ConditionManager>();
base.Created(self);
}
IEnumerable<IOrderTargeter> IIssueOrder.Orders
{
get
@@ -109,13 +102,13 @@ namespace OpenRA.Mods.Common.Traits
b.Trait.SetPrimaryProducer(b.Actor, false);
}
if (conditionManager != null && primaryToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(Info.PrimaryCondition))
primaryToken = conditionManager.GrantCondition(self, Info.PrimaryCondition);
if (primaryToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.PrimaryCondition))
primaryToken = self.GrantCondition(Info.PrimaryCondition);
Game.Sound.PlayNotification(self.World.Map.Rules, self.Owner, "Speech", Info.SelectionNotification, self.Owner.Faction.InternalName);
}
else if (primaryToken != ConditionManager.InvalidConditionToken)
primaryToken = conditionManager.RevokeCondition(self, primaryToken);
else if (primaryToken != Actor.InvalidConditionToken)
primaryToken = self.RevokeCondition(primaryToken);
}
protected override void TraitEnabled(Actor self) { }

View File

@@ -57,7 +57,6 @@ namespace OpenRA.Mods.Common.Traits
readonly IHealth health;
readonly Predicate<Player> isNotActiveAlly;
readonly Stack<int> repairTokens = new Stack<int>();
ConditionManager conditionManager;
int remainingTicks;
public readonly List<Player> Repairers = new List<Player>();
@@ -70,12 +69,6 @@ namespace OpenRA.Mods.Common.Traits
isNotActiveAlly = player => player.WinState != WinState.Undefined || player.Stances[self.Owner] != Stance.Ally;
}
protected override void Created(Actor self)
{
base.Created(self);
conditionManager = self.TraitOrDefault<ConditionManager>();
}
[Sync]
public int RepairersHash
{
@@ -90,15 +83,15 @@ namespace OpenRA.Mods.Common.Traits
void UpdateCondition(Actor self)
{
if (conditionManager == null || string.IsNullOrEmpty(Info.RepairCondition))
if (string.IsNullOrEmpty(Info.RepairCondition))
return;
var currentRepairers = Repairers.Count;
while (Repairers.Count > repairTokens.Count)
repairTokens.Push(conditionManager.GrantCondition(self, Info.RepairCondition));
repairTokens.Push(self.GrantCondition(Info.RepairCondition));
while (Repairers.Count < repairTokens.Count && repairTokens.Count > 0)
conditionManager.RevokeCondition(self, repairTokens.Pop());
self.RevokeCondition(repairTokens.Pop());
}
public void RepairBuilding(Actor self, Player player)