using System.Collections;
using UnityEngine;
namespace Streamingle.Contents.BossRaid
{
///
/// 화면 전체 이펙트: 흔들림, 플래시, 히트스톱.
/// 메인 카메라 기반으로 동작합니다.
///
public class ScreenEffect : MonoBehaviour
{
#region Fields
[Header("플래시 오버레이")]
[SerializeField]
[Tooltip("플래시용 CanvasGroup (ScreenSpace Overlay 하위). 없으면 자동 생성")]
private CanvasGroup flashOverlay;
private Coroutine _shakeCoroutine;
private Coroutine _flashCoroutine;
private Coroutine _hitStopCoroutine;
private Camera _mainCamera;
private Vector3 _cameraOriginalPos;
private Transform _cameraTransform;
#endregion
#region Unity Messages
private void Start()
{
_mainCamera = Camera.main;
if (_mainCamera != null)
{
_cameraTransform = _mainCamera.transform;
_cameraOriginalPos = _cameraTransform.localPosition;
}
EnsureFlashOverlay();
}
#endregion
#region Public Methods
///
/// 화면 흔들림
///
public void PlayShake(float intensity, float duration)
{
if (_cameraTransform == null) return;
if (_shakeCoroutine != null)
StopCoroutine(_shakeCoroutine);
_shakeCoroutine = StartCoroutine(ShakeCoroutine(intensity, duration));
}
///
/// 화면 플래시 (흰색/색상 오버레이)
///
public void PlayFlash(Color color, float duration)
{
if (_flashCoroutine != null)
StopCoroutine(_flashCoroutine);
_flashCoroutine = StartCoroutine(FlashCoroutine(color, duration));
}
///
/// 히트스톱 (TimeScale 일시 정지)
///
public void PlayHitStop(float duration)
{
if (duration <= 0f) return;
if (_hitStopCoroutine != null)
StopCoroutine(_hitStopCoroutine);
_hitStopCoroutine = StartCoroutine(HitStopCoroutine(duration));
}
#endregion
#region Private Methods
private void EnsureFlashOverlay()
{
if (flashOverlay != null) return;
var canvasObj = new GameObject("BossRaid_FlashOverlay");
var canvas = canvasObj.AddComponent