private void DetectPlayer() { if (m_currentTarget == null) { Collider2D col = Physics2D.OverlapCircle(transform.position, (m_spookyTimeManager.IsSpookyTimeActive()) ? m_spookyTimeDetectionRadius : m_detectionRange, m_detectionMask); if (col != null) { if (!Physics2D.Linecast(transform.position, col.transform.position, m_blockingMask)) { if (m_lostPlayer) { StopCoroutine(m_lostCoroutine); m_lostPlayer = false; } m_currentTarget = col.gameObject; m_aiCont.SetPlayerTransform(m_currentTarget.transform); m_aiCont.ChangeState(AI_Controller.AIStates.CHASE); } } } else { Collider2D[] cols = Physics2D.OverlapCircleAll(transform.position, (m_spookyTimeManager.IsSpookyTimeActive()) ? m_spookyTimeDetectionRadius : m_detectionRange, m_detectionMask); bool currentTargetInBounds = false; foreach (Collider2D col in cols) { if (col.gameObject == m_currentTarget) { if (!Physics2D.Linecast(transform.position, col.transform.position, m_blockingMask)) { currentTargetInBounds = true; break; } } } if (!currentTargetInBounds) { if (!m_lostPlayer) { m_lostPlayer = true; m_lostCoroutine = StartCoroutine(LostTimer()); } } } }