TowerDefenseGame/Assets/Scripts/Runtime/AI/StateMachines/EnemyStateManager.cs
Nico 719c1d0ba0 Added State Management code
Added AI code for enemies utilizing State Management
Created simple enemy prefab with the AI
2025-06-29 00:14:04 -07:00

55 lines
1.7 KiB
C#

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);
}
}