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; // PD 지시 2026-05-13 Phase B — A06 독 늪 (PlacementPersistent)·A11 정령불 (Minion) case ActiveCategory.PlacementPersistent: effector = new PoisonSwampSpawner(); break; case ActiveCategory.Minion: effector = new SpiritFireSpawner(); break; // Phase 2-C~ 예정: Debuff·SpecialJudge default: return; } effector?.Trigger(Runtime, Inventory); } internal override void Cleanup() { Runtime = null; Inventory = null; } } }