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

@@ -100,8 +100,7 @@ namespace OpenRA.Mods.Common.Traits
int totalWeight = 0;
int reservedWeight = 0;
Aircraft aircraft;
ConditionManager conditionManager;
int loadingToken = ConditionManager.InvalidConditionToken;
int loadingToken = Actor.InvalidConditionToken;
Stack<int> loadedTokens = new Stack<int>();
bool takeOffAfterLoad;
bool initialised;
@@ -166,19 +165,18 @@ namespace OpenRA.Mods.Common.Traits
void INotifyCreated.Created(Actor self)
{
aircraft = self.TraitOrDefault<Aircraft>();
conditionManager = self.TraitOrDefault<ConditionManager>();
if (conditionManager != null && cargo.Any())
if (cargo.Any())
{
foreach (var c in cargo)
{
string passengerCondition;
if (Info.PassengerConditions.TryGetValue(c.Info.Name, out passengerCondition))
passengerTokens.GetOrAdd(c.Info.Name).Push(conditionManager.GrantCondition(self, passengerCondition));
passengerTokens.GetOrAdd(c.Info.Name).Push(self.GrantCondition(passengerCondition));
}
if (!string.IsNullOrEmpty(Info.LoadedCondition))
loadedTokens.Push(conditionManager.GrantCondition(self, Info.LoadedCondition));
loadedTokens.Push(self.GrantCondition(Info.LoadedCondition));
}
// Defer notifications until we are certain all traits on the transport are initialised
@@ -264,8 +262,8 @@ namespace OpenRA.Mods.Common.Traits
if (!HasSpace(w))
return false;
if (conditionManager != null && loadingToken == ConditionManager.InvalidConditionToken && !string.IsNullOrEmpty(Info.LoadingCondition))
loadingToken = conditionManager.GrantCondition(self, Info.LoadingCondition);
if (loadingToken == Actor.InvalidConditionToken && !string.IsNullOrEmpty(Info.LoadingCondition))
loadingToken = self.GrantCondition(Info.LoadingCondition);
reserves.Add(a);
reservedWeight += w;
@@ -283,8 +281,8 @@ namespace OpenRA.Mods.Common.Traits
reserves.Remove(a);
ReleaseLock(self);
if (loadingToken != ConditionManager.InvalidConditionToken)
loadingToken = conditionManager.RevokeCondition(self, loadingToken);
if (loadingToken != Actor.InvalidConditionToken)
loadingToken = self.RevokeCondition(loadingToken);
}
// Prepare for transport pickup
@@ -355,10 +353,10 @@ namespace OpenRA.Mods.Common.Traits
Stack<int> passengerToken;
if (passengerTokens.TryGetValue(passenger.Info.Name, out passengerToken) && passengerToken.Any())
conditionManager.RevokeCondition(self, passengerToken.Pop());
self.RevokeCondition(passengerToken.Pop());
if (loadedTokens.Any())
conditionManager.RevokeCondition(self, loadedTokens.Pop());
self.RevokeCondition(loadedTokens.Pop());
return passenger;
}
@@ -387,8 +385,8 @@ namespace OpenRA.Mods.Common.Traits
reserves.Remove(a);
ReleaseLock(self);
if (loadingToken != ConditionManager.InvalidConditionToken)
loadingToken = conditionManager.RevokeCondition(self, loadingToken);
if (loadingToken != Actor.InvalidConditionToken)
loadingToken = self.RevokeCondition(loadingToken);
}
// Don't initialise (effectively twice) if this runs before the FrameEndTask from Created
@@ -404,11 +402,11 @@ namespace OpenRA.Mods.Common.Traits
}
string passengerCondition;
if (conditionManager != null && Info.PassengerConditions.TryGetValue(a.Info.Name, out passengerCondition))
passengerTokens.GetOrAdd(a.Info.Name).Push(conditionManager.GrantCondition(self, passengerCondition));
if (Info.PassengerConditions.TryGetValue(a.Info.Name, out passengerCondition))
passengerTokens.GetOrAdd(a.Info.Name).Push(self.GrantCondition(passengerCondition));
if (conditionManager != null && !string.IsNullOrEmpty(Info.LoadedCondition))
loadedTokens.Push(conditionManager.GrantCondition(self, Info.LoadedCondition));
if (!string.IsNullOrEmpty(Info.LoadedCondition))
loadedTokens.Push(self.GrantCondition(Info.LoadedCondition));
}
void INotifyKilled.Killed(Actor self, AttackInfo e)