57 lines
1.4 KiB
C#
57 lines
1.4 KiB
C#
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>();
|
|
_navMeshAgent.speed = 0.1f;
|
|
}
|
|
|
|
private void InitializeTargeter()
|
|
{
|
|
Targeter = gameObject.AddComponent<Targeter>();
|
|
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());
|
|
}
|
|
}
|
|
} |