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

@@ -38,12 +38,11 @@ namespace OpenRA.Mods.Common.Traits
public object Create(ActorInitializer init) { return new GrantConditionOnProduction(init.Self, this); }
}
public class GrantConditionOnProduction : INotifyCreated, INotifyProduction, ITick, ISync, ISelectionBar
public class GrantConditionOnProduction : INotifyProduction, ITick, ISync, ISelectionBar
{
readonly GrantConditionOnProductionInfo info;
ConditionManager conditionManager;
int token = ConditionManager.InvalidConditionToken;
int token = Actor.InvalidConditionToken;
[Sync]
int ticks;
@@ -54,31 +53,26 @@ namespace OpenRA.Mods.Common.Traits
ticks = info.Duration;
}
void INotifyCreated.Created(Actor self)
{
conditionManager = self.TraitOrDefault<ConditionManager>();
}
void INotifyProduction.UnitProduced(Actor self, Actor other, CPos exit)
{
if (info.Actors.Any() && !info.Actors.Select(a => a.ToLowerInvariant()).Contains(other.Info.Name))
return;
if (conditionManager != null && token == ConditionManager.InvalidConditionToken)
token = conditionManager.GrantCondition(self, info.Condition);
if (token == Actor.InvalidConditionToken)
token = self.GrantCondition(info.Condition);
ticks = info.Duration;
}
void ITick.Tick(Actor self)
{
if (info.Duration >= 0 && token != ConditionManager.InvalidConditionToken && --ticks < 0)
token = conditionManager.RevokeCondition(self, token);
if (info.Duration >= 0 && token != Actor.InvalidConditionToken && --ticks < 0)
token = self.RevokeCondition(token);
}
float ISelectionBar.GetValue()
{
if (!info.ShowSelectionBar || info.Duration < 0 || token == ConditionManager.InvalidConditionToken)
if (!info.ShowSelectionBar || info.Duration < 0 || token == Actor.InvalidConditionToken)
return 0;
return (float)ticks / info.Duration;