62 lines
2.1 KiB
C#
62 lines
2.1 KiB
C#
using Platformer.Core;
|
|
using EerieVillage.Skills.Effectors;
|
|
|
|
namespace EerieVillage.Skills
|
|
{
|
|
/// <summary>
|
|
/// 스킬 발동 이벤트. 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~ 예정.
|
|
/// </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;
|
|
|
|
// Phase 2-C~ 예정: PlacementPersistent·Minion·Debuff·SpecialJudge
|
|
default:
|
|
return;
|
|
}
|
|
|
|
effector?.Trigger(Runtime, Inventory);
|
|
}
|
|
|
|
internal override void Cleanup()
|
|
{
|
|
Runtime = null;
|
|
Inventory = null;
|
|
}
|
|
}
|
|
}
|