using System.Collections; using AibisDream.FixSystem; using UnityEngine; using Yarn.Unity; namespace AibisDream.MiniGame.HuoShan.EmotionWave { /// /// 情绪波形系统的 Yarn 命令接口 /// /// 功能: /// - 显示/隐藏:show_emotion_wave, hide_emotion_wave /// - 进度控制:emotion_wave_to(动画到指定进度),set_emotion_wave(立即设置) /// - 状态查询:is_emotion_wave_shown() /// public static class EmotionWaveYarnCommand { private static EmotionWaveManager GetManager() { return FixSystemCenter.SystemDic.Get(); } #region 显示/隐藏 /// /// 显示情绪波形 /// 用法: <> /// <> /// [YarnCommand("show_emotion_wave")] public static IEnumerator ShowEmotionWave(float duration = -1f) { var manager = GetManager(); if (manager != null) { yield return manager.Show(duration); } } /// /// 隐藏情绪波形 /// 用法: <> /// <> /// [YarnCommand("hide_emotion_wave")] public static IEnumerator HideEmotionWave(float duration = -1f) { var manager = GetManager(); if (manager != null) { yield return manager.Hide(duration); } } #endregion #region 进度控制 /// /// 动画到指定进度(以指定时间动画到指定进度值,完成后返回给 Yarn) /// 用法: <> -- 2秒内动画到进度0.5 /// <> -- 默认1秒内动画到进度1.0 /// [YarnCommand("emotion_wave_to")] public static IEnumerator EmotionWaveTo(float progress, float duration = 1f) { var manager = GetManager(); if (manager != null) { yield return manager.AnimateToProgress(progress, duration); } } /// /// 立即设置进度(不等待) /// 用法: <> /// [YarnCommand("set_emotion_wave")] public static void SetEmotionWave(float progress) { var manager = GetManager(); if (manager != null) { manager.SetProgress(progress); } } #endregion #region 状态查询 /// /// 检查情绪波形是否已显示 /// 用法: <> /// [YarnFunction("is_emotion_wave_shown")] public static bool IsEmotionWaveShown() { var manager = GetManager(); return manager != null && manager.IsShown; } /// /// 获取当前进度 /// 用法: <> /// [YarnFunction("get_emotion_wave_progress")] public static float GetEmotionWaveProgress() { var manager = GetManager(); return manager != null ? manager.CurrentProgress : 0f; } /// /// 获取目标进度 /// 用法: <> /// [YarnFunction("get_emotion_wave_target")] public static float GetEmotionWaveTarget() { var manager = GetManager(); return manager != null ? manager.TargetProgress : 0f; } #endregion #region 预设切换 /// /// 切换波形预设(normal / predicted / modified_joke / empty) /// empty 为低存在感待机态,会保留极弱噪波 /// 用法: <> /// <> /// <> /// <> /// [YarnCommand("switch_emotion_wave_config")] public static void SwitchEmotionWaveConfig(string presetId, float progress = -1f) { var manager = GetManager(); if (manager != null) { manager.SetPreset(presetId); if (progress >= 0f) manager.SetProgress(progress); } } #endregion #region Slider 同步控制 /// /// 启用滑片同步(情绪波形进度跟随 SliderController) /// 用法: <> /// [YarnCommand("enable_emotion_wave_slider_sync")] public static void EnableSliderSync() { var manager = GetManager(); if (manager != null) { manager.SetSliderSyncEnabled(true); } } /// /// 禁用滑片同步(情绪波形进度由 Yarn 命令控制) /// 用法: <> /// [YarnCommand("disable_emotion_wave_slider_sync")] public static void DisableSliderSync() { var manager = GetManager(); if (manager != null) { manager.SetSliderSyncEnabled(false); } } #endregion } }