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.Interfaces.GameObjects;
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 => 1.5f;
public CloseLastEntityStorage(IEntity owner) : base(owner) {}
public override void SetupOperators(Blackboard context)
{
var lastStorage = context.GetState().GetValue();
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()
.QuadraticCurve(context, 1.0f, 1.0f, 0.02f, 0.0f),
considerationsManager.Get()
.BoolCurve(context),
};
}
}
}