using System.Collections.Generic;
using UnityEngine;
using Platformer.Mechanics;
namespace EerieVillage.Skills.Effectors
{
///
/// A08 저주의 화살 — 저주 스택 관리 정적 레지스트리.
/// N 스택 도달 시 누적 폭발 대미지 처리.
/// BT12-Dev Phase 2-B §4-6.
///
/// 주의: 씬 전환·EnemyController 파괴 시 Clear(enemy)를 외부에서 호출해야
/// Dictionary 누수를 방지할 수 있다 (Phase 2-C GC 개선 대상).
///
public static class DebuffStack
{
private static readonly Dictionary _stacks =
new Dictionary();
///
/// 스택 1 추가. limit 도달 시 폭발 대미지 처리 후 스택 초기화.
/// explosionDamage = ActiveSkillData.BaseDamage 기준.
///
public static void AddStack(EnemyController enemy, int limit, int explosionDamage)
{
if (enemy == null) return;
if (!_stacks.ContainsKey(enemy))
_stacks[enemy] = 0;
_stacks[enemy]++;
if (_stacks[enemy] >= limit)
{
// N스택 폭발 대미지 — 스택 수 × baseDamage × 2
int total = explosionDamage * _stacks[enemy] * 2;
var health = enemy.GetComponent();
if (health != null && health.IsAlive)
{
health.Decrement(total);
}
_stacks[enemy] = 0;
}
}
///
/// 적 사망 또는 씬 전환 시 스택 레코드 제거.
///
public static void Clear(EnemyController enemy)
{
if (enemy != null)
_stacks.Remove(enemy);
}
/// 현재 스택 수 조회 (디버그용).
public static int GetStack(EnemyController enemy)
{
if (enemy == null) return 0;
return _stacks.TryGetValue(enemy, out int v) ? v : 0;
}
}
}