using AI.Base; using UnityEngine; using static TMPro.SpriteAssetUtilities.TexturePacker_JsonArray; public class EnemyStateManager : StateManager { [Header("States")] [SerializeField] public StateNode WalkState; [SerializeField] public StateNode ChaseState; [SerializeField] public StateNode AttackState; [Header("Attributes")] [SerializeField] private float ChaseDistance = 10f; [SerializeField] private float AttackDistance = 1f; private Transform Player; protected void Start() { Player = GameObject.FindGameObjectWithTag("Player")?.transform; WalkState.Initialize(this.transform); ChaseState.Initialize(this.transform); AttackState.Initialize(this.transform); CurrentState = WalkState; CurrentState.Start(); } override protected IState GetNextState() { if (Player == null) return CurrentState; float dist = Vector2.Distance(transform.position, Player.position); if (dist < AttackDistance) return AttackState.GetNextState(); else if (dist < ChaseDistance) return ChaseState.GetNextState(); else return WalkState.GetNextState(); } private void OnDrawGizmos() { DrawChaseDistance(); DrawAttackDistance(); } private void DrawChaseDistance() { Gizmos.color = CurrentState == (IState)ChaseState ? Color.yellow : Color.green; Vector2 center = this.transform.position; Gizmos.DrawWireSphere(center, ChaseDistance); } private void DrawAttackDistance() { Gizmos.color = CurrentState == (IState)AttackState ? Color.red : Color.green; Vector2 center = this.transform.position; Gizmos.DrawWireSphere(center, AttackDistance); } }