using Hovl;
using UnityEngine;

// Hovl의 HS_ProjectileMover(에셋)를 "수정하지 않고" 히트 이펙트를 코드로 터뜨리기 위한 서브클래스.
// 핵심: protected 멤버(hit/hitPS/projectilePS/collided)는 '파생 클래스'에서는 접근 가능하다.
// 그래서 에셋 원본은 그대로 두고, 충돌(Collision) 없이 판정 성공 시 Detonate()로 이펙트만 재생한다.
public class RhythmProjectile : HS_ProjectileMover
{
    // 판정 성공 시 호출. 노트가 곧 Destroy되어도 이펙트가 보이도록 노트에서 분리 후 재생.
    public void Detonate()
    {
        if (collided) return;
        collided = true;

        // 날아가는 동안의 트레일 파티클은 정지
        if (projectilePS != null)
            projectilePS.Stop(true, ParticleSystemStopBehavior.StopEmittingAndClear);

        // 히트 이펙트 컨테이너(없으면 파티클 본체)를 노트에서 떼어내 현재 위치에서 재생
        GameObject fx = hit != null ? hit : (hitPS != null ? hitPS.gameObject : null);
        if (fx == null) return;

        fx.transform.SetParent(null, true);
        fx.transform.position = transform.position;
        fx.SetActive(true);

        if (hitPS != null)
        {
            hitPS.Clear(true);
            hitPS.Play(true);
        }

        // 재생이 끝나면 분리한 이펙트도 정리
        float life = hitPS != null ? hitPS.main.duration + hitPS.main.startLifetime.constantMax : 2f;
        Destroy(fx, life);
    }
}
