Пример #1
0
    public airEnemyState setEnemyState(airEnemyState newState)
    {
        switch (newState)
        {
        case airEnemyState.idle:
            //rb2d.gravityScale = 0f;
            rb2d.velocity = Vector2.zero;
            break;

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

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

        case airEnemyState.goHome:
            break;

        case airEnemyState.waterSurface:
            //rb2d.gravityScale = .5f;
            break;
        }


        return(newState);
    }
Пример #2
0
    // 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 && enemyInAir && GameManager.instance.score > 0)
        {
            state     = setEnemyState(airEnemyState.pursue);
            idleTimer = 10f;
            //print ("pursue");
            //print (enemyToPuffin.sqrMagnitude);
        }


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

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

        case airEnemyState.patrol:
            rb2d.velocity = direction * patrolSpeed;
            if ((((Vector2)transform.position - startPosition).sqrMagnitude > 10f * 10f) || transform.position.y >= maxHeight)            // && changeDir == false)
            {
                state = setEnemyState(airEnemyState.patrol);

                //direction = patrolDirection ();
                //direction = -direction;
                //print ("Switch");
                //changeDir = true;
                //startPosition = rb2d.position;
            }
            if (enemyInWater)
            {
                state = setEnemyState(airEnemyState.goHome);
                //direction.y = 1;
            }

            /*if (((Vector2)transform.position - startPosition).sqrMagnitude < 10f * 10f)
             * {
             *      changeDir = false;
             * } */
            break;

        case airEnemyState.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(airEnemyState.idle);
            }

            if (enemyInWater)
            {
                state = setEnemyState(airEnemyState.waterSurface);
            }
            break;

        case airEnemyState.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(airEnemyState.patrol);
            }
            break;


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