using Platformer.Core;
using EerieVillage.Skills.Effectors;
namespace EerieVillage.Skills
{
///
/// 스킬 발동 이벤트. Simulation.Event<T> 계승.
/// ActiveSkillRuntime.Fire()에서 Simulation.Schedule<SkillFireEvent>() 호출.
/// BT12-Dev v1 §3-4 정합.
///
/// Phase 2-A: Execute = stub.
/// Phase 2-B: ActiveCategory.Projectile → ProjectileSpawner 연결 완료.
/// 나머지 카테고리 (MeleeArea·PlacementPersistent·Minion·Debuff·SpecialJudge) = Phase 2-C~ 예정.
///
public class SkillFireEvent : Simulation.Event
{
/// 발동 요청한 액티브 스킬 런타임
public ActiveSkillRuntime Runtime;
/// 플레이어 스킬 인벤토리 (Stats·위치·방향 조회 경로)
public PlayerSkillInventory Inventory;
public override void Execute()
{
if (Runtime == null) return;
var data = Runtime.ActiveData;
if (data == null) return;
if (Inventory == null) return;
// 카테고리 분기 → IEffector 호출
IEffector effector = null;
switch (data.Category)
{
case ActiveCategory.Projectile:
effector = new ProjectileSpawner();
break;
// PD 지시 2026-05-13 — MeleeArea 영역 CardId 분기 (TestSkillFireOn1to5 영역 동일 패턴)
case ActiveCategory.MeleeArea:
if (data.CardId == "A04") effector = new LightningStrikeSpawner();
else if (data.CardId == "A_Laser") effector = new LaserSpawner();
else effector = new MeleeAreaSpawner();
break;
// Phase 2-C~ 예정: PlacementPersistent·Minion·Debuff·SpecialJudge
default:
return;
}
effector?.Trigger(Runtime, Inventory);
}
internal override void Cleanup()
{
Runtime = null;
Inventory = null;
}
}
}