Merge ConditionManager trait directly into Actor
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user