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

@@ -24,8 +24,7 @@ namespace OpenRA.Mods.Common.Traits
public abstract class GrantConditionOnLayer<InfoType> : ConditionalTrait<InfoType>, INotifyCustomLayerChanged where InfoType : GrantConditionOnLayerInfo
{
protected readonly byte ValidLayerType;
protected ConditionManager conditionManager;
protected int conditionToken = ConditionManager.InvalidConditionToken;
protected int conditionToken = Actor.InvalidConditionToken;
public GrantConditionOnLayer(Actor self, InfoType info, byte validLayer)
: base(info)
@@ -33,40 +32,31 @@ namespace OpenRA.Mods.Common.Traits
ValidLayerType = validLayer;
}
protected override void Created(Actor self)
{
conditionManager = self.TraitOrDefault<ConditionManager>();
base.Created(self);
}
void INotifyCustomLayerChanged.CustomLayerChanged(Actor self, byte oldLayer, byte newLayer)
{
if (conditionManager == null)
return;
UpdateConditions(self, oldLayer, newLayer);
}
protected virtual void UpdateConditions(Actor self, byte oldLayer, byte newLayer)
{
if (newLayer == ValidLayerType && oldLayer != ValidLayerType && conditionToken == ConditionManager.InvalidConditionToken)
conditionToken = conditionManager.GrantCondition(self, Info.Condition);
else if (newLayer != ValidLayerType && oldLayer == ValidLayerType && conditionToken != ConditionManager.InvalidConditionToken)
conditionToken = conditionManager.RevokeCondition(self, conditionToken);
if (newLayer == ValidLayerType && oldLayer != ValidLayerType && conditionToken == Actor.InvalidConditionToken)
conditionToken = self.GrantCondition(Info.Condition);
else if (newLayer != ValidLayerType && oldLayer == ValidLayerType && conditionToken != Actor.InvalidConditionToken)
conditionToken = self.RevokeCondition(conditionToken);
}
protected override void TraitEnabled(Actor self)
{
if (self.Location.Layer == ValidLayerType && conditionToken == ConditionManager.InvalidConditionToken)
conditionToken = conditionManager.GrantCondition(self, Info.Condition);
if (self.Location.Layer == ValidLayerType && conditionToken == Actor.InvalidConditionToken)
conditionToken = self.GrantCondition(Info.Condition);
}
protected override void TraitDisabled(Actor self)
{
if (conditionToken == ConditionManager.InvalidConditionToken)
if (conditionToken == Actor.InvalidConditionToken)
return;
conditionToken = conditionManager.RevokeCondition(self, conditionToken);
conditionToken = self.RevokeCondition(conditionToken);
}
}
}