using System; using System.Collections.Generic; using Content.Server.AI.Operators; using Content.Server.AI.Operators.Inventory; using Content.Server.AI.Operators.Movement; using Content.Server.AI.Utility.Considerations; using Content.Server.AI.Utility.Considerations.Containers; using Content.Server.AI.Utility.Considerations.Movement; using Content.Server.AI.Utility.Considerations.State; using Content.Server.AI.WorldState; using Content.Server.AI.WorldState.States; using Content.Server.AI.WorldState.States.Inventory; using Robust.Shared.IoC; namespace Content.Server.AI.Utility.Actions.Idle { /// /// If we just picked up a bunch of stuff and have time then close it /// public sealed class CloseLastEntityStorage : UtilityAction { public override float Bonus => IdleBonus + 0.01f; public override void SetupOperators(Blackboard context) { var lastStorage = context.GetState().GetValue(); if (lastStorage == null) { ActionOperators = new Queue(new AiOperator[] { new CloseLastStorageOperator(Owner), }); return; } ActionOperators = new Queue(new AiOperator[] { new MoveToEntityOperator(Owner, lastStorage), new CloseLastStorageOperator(Owner), }); } protected override void UpdateBlackboard(Blackboard context) { base.UpdateBlackboard(context); var lastStorage = context.GetState(); context.GetState().SetValue(lastStorage.GetValue()); } protected override IReadOnlyCollection> GetConsiderations(Blackboard context) { var considerationsManager = IoCManager.Resolve(); return new[] { considerationsManager.Get().Set(typeof(LastOpenedStorageState), context) .InverseBoolCurve(context), considerationsManager.Get() .PresetCurve(context, PresetCurve.Distance), considerationsManager.Get() .BoolCurve(context), }; } } }