using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.AI; public class EnemyPathFinding : MonoBehaviour { [SerializeField] public Transform[] targets; [SerializeField] private float ropeDistCheck = 1f; [SerializeField] private LayerMask ropeCheckMask; private HealthComponent healthComponent; NavMeshAgent agent; private void Start() { agent = GetComponent(); agent.updateRotation = false; agent.updateUpAxis = false; healthComponent = GetComponent(); healthComponent.OnHealthZero.AddListener(Rumble); } private void Rumble() { RumbleManager.StartRumble(-1, 0.5f, 0.5f, 0.25f); CameraShaker.ShakecShake(0.1f, 0.25f); } private void Update() { if (targets.Length == 0) return; Transform closestTarget = GetClosestTarget(); if (closestTarget == null) return; // Make sure no rope parts are in front Vector2 dir = closestTarget.position - transform.position; if (Physics2D.Raycast(transform.position, dir.normalized, ropeDistCheck, ropeCheckMask)) return; try { agent.SetDestination(closestTarget.position); } catch { }// Fuck this error. } private Transform GetClosestTarget() { float dist = Mathf.Infinity; Transform shortest = targets[0]; foreach (var target in targets) { float targetDist = Vector2.Distance(target.position, transform.position); if (targetDist < dist) { dist = targetDist; shortest = target; } } return shortest; } }