示例#1
0
 private void Roam()
 {
     //Move = new Vector2(UnityEngine.Random.Range(-1f,1f), Random.Range(-1f, 1f));
     Move = roamDirection;
     Move.Normalize();
     previousState = PriestState.Roam;
 }
示例#2
0
    private void Chase()
    {
        if (previousState != PriestState.Chase)
        {
            SoundManager.instance.PlayPriestSound();
            if (foundPlayerParticleSystems != null)
            {
                foreach (var particleSystem in foundPlayerParticleSystems)
                {
                    particleSystem.Play();
                }
            }
        }

        Vector2 direction;

        if (scareCrowToChase != null)
        {
            direction = scareCrowToChase.transform.position - transform.position;
        }
        else
        {
            direction = player.position - transform.position;
        }

        direction.Normalize();
        Move = direction;

        previousState = PriestState.Chase;
    }
示例#3
0
    private void Update()
    {
        if (scarecrows.Count > 0)
        {
            foreach (var scarecrow in scarecrows)
            {
                if (Vector2.Distance(transform.position, scarecrow.transform.position) < 50)
                {
                    scareCrowToChase = scarecrow;
                    myState          = PriestState.Chase;
                }
            }

            if (scareCrowToChase == null)
            {
                if (Vector2.Distance(player.transform.position, transform.position) < 50)
                {
                    myState = PriestState.Chase;
                }
                else
                {
                    myState = PriestState.Roam;
                }
            }
        }
        else
        {
            if (Vector2.Distance(player.transform.position, transform.position) < 50)
            {
                myState = PriestState.Chase;
            }
            else
            {
                myState = PriestState.Roam;
            }

            scareCrowToChase = null;
        }

        switch (myState)
        {
        case PriestState.Idle:
            Idle();
            break;

        case PriestState.Roam:
            Roam();
            break;

        case PriestState.Chase:
            Chase();
            break;

        default:
            break;
        }

        if (Move.Equals(Vector2.zero))
        {
            animator.SetBool("walk", false);
        }
        animator.SetBool("walk", true);

        if (scareCrowToChase == null)
        {
            if (Move.x < 0)
            {
                transform.localScale = new Vector3(-1, 1, 1);
            }
            else
            {
                transform.localScale = new Vector3(1, 1, 1);
            }
        }

        rb.velocity = Move * speed;
    }
示例#4
0
 private void Idle()
 {
     Move          = new Vector2(0, 0);
     previousState = PriestState.Idle;
 }