using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace Streamingle.Contents.BossRaid
{
///
/// 유저 피격 시 빨간 비네트 오버레이 + NiloToon 색상 플래시.
///
public class PlayerHitEffect : MonoBehaviour
{
#region Fields
// PlayerData에서 값을 읽되, 없으면 기본값 사용
private Color vignetteColor = new Color(1f, 0f, 0f, 0.4f);
private float vignetteDuration = 0.4f;
private Color hitTintColor = new Color(1f, 0.3f, 0.3f);
private float tintDuration = 0.3f;
private Canvas _canvas;
private Image _vignetteImage;
private Coroutine _vignetteCoroutine;
private Coroutine _tintCoroutine;
private PlayerController _player;
#endregion
#region Unity Messages
private void Awake()
{
CreateVignetteUI();
}
#endregion
#region Public Methods
public void Play(PlayerController player)
{
_player = player;
// PlayerData에서 값 읽기
if (player?.Data != null)
{
vignetteColor = player.Data.vignetteColor;
vignetteDuration = player.Data.vignetteDuration;
hitTintColor = player.Data.hitTintColor;
tintDuration = player.Data.hitTintDuration;
}
if (_vignetteCoroutine != null) StopCoroutine(_vignetteCoroutine);
_vignetteCoroutine = StartCoroutine(VignetteCoroutine());
if (_tintCoroutine != null) StopCoroutine(_tintCoroutine);
_tintCoroutine = StartCoroutine(TintCoroutine());
}
#endregion
#region Private Methods
private IEnumerator VignetteCoroutine()
{
_vignetteImage.color = vignetteColor;
float elapsed = 0f;
while (elapsed < vignetteDuration)
{
elapsed += Time.deltaTime;
float t = elapsed / vignetteDuration;
var c = vignetteColor;
c.a = vignetteColor.a * (1f - t);
_vignetteImage.color = c;
yield return null;
}
_vignetteImage.color = Color.clear;
_vignetteCoroutine = null;
}
private IEnumerator TintCoroutine()
{
if (_player == null) yield break;
_player.FlashHitColor(hitTintColor);
yield return new WaitForSeconds(tintDuration * 0.3f);
// 부드럽게 원래 색상으로
float elapsed = 0f;
float fadeDur = tintDuration * 0.7f;
while (elapsed < fadeDur)
{
elapsed += Time.deltaTime;
float t = elapsed / fadeDur;
Color c = Color.Lerp(hitTintColor, Color.white, t);
_player.FlashHitColor(c);
yield return null;
}
_player.RestoreColor();
_tintCoroutine = null;
}
private void CreateVignetteUI()
{
var canvasObj = new GameObject("BossRaid_PlayerVignette");
canvasObj.transform.SetParent(transform);
_canvas = canvasObj.AddComponent