using UnityEngine;
using BaseGames.Combat;
using BaseGames.Core;
using BaseGames.Core.Pool;
namespace BaseGames.Enemies
{
///
/// 远程敌人。重写 以从对象池生成抛射物。
/// Behavior Designer 任务通过调用 SpawnProjectile(payload) 触发发射。
///
public class RangedEnemy : EnemyBase
{
[SerializeField] private ProjectileConfigSO _projectileConfig;
[SerializeField] private Transform _firePoint;
protected override void Awake()
{
base.Awake();
Debug.Assert(_projectileConfig != null, $"[RangedEnemy] {name}: 未配置 ProjectileConfigSO。", this);
}
///
/// 从对象池生成一枚抖射物并朝玩家发射。
/// payload 可留空;若传入多重配置键则由子类解析。
///
public override void SpawnProjectile(string payload)
{
var spawnPos = _firePoint != null ? _firePoint.position : transform.position;
var pool = ServiceLocator.GetOrDefault();
if (pool == null)
{
Debug.LogWarning($"[RangedEnemy] {name}: IObjectPoolService 未就绪,无法生成抛射物。");
return;
}
var go = pool.Spawn(
_projectileConfig.PoolKey,
spawnPos,
Quaternion.identity);
if (go == null) return;
var proj = go.GetComponent();
if (proj == null) return;
Vector2 dir = _playerTransform != null
? ((Vector2)(_playerTransform.position - spawnPos)).normalized
: (Vector2)transform.right;
var damageInfo = DamageInfo.From(_projectileConfig.DamageSource);
proj.Initialize(_projectileConfig, damageInfo, dir, gameObject.layer);
}
}
}