// Update is called once per frame
    void Update()
    {
        if (MinigameInputHelper.GetHorizontalAxis(player) < 0.1 &&
            MinigameInputHelper.GetHorizontalAxis(player) > -0.1 /*&&
                                                                  * animator.GetInteger("state") < 2 + TYPE*/)
        {
            animator.SetInteger("state", 0 + TYPE);
        }
        else if (animator.GetInteger("state") < 2 + TYPE)
        {
            animator.SetInteger("state", 1 + TYPE);
        }
        jumpTime += Time.deltaTime;
        if (animator.GetInteger("state") == 2 + TYPE && jumpTime > 1 + TYPE)
        {
            jumpTime = 0;
            animator.SetInteger("state", 0 + TYPE);
        }
        pos       = set_vec2(this.transform.position.x, this.transform.position.y);
        pos2      = set_vec2(other.transform.position.x, other.transform.position.y);
        read_vel2 = (pos2 - pos2_old) / Time.deltaTime;
        pos2_old  = set_vec2(other.transform.position.x, other.transform.position.y);
        joystick  = set_vec2(
            MinigameInputHelper.GetHorizontalAxis(player),
            MinigameInputHelper.GetVerticalAxis(player)
            );
        float ground = (platform.pos.y + platform.height + (float)(0.3 * playerHeight));

        if (joystick.y > 0 && (up == false || pos.y <= ground + 0.1))
        {
            if (pos.x <= platform.pos.x + platform.width / 2 &&
                pos.x >= platform.pos.x - platform.width / 2 &&
                pos.y <= ground)
            {
                jump_count = 0;
            }
            if (jump_count < max_jump)            // || (double_jump && jump_count < 1)){
            {
                jump();
                up = true;
            }
        }
        if (joystick.y > 0)
        {
            up = true;
        }
        else
        {
            up = false;
        }
        //collision with platform
        if (within_bounds(pos, platform) && !up)
        {
            vel.y = 0;            //transform.position.y = platform;
            transform.Translate(0f, (float)(ground - pos.y), 0f);
        }
        else if (pos.y < -8)
        {
            vel.y = 0;            //stops from infinite falling
            vel.x = 0;
            double spawn;
            animator.SetInteger("state", 1);
            if (pos2.x < platform.pos.x)
            {
                spawn = 6.5;    //actually fell on the left side
                gameObject.GetComponent <ActionScript>().setDirection(true);
                dir = -1;
            }
            else
            {
                spawn = -6.5;        //assuming fell on right side
                gameObject.GetComponent <ActionScript>().setDirection(false);
                dir = 1;
            }
            const int start_y = 5;
            transform.Translate((float)(spawn - pos.x), (float)(start_y - pos.y), 0f);
            other.GetComponent <HealthScript>().TakeDamage(5);
            sound.PlayDie();
        }
        if (pos.y <= ground)        //+thresh?
        {
            if (pos.x <= platform.pos.x + platform.width / 2 &&
                pos.x >= platform.pos.x - platform.width / 2 && !up)
            {
                jump_count = 0;
            }
            run((run_vel / 10) * joystick.x);
        }
        else if (abs(joystick.x) > 0)
        {
            run((float)0.9 * joystick.x);                               //slight air movement
        }
        else
        {
            accel.x = (float)(-0.001 * vel.x);
        }
        vel.x += accel.x;
        vel.y += accel.y;
        vel.x  = clamp(-max_vel, max_vel, vel.x);         //clamped at max_vel m/s
        vel.y  = clamp(-2 * max_vel, 2 * max_vel, vel.y); //terminal velocity
        if (abs(pos.x - pos2.x) <= playerWidth && abs(pos.y - pos2.y) <= playerHeight)
        {
            collision(ground);
            is_in = true;
        }
        else
        {
            is_in = false;
        }
        float ballcharge = this.GetComponent <ActionScript>().ballCharge;

        //arrow.transform.Translate(0, 0, 0);
        if (MinigameInputHelper.GetHorizontalAxis(player) < 0)
        {
            dir = -1;
        }
        else if (MinigameInputHelper.GetHorizontalAxis(player) > 0)
        {
            dir = 1;
        }
        if (ballcharge > 0 && TYPE == 0)
        {
            arrow.transform.Rotate(new Vector3(0, 0, 1), dir * ((3 * ballcharge) * Time.deltaTime));
            arrow.transform.localScale = new Vector3((float)(0.2), (float)(0.2), 1);
        }
        else
        {
            arrow.transform.rotation   = Quaternion.identity;
            arrow.transform.localScale = new Vector3(0, 0, 0);
        }
        //if(player == 0){
        if (dir < 0)
        {
            arrow.GetComponent <SpriteRenderer>().flipX = false;
        }
        else if (dir > 0)
        {
            arrow.GetComponent <SpriteRenderer>().flipX = true;
        }

        this.transform.localScale = new Vector3((float)(1.2 * playerWidth), (float)(1.2 * playerHeight), 1);
        transform.Translate(
            vel.x * Time.deltaTime,
            vel.y * Time.deltaTime,
            0.0f
            );
    }