public waterEnemyState setEnemyState(waterEnemyState newState)
    {
        switch (newState)
        {
        case waterEnemyState.idle:
            //rb2d.gravityScale = 0f;
            rb2d.velocity = Vector2.zero;
            break;

        case waterEnemyState.patrol:
            startPosition = rb2d.position;
            direction     = patrolDirection();
            rb2d.velocity = direction * patrolSpeed;
            break;

        case waterEnemyState.pursue:
            idleTimer = 10f;
            break;

        case waterEnemyState.goHome:
            break;

        case waterEnemyState.waterSurface:
            if (enemyToPuffin.y > 0)
            {
                Vector2 noY = new Vector2(rb2d.velocity.x, 0f);
                rb2d.velocity = noY;
            }
            break;
        }


        return(newState);
    }
    // Update is called once per frame
    void Update()
    {
        idleTimer     = (idleTimer > 0 && (Vector2)transform.position != startPosition)? idleTimer - Time.deltaTime : 0f;
        enemyToPuffin = (puffin.transform.position - transform.position);


        flipSprite();

        if (enemyToPuffin.sqrMagnitude < pursuitRange * pursuitRange && enemyInWater && GameManager.instance.score > 0)
        {
            state     = setEnemyState(waterEnemyState.pursue);
            idleTimer = 10f;
            //print ("pursue");
            //print (enemyToPuffin.sqrMagnitude);
        }


        if (idleTimer == 0f && ((Vector2)transform.position - startPosition).sqrMagnitude > 5f)
        {
            //state = setEnemyState (waterEnemyState.goHome);
        }

        /*if (enemyInWater)
         * {
         *      state = setEnemyState (airEnemyState.idle);
         *
         * }*/
        switch (state)
        {
        case waterEnemyState.idle:
            rb2d.velocity = Vector2.zero;
            if (idleTimer == 0 && ((Vector2)transform.position - startPosition).sqrMagnitude > 5f * 5f)
            {
                state = setEnemyState(waterEnemyState.goHome);
            }
            break;

        case waterEnemyState.patrol:
            rb2d.velocity = direction * patrolSpeed;
            if (((Vector2)transform.position - startPosition).sqrMagnitude > 10f * 10f && changeDir == false)             // If Enemy travels farther than maximum range, calculate new direction
            {
                //direction = -direction;
                direction = patrolDirection();
                //print ("Switch");
                changeDir = true;
                //startPosition = rb2d.position;
            }
            if (enemyInAir)
            {
                state = setEnemyState(waterEnemyState.goHome);
                //direction.y = 1;
            }
            if (((Vector2)transform.position - startPosition).sqrMagnitude < 10f * 10f)
            {
                changeDir = false;
            }
            break;

        case waterEnemyState.pursue:         // right now it is normalized. Try to think of another way to get direction, this is expensive?
            direction     = enemyToPuffin.normalized;
            rb2d.velocity = direction * pursuitSpeed;
            idleTimer     = 5f;
            if (enemyToPuffin.sqrMagnitude > pursuitRange * pursuitRange || GameManager.instance.score == 0)
            {
                state = setEnemyState(waterEnemyState.idle);
            }

            if (enemyInAir)
            {
                state = setEnemyState(waterEnemyState.waterSurface);
            }
            break;

        case waterEnemyState.goHome:
            direction     = (startPosition - (Vector2)transform.position).normalized;
            rb2d.velocity = direction * pursuitSpeed;
            if (((Vector2)transform.position - startPosition).sqrMagnitude < 1f)           //((Vector2)transform.position - startPosition).sqrMagnitude <5f) //(Vector2)transform.position == startPosition
            {
                state = setEnemyState(waterEnemyState.patrol);
            }
            break;


        case waterEnemyState.waterSurface:

            if (enemyToPuffin.sqrMagnitude < pursuitRange * pursuitRange && enemyToPuffin.y < 0 && GameManager.instance.score > 0)
            {
                state = setEnemyState(waterEnemyState.pursue);
            }
            else if (idleTimer == 0f)
            {
                state = setEnemyState(waterEnemyState.goHome);
            }
            break;
        }
    }