Example #1
0
    private IEnumerator LosePlayer()
    {
        yield return(new WaitForSeconds(3));

        if (notSeePlayer || Vector2.Distance(transform.position, playerTransform.position) > 4)
        {
            _EnemiStatus = EnemiStatus.ReturnPatrol;
        }
    }
Example #2
0
    private void EnemiStat()
    {
        switch (_EnemiStatus)
        {
        case EnemiStatus.Patrol:
        {
            findPathPatrol = false;
            Debug.Log("patrol");
            body.velocity = new Vector2(PatrolPointsLists[choicePatrol].x - transform.position.x,
                                        PatrolPointsLists[choicePatrol].y - transform.position.y).normalized
                            *moveSpeed;

            Vector3 diff = new Vector3(PatrolPointsLists[choicePatrol].x, PatrolPointsLists[choicePatrol].y, 0.0f) - transform.position;
            diff.Normalize();

            float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);

            if (!notSeePlayer && Vector2.Distance(transform.position, playerTransform.position) < 8)
            {
                _EnemiStatus = EnemiStatus.Follow;
            }

            if (Vector2.Distance(transform.position, PatrolPointsLists[choicePatrol]) < 0.1f)
            {
                choicePatrol++;
                if (choicePatrol == PatrolPointsLists.Length)
                {
                    choicePatrol = 0;
                }
            }
        }
        break;

        case EnemiStatus.Attack:
        {
            findPathPatrol = false;
            Debug.Log("attack");
            body.velocity = new Vector2(0, 0);
            Vector3 diff = playerTransform.position - transform.position;
            diff.Normalize();

            float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);

            if (notSeePlayer || Vector2.Distance(transform.position, playerTransform.position) > 4)
            {
                _EnemiStatus = EnemiStatus.Follow;
            }
        }
        break;

        case EnemiStatus.Follow:
        {
            findPathPatrol = false;
            Debug.Log("follow");
            if (!notSeePlayer || Vector2.Distance(transform.position, playerTransform.position) < 3)
            {
                _EnemiStatus = EnemiStatus.Attack;
            }

            if (notSeePlayer || Vector2.Distance(transform.position, playerTransform.position) > 7)
            {
                StartCoroutine(LosePlayer());
            }

            Vector3 diff = new Vector3(pathFinding.finalPath[1].Position.x - transform.position.x, pathFinding.finalPath[1].Position.y - transform.position.y, 0.0f);
            diff.Normalize();

            float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);

            body.velocity = new Vector2(pathFinding.finalPath[1].Position.x - transform.position.x,
                                        pathFinding.finalPath[1].Position.y - transform.position.y).normalized *moveSpeed;

            if (Vector2.Distance(transform.position, pathFinding.finalPath[1].Position) < 0.1f)
            {
                pathFinding.useFindPath(enemyTarget);
            }
        }
        break;

        case EnemiStatus.ReturnPatrol:
        {
            Debug.Log("Repatrol");
            if (Vector2.Distance(transform.position, PatrolPointsLists[choicePatrol]) < 2)
            {
                _EnemiStatus = EnemiStatus.Patrol;
            }

            if (!findPathPatrol)
            {
                enemyTarget = PatrolPointsLists[choicePatrol];
                pathFinding.useFindPath(enemyTarget);
                findPathPatrol = true;
            }

            if (!notSeePlayer && Vector2.Distance(transform.position, playerTransform.position) < 3)
            {
                _EnemiStatus = EnemiStatus.Attack;
            }

            if (pathFinding.finalPath[0] == null || pathFinding.finalPath[1] == null)
            {
                _EnemiStatus = EnemiStatus.Patrol;
            }

            Vector3 diff = new Vector3(pathFinding.finalPath[1].Position.x - transform.position.x, pathFinding.finalPath[1].Position.y - transform.position.y, 0.0f);
            diff.Normalize();

            float rot_z = Mathf.Atan2(diff.y, -diff.x) * Mathf.Rad2Deg;
            transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90);

            body.velocity = new Vector2(pathFinding.finalPath[1].Position.x - transform.position.x, pathFinding.finalPath[1].Position.y - transform.position.y).normalized *moveSpeed;

            if (Vector2.Distance(transform.position, pathFinding.finalPath[1].Position) < 1)
            {
                pathFinding.finalPath.Clear();
                pathFinding.useFindPath(enemyTarget);
            }
        }
        break;
        }
    }