Make Character Controls like in Flippy Bottle?

How to make these controls like in flippy Bottle game?
You swipe and bottle flips depending on swiping angle and power.
C# Script will be much appreciated.

I’m using 2 scripts and it’s fine :): (i’m working on 2d game)

//MouseTracking

public Vector2 forceAdd;

Vector3 forceAdd2D;

Vector3 firstMouseLocation;
Vector3 afterMouseLocation;

void Update()
{
    Debug.Log(cubeForce);

    if (Input.GetMouseButtonDown(1))
    {
        firstMouseLocation = Input.mousePosition;
    }

    if (Input.GetMouseButtonUp(1))
    {
        afterMouseLocation = Input.mousePosition;

        forceAdd3D = afterMouseLocation - firstMouseLocation;
    }

    forceAdd = new Vector2(forceAdd3D.x, forceAdd3D.y);
}

//Control

Rigidbody2D rb2;
MouseTracking MouseTrack;

bool canRotate;

private void Start()
{
    rb2 = GetComponent<Rigidbody2D>();
    MouseTrack = GetComponent<MouseTracking>();
}

private void Update()
{
    Vector2 jumpForce = MouseTrack.forceAdd;
    if (Input.GetMouseButtonUp(1))
    {
        rb2.AddForce(jumpForce);

        canRotate = true;
    }

    if (canRotate)
    {
        if (jumpForce.x > 0)
        {
            transform.Rotate(0, 0, jumpForce.y * Time.fixedDeltaTime);
        }

        if (jumpForce.x < 0)
        {
            transform.Rotate(0, 0, jumpForce.y * Time.fixedDeltaTime * -1);
        }
    }
}

private void OnCollisionEnter2D(Collision2D ground)
{
    if (ground.gameObject.tag == "Ground")
    {
        canRotate = false;
    }
    else
    {
        canRotate = true;
    }
}

*My English is “too” dumb
@Krakra,I using 2 scripts and work very nice :slight_smile:

//MouseTracking

Vector3 forceAdd3D;
Vector3 firstMouseLocation;
Vector3 afterMouseLocation;

void Update()
{
    Debug.Log(cubeForce);

    if (Input.GetMouseButtonDown(1))
    {
        firstMouseLocation = Input.mousePosition;
    }

    if (Input.GetMouseButtonUp(1))
    {
        afterMouseLocation = Input.mousePosition;

        forceAdd3D = afterMouseLocation - firstMouseLocation;
    }

    forceAdd = new Vector2(cubeForce3D.x, cubeForce3D.y);
}

//Control

Rigidbody2D rb2;
MouseTracking MouseTrack;
bool canRotate;

private void Start()
{
    rb2 = GetComponent<Rigidbody2D>();
    MouseTrack = GetComponent<MouseTracking>();
}

private void Update()
{
    Vector2 jumpForce = MouseTrack.forceAdd;
    if (Input.GetMouseButtonUp(1))
    {
        rb2.AddForce(jumpForce);

        canRotate = true;
    }

    if (canRotate)
    {
        if (jumpForce.x > 0)
        {
            transform.Rotate(0, 0, jumpForce.y * Time.fixedDeltaTime);
        }

        if (jumpForce.x < 0)
        {
            transform.Rotate(0, 0, jumpForce.y * Time.fixedDeltaTime * -1);
        }
    }
}

private void OnCollisionEnter2D(Collision2D ground)
{
    if (ground.gameObject.tag == "Ground")
    {
        canRotate = false;
    }
    else
    {
        canRotate = true;
    }
}

(My English is “too” dumb)