Files
VOIDRPG/Assets/90 - Scripts/Generic/Objects/Unit/Actions/UnEquipAction.cs
T
2026-07-09 21:33:33 +02:00

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();
}
}
}