//has the instance attack
    private void attack(Collider2D collider, float dam, float cooldown, bool shouldStun)
    {
        //tests if the player is in attack range
        if (isPlayerInRange(collider))
        {
            playerHitBox.gameObject.GetComponent <ControllerPlayer> ().damage(dam);
            //tests if shouls be stunned
            if (shouldStun)
            {
                playerHitBox.gameObject.GetComponent <ControllerPlayer>().stun(heavyStunTime);
            }
        }

        //sets the cooldown
        this.cooldown       = cooldown;
        isRunningFromAttack = true;

        //plays sound
        ASound.playAttackSound();
    }
    //updates before physics updates
    void FixedUpdate()
    {
        //tests of time to next attack is being used
        if (!(timeToNextAttack <= 0))
        {
            timeToNextAttack -= Time.deltaTime;
            //tests if enough time went by
            if (timeToNextAttack <= 0)
            {
                canMove = true;
            }
        }

        //defualt slow is off
        isSlowed = false;

        //tests if should be slowed
        if (timeSlowedLeft > 0)
        {
            timeSlowedLeft -= Time.deltaTime;
            if (timeSlowedLeft <= 0)
            {
                isSlowed = false;
            }
            else
            {
                isSlowed = true;
            }
        }

        //variables for speed in each direction
        float vertical   = 0.0f;
        float horizontal = 0.0f;

        //tests if player is allowed to move
        if (canMove)
        {
            //checks if paused pressed
            if (buttonListen.isPressed(ButtonType.PAUSE))
            {
                //pauses game and stops player
                PauseMenuControl.pause();
                return;
            }

            //gets the angle of how the stick was moved
            horizontal = Stick.Horizontal();
            vertical   = Stick.Vertical();

            //checks attack buttons
            if (buttonListen.isPressed(ButtonType.ATTACK_LIGHT) && timeToNextAttack <= 0)
            {
                attack(lightAttack, lightAttackDamage, false);
                animator.SetTrigger("lightattack");
                timeToNextAttack = 1;
                ASound.playAttackSound();
            }

            if (buttonListen.isPressed(ButtonType.ATTACK_HEAVY) && timeToNextAttack <= 0)
            {
                attack(heavyAttack, heavyAttackDamage, true);
                animator.SetTrigger("heavyattack");
                timeToNextAttack = 2;
                canMove          = false;
                ASound.playAttackSound();
            }

            //Ammo selector checks
            if (buttonListen.isPressed(ButtonType.AMMO_PRIMARY))
            {
                setActiveAmmoPrimary(true);
            }

            if (buttonListen.isPressed(ButtonType.AMMO_SECONDARY))
            {
                setActiveAmmoPrimary(false);
            }
        }


        //checks ranged stick
        //if player is aiming
        if (isAiming())
        {
            //slows player movement
            isSlowed = true;

            //calculates trajectory
            calculateTrajectoryStart(out powerPrev, out isLeftPrev, out slopePrev);

            //draws trajectory line
            lineRender.gameObject.SetActive(true);
            shootCon.drawTrajectory(transform.position, powerPrev, slopePrev, isLeftPrev, lineRender);
        }
        //if player has attempted to shoot
        if (shouldShoot())
        {
            //shoots in trajectory using previous settings
            lineRender.gameObject.SetActive(false);

            //checks if ammo is left
            if (getActiveSelect().canConsume(1))
            {
                //shoots
                shootCon.shoot(transform.position, powerPrev, slopePrev, isLeftPrev, gameObject);
                //updates counter
                getActiveSelect().consume(1);
            }
        }

        //set variable for speed(in each direction) needed to move
        moveDirection = new Vector2(horizontal, vertical);

        //if slowed reduces the speed
        if (isSlowed)
        {
            moveDirection -= (moveDirection * slowPerCent);
        }

        //sets the animation speed variable
        moveDirection *= speed;

        //gets total speed in float
        float speedmove = horizontal + vertical;

        //changes direction sprite is facing

        //checks for facing right and changes to move left (negative value(speed) is facing left)
        if (transform.localScale.x > 0)
        {
            if (speedmove < 0)
            {
                //sets facing direction to the left
                Vector3 scale = gameObject.transform.localScale;
                scale.Set(gameObject.transform.localScale.x * -1, gameObject.transform.localScale.y, gameObject.transform.localScale.z);
                gameObject.transform.localScale = scale;
            }
            //checks for facing left and changes to move right
        }
        else if (transform.localScale.x < 0)
        {
            if (speedmove > 0)
            {
                //sets facing direction to the right
                Vector3 scale = gameObject.transform.localScale;
                scale.Set(gameObject.transform.localScale.x * -1, gameObject.transform.localScale.y, gameObject.transform.localScale.z);
                gameObject.transform.localScale = scale;
            }
        }

        //gets absolute value of speedmove
        speedmove = Mathf.Abs(speedmove);

        //sets animator speed parameter
        animator.SetFloat("speed", speedmove);

        //sets velocity for movement
        controller.velocity = moveDirection;
    }