73 lines
2.4 KiB
C#
73 lines
2.4 KiB
C#
using VOID.Generic.Dict;
|
|
using VOID.Generic.Objects.Item.Events;
|
|
using VOID.Generic.Objects.Unit.Actions.Exceptions;
|
|
using VOID.Generic.Objects.Wearable;
|
|
using VOID.Generic.Objects.Wearable.Events;
|
|
|
|
namespace VOID.Generic.Objects.Unit.Actions
|
|
{
|
|
public class UnEquipAction : AbstractAction
|
|
{
|
|
private readonly UnitObject _unit;
|
|
private readonly WearableObject _item;
|
|
|
|
public UnEquipAction(UnitObject unit, WearableObject item)
|
|
{
|
|
_unit = unit;
|
|
_item = item;
|
|
}
|
|
|
|
public override bool IsInRange() => true;
|
|
|
|
protected override void OnEndIt() {}
|
|
|
|
protected override void OnCancelIt() {}
|
|
|
|
public override void CanDoIt()
|
|
{
|
|
Check(
|
|
state == ActionState.Ready,
|
|
UnitActionErrorType.ActionStateIsNotReady);
|
|
if (_unit.basicState.turnManager)
|
|
{
|
|
Check(
|
|
_unit.unitState.isSelfTurn,
|
|
UnitActionErrorType.UnitSelfTurnNotActive);
|
|
Check(
|
|
_unit.unitData.currentResources.actionPoints >= 1,
|
|
UnitActionErrorType.UnitNotEnoughActionPoints);
|
|
}
|
|
Check(
|
|
_unit.unitState.isControllable,
|
|
UnitActionErrorType.UnitStateIsNotControllable);
|
|
Check(
|
|
_item.wearableState.wearerUnit == _unit,
|
|
UnitActionErrorType.UnitDontWearThatItem);
|
|
}
|
|
|
|
protected override void OnDoIt()
|
|
{
|
|
if (_unit.basicState.turnManager)
|
|
_unit.unitData.UseResource(UnitResourceType.ActionPoints, 1);
|
|
|
|
var unEquipEvent = new UnEquipEvent
|
|
{
|
|
wearable = _item,
|
|
unit = _unit
|
|
};
|
|
|
|
_item.wearableEvents.onUnEquippedBefore.Invoke(unEquipEvent);
|
|
_unit.unitEvents.onUnEquipBefore.Invoke(unEquipEvent);
|
|
|
|
Check(!unEquipEvent.prevented, UnitActionErrorType.UnEquipIsPrevented);
|
|
|
|
BeforePerform();
|
|
_unit.unitEquipment.UnEquip(_item);
|
|
_unit.unitBackpack.Take(_item);
|
|
_item.wearableEvents.onUnEquippedAfter.Invoke(unEquipEvent);
|
|
_unit.unitEvents.onUnEquipAfter.Invoke(unEquipEvent);
|
|
AfterPerform();
|
|
EndIt();
|
|
}
|
|
}
|
|
} |