diff --git a/OpenRA.Mods.Common/Traits/Crates/HealActorsCrateAction.cs b/OpenRA.Mods.Common/Traits/Crates/HealActorsCrateAction.cs index 68fe6eb381..e7b8a7631e 100644 --- a/OpenRA.Mods.Common/Traits/Crates/HealActorsCrateAction.cs +++ b/OpenRA.Mods.Common/Traits/Crates/HealActorsCrateAction.cs @@ -10,6 +10,7 @@ #endregion using System.Linq; +using OpenRA.Primitives; using OpenRA.Traits; namespace OpenRA.Mods.Common.Traits @@ -17,18 +18,26 @@ namespace OpenRA.Mods.Common.Traits [Desc("Heals all actors that belong to the owner of the collector.")] class HealActorsCrateActionInfo : CrateActionInfo { + [Desc("The target type(s) of the actors this crate action will heal. Leave empty to heal all actors.")] + public readonly BitSet TargetTypes = default(BitSet); + public override object Create(ActorInitializer init) { return new HealActorsCrateAction(init.Self, this); } } class HealActorsCrateAction : CrateAction { + readonly HealActorsCrateActionInfo info; + public HealActorsCrateAction(Actor self, HealActorsCrateActionInfo info) - : base(self, info) { } + : base(self, info) + { + this.info = info; + } public override void Activate(Actor collector) { foreach (var healable in collector.World.ActorsWithTrait().Where(tp => tp.Actor.Owner == collector.Owner)) - if (!healable.Trait.IsDead) + if (!healable.Trait.IsDead && (info.TargetTypes.IsEmpty || info.TargetTypes.Overlaps(healable.Actor.GetEnabledTargetTypes()))) healable.Trait.InflictDamage(healable.Actor, healable.Actor, new Damage(-(healable.Trait.MaxHP - healable.Trait.HP)), true); base.Activate(collector);