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;
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.IsValid())
{
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),
};
}
}
}