private IEnumerator LosePlayer() { yield return(new WaitForSeconds(3)); if (notSeePlayer || Vector2.Distance(transform.position, playerTransform.position) > 4) { _EnemiStatus = EnemiStatus.ReturnPatrol; } }
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; } }