using System; using System.Collections.Generic; using Content.Server.AI.Utility.Actions; using Content.Server.AI.Utility.Actions.Clothing.Head; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Clothing; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Clothing; using Content.Server.Clothing.Components; using Content.Shared.Inventory; using Robust.Shared.IoC; namespace Content.Server.AI.Utility.ExpandableActions.Clothing.Head { public sealed class PickUpAnyNearbyHeadExp : ExpandableUtilityAction { public override float Bonus => UtilityAction.NormalBonus; protected override IEnumerable> GetCommonConsiderations(Blackboard context) { var considerationsManager = IoCManager.Resolve(); return new[] { considerationsManager.Get().Slot(EquipmentSlotDefines.Slots.HEAD, context) .InverseBoolCurve(context), considerationsManager.Get().Slot(EquipmentSlotDefines.SlotFlags.HEAD, context) .InverseBoolCurve(context) }; } public override IEnumerable GetActions(Blackboard context) { var owner = context.GetState().GetValue(); foreach (var entity in context.GetState().GetValue()) { if (entity.TryGetComponent(out ClothingComponent? clothing) && (clothing.SlotFlags & EquipmentSlotDefines.SlotFlags.HEAD) != 0) { yield return new PickUpHead {Owner = owner, Target = entity, Bonus = Bonus}; } } } } }