EerieVillage/Assets/Scripts/Skills/Events/SkillFireEvent.cs

71 lines
2.5 KiB
C#

using Platformer.Core;
using EerieVillage.Skills.Effectors;
namespace EerieVillage.Skills
{
/// <summary>
/// 스킬 발동 이벤트. Simulation.Event&lt;T&gt; 계승.
/// ActiveSkillRuntime.Fire()에서 Simulation.Schedule&lt;SkillFireEvent&gt;() 호출.
/// BT12-Dev v1 §3-4 정합.
///
/// Phase 2-A: Execute = stub.
/// Phase 2-B: ActiveCategory.Projectile → ProjectileSpawner 연결 완료.
/// 나머지 카테고리 (MeleeArea·PlacementPersistent·Minion·Debuff·SpecialJudge) = Phase 2-C~ 예정.
/// </summary>
public class SkillFireEvent : Simulation.Event<SkillFireEvent>
{
/// <summary>발동 요청한 액티브 스킬 런타임</summary>
public ActiveSkillRuntime Runtime;
/// <summary>플레이어 스킬 인벤토리 (Stats·위치·방향 조회 경로)</summary>
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;
}
}
}