private void MaybeSelectObject(Touch2 touch)
    {
        if (_selectedObject != null)
        {
            return;
        }

        if (touch.Phase == TouchPhase.Began)
        {
            ResetLongPressTimer();
        }
        if (touch.Phase != TouchPhase.Stationary)
        {
            return;
        }

        if (Time.time - _longpressTime < _touchPhaseBeganTime)
        {
            return;
        }

        ResetLongPressTimer();

        var origin = _camera.ScreenToWorldPoint(touch.Position);

        var hit = Physics2D.Raycast(origin, Vector2.zero, 10, Constants.Layers.Ground);

        if (touch.Phase == TouchPhase.Began)
        {
            Debug.Log("_camera touch at " + origin);
        }

        Debug.DrawRay(origin, Vector3.forward * 10, Color.red, 10f);

        if (hit.collider == null)
        {
            return;
        }

        var selected = hit.collider.gameObject.GetComponent <SelectOnTouch>();

        if (selected == null)
        {
            return;
        }

        Debug.Log("Selecting object " + hit.collider.gameObject.name);

        selected.Select();
        _selectedObject = selected;
    }
    private void MaybeDeselectObject(Touch2 touch)
    {
        if (_selectedObject == null)
        {
            return;
        }

        if (touch.Phase != TouchPhase.Ended)
        {
            return;
        }

        Debug.Log("Deselecting object");

        _selectedObject.Deselect();
        _selectedObject      = null;
        _touchPhaseBeganTime = float.MaxValue;
    }