protected void OnMoveUndone(Move move) => MoveUndone?.Invoke(move);
protected virtual void OnMoveUndone() => MoveUndone?.Invoke(this, EventArgs.Empty);
internal void OnMoveUndone() { MoveUndone?.Invoke(this, EventArgs.Empty); }