Perhaps a variable in the Unit that can be set to indicate that a turn is pending…
System.Action pendingAction;
public void SetPendingAction(System.Action action) => pendingAction=action;
public bool HasPendingAction()=>pendingAction!=null;
public void FinishPendingAction()
{
pendingAction?.Invoke();
pendingAction=null;
}
Then our two state Action can do it’s first state and then call
unit.SetPendingAction(FinishAction);
The FinishAction can deal with the deduction of points for the second half of the action.
UnitActionSystem automatically call FinishPendingAction() on the Unit if it HasPendingAction();
This is a rough sketch… I may play with this some more later, flesh it out, as there are still a few bits missing to ensure that the pending action doesn’t fire prematurely… Perhaps checking to see if the user has sufficient energy before firing the action…