47 lines
1.4 KiB
C#
47 lines
1.4 KiB
C#
using VOID.Generic.Objects.Container;
|
|
using VOID.Generic.Objects.Container.Events;
|
|
using VOID.Generic.Objects.Unit.Actions.Exceptions;
|
|
|
|
namespace VOID.Generic.Objects.Unit.Actions
|
|
{
|
|
public class CloseContainerAction : AbstractAction
|
|
{
|
|
private readonly UnitObject _unit;
|
|
private readonly ContainerObject _container;
|
|
|
|
public CloseContainerAction(UnitObject unit, ContainerObject container)
|
|
{
|
|
_unit = unit;
|
|
_container = container;
|
|
}
|
|
|
|
public override bool IsInRange() => true;
|
|
public override bool CanSkipQueue() => true;
|
|
|
|
protected override void OnEndIt() {}
|
|
|
|
protected override void OnCancelIt() {}
|
|
|
|
public override void CanDoIt()
|
|
{
|
|
Check(
|
|
_container.containerState.openedBy.Contains(_unit),
|
|
UnitActionErrorType.ContainerIsNotOpenedByThisUnit);
|
|
}
|
|
|
|
protected override void OnDoIt()
|
|
{
|
|
var containerCloseEvent = new ContainerCloseEvent
|
|
{
|
|
closedBy = _unit,
|
|
container = _container
|
|
};
|
|
|
|
BeforePerform();
|
|
_container.containerEvents.onClose.Invoke(containerCloseEvent);
|
|
_unit.unitEvents.onContainerClose.Invoke(containerCloseEvent);
|
|
AfterPerform();
|
|
EndIt();
|
|
}
|
|
}
|
|
} |