using AsteroidGame.ScriptableObjects; using GameDev.CoreSystems; using UnityEngine; using UnityEngine.AI; namespace AsteroidGame.Entities { public class EnemyBase : EntityBase { [SerializeField] private SoEntityBaseRuntimeSet _enemyBaseSet; [field: Header("Targeter")] [SerializeField] private SoTargeterConfig _targeterConfig; [field: SerializeField] public Targeter Targeter { get; set; } [field: Header("NavMeshAgent")] [SerializeField] private NavMeshAgent _navMeshAgent; protected override void OnEnable() { base.OnEnable(); _enemyBaseSet.Add(this); InitializeTargeter(); InitializeNavMeshAgent(); } private void InitializeNavMeshAgent() { _navMeshAgent = gameObject.AddComponent(); _navMeshAgent.speed = 0.1f; } private void InitializeTargeter() { Targeter = gameObject.AddComponent(); Targeter.SetParent(this); Targeter.SetConfig(_targeterConfig); } protected override void OnDisable() { base.OnDisable(); _enemyBaseSet.Remove(this); } private void Update() { if (!Targeter.FoundTarget()) return; Target = Targeter.GetTarget(); _navMeshAgent.SetDestination(_target.GetBasePosition()); } } }