using UnityEngine;
using UnityEngine.Video;
using OctoCore.Transitions;
using Unheimlich.Transitions;
namespace Unheimlich.Features.Hallucination
{
///
/// Scene-local trigger for a double-blink hallucination sequence. Delegates all
/// visual work to the persistent OctoEyelidBlink singleton.
///
public class HallucinationFlash : MonoBehaviour
{
[SerializeField] private VideoClip _clip;
[SerializeField] private Material _material;
[Header("Timings")]
[SerializeField, Min(0f)] private float _closeDuration = 0.1f;
[SerializeField, Min(0f)] private float _holdClosed = 0.05f;
[SerializeField, Min(0f)] private float _openDuration = 0.15f;
[SerializeField, Min(0f)] private float _visibleHold = 0.5f;
[SerializeField, Range(0f, 1f)] private float _showVideoAtCloseProgress = 0.25f;
/// Triggers the hallucination sequence. No-op if the singleton is missing or busy.
public void Play()
{
OctoEyelidBlink blink = OctoEyelidBlink.Instance;
if (blink == null)
{
Debug.LogWarning("[HallucinationFlash] OctoEyelidBlink singleton not found in scene.");
return;
}
if (blink.IsBusy)
return;
blink.SetClip(_clip, _material);
blink.CloseEyes(_closeDuration, () =>
{
blink.Hold(_holdClosed, () =>
{
blink.OpenEyes(_openDuration, () =>
{
blink.Hold(_visibleHold, () =>
{
blink.CloseEyes(_closeDuration, () =>
{
blink.HideVideo();
blink.Hold(_holdClosed, () =>
{
blink.OpenEyes(_openDuration, null);
});
});
});
});
});
});
blink.ShowVideoAfterDelay(_closeDuration * _showVideoAtCloseProgress);
}
}
}