Fix AutoCrusher not being conditional

This commit is contained in:
abcdefg30
2023-10-12 17:11:53 +02:00
committed by Gustas
parent 5eb6ba6e5c
commit 876b66b295

View File

@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Traits
public override object Create(ActorInitializer init) { return new AutoCrusher(init.Self, this); } public override object Create(ActorInitializer init) { return new AutoCrusher(init.Self, this); }
} }
sealed class AutoCrusher : PausableConditionalTrait<AutoCrusherInfo>, INotifyIdle sealed class AutoCrusher : ConditionalTrait<AutoCrusherInfo>, INotifyIdle
{ {
int nextScanTime; int nextScanTime;
readonly IMoveInfo moveInfo; readonly IMoveInfo moveInfo;
@@ -49,14 +49,13 @@ namespace OpenRA.Mods.Common.Traits
{ {
move = self.Trait<IMove>(); move = self.Trait<IMove>();
moveInfo = self.Info.TraitInfo<IMoveInfo>(); moveInfo = self.Info.TraitInfo<IMoveInfo>();
nextScanTime = self.World.SharedRandom.Next(Info.MinimumScanTimeInterval, Info.MaximumScanTimeInterval);
isAircraft = move is Aircraft; isAircraft = move is Aircraft;
ignoresDisguise = self.Info.HasTraitInfo<IgnoresDisguiseInfo>(); ignoresDisguise = self.Info.HasTraitInfo<IgnoresDisguiseInfo>();
} }
void INotifyIdle.TickIdle(Actor self) void INotifyIdle.TickIdle(Actor self)
{ {
if (nextScanTime-- > 0) if (IsTraitDisabled || nextScanTime-- > 0)
return; return;
var crushableActor = self.World.FindActorsInCircle(self.CenterPosition, Info.ScanRadius) var crushableActor = self.World.FindActorsInCircle(self.CenterPosition, Info.ScanRadius)
@@ -95,5 +94,10 @@ namespace OpenRA.Mods.Common.Traits
return target.TraitsImplementing<ICrushable>().Any(c => c.CrushableBy(target, self, Info.CrushClasses)); return target.TraitsImplementing<ICrushable>().Any(c => c.CrushableBy(target, self, Info.CrushClasses));
} }
protected override void TraitEnabled(Actor self)
{
nextScanTime = self.World.SharedRandom.Next(Info.MinimumScanTimeInterval, Info.MaximumScanTimeInterval);
}
} }
} }