using System.Collections; using AibisDream.FixSystem; using AibisDream.UI; using UnityEngine; using Yarn.Unity; namespace AibisDream.MiniGame.HuoShan { /// /// 波形显示系统的Yarn命令 /// /// 功能: /// - 设备控制:show/hide_waveform_detector /// - 连接控制:connect/disconnect_waveform_detector /// - 扫描模式:enable_scan_logic/emotion, wait_scan_locked/not_found /// - 时间戳:show_timestamp_waveform, get_locked_timestamp() /// - 波形显示:show_waveform "emotion/logic/joke/filter_output" /// - 波形效果:check_waveform, check_waveform_pass/fail, modify_waveform /// public static class WaveformYarnCommand { private static WaveformDetector GetDetector() { return FixSystemCenter.SystemDic.Get(); } #region 设备控制 [YarnCommand("show_waveform_detector")] public static IEnumerator ShowWaveformDetector() { var detector = GetDetector(); if (detector != null) { yield return detector.Show(); } } [YarnCommand("hide_waveform_detector")] public static IEnumerator HideWaveformDetector(float duration = 0.3f) { var detector = GetDetector(); if (detector != null) { yield return detector.Hide(duration); } } #endregion #region 连接控制 /// /// 连接波形检测器到指定模块 /// [YarnCommand("connect_waveform_detector")] public static IEnumerator ConnectWaveformDetector(string moduleId) { var detector = GetDetector(); if (detector != null) { yield return detector.ConnectToModule(moduleId); } } /// /// 断开波形检测器连接 /// [YarnCommand("disconnect_waveform_detector")] public static void DisconnectWaveformDetector() { var detector = GetDetector(); if (detector != null) { detector.Disconnect(); } } #endregion #region 扫描模式 /// /// 启用扫描模式 - 逻辑模式(有清晰点可锁定) /// [YarnCommand("enable_scan_logic")] public static IEnumerator EnableScanLogic(string label = "寻找逻辑信号") { var detector = GetDetector(); if (detector != null) { yield return detector.EnableScanMode(WaveformDetector.ScanMode.Logic, label); } } /// /// 启用扫描模式 - 情绪模式(找不到) /// [YarnCommand("enable_scan_emotion")] public static IEnumerator EnableScanEmotion(string label = "寻找情绪信号") { var detector = GetDetector(); if (detector != null) { yield return detector.EnableScanMode(WaveformDetector.ScanMode.Emotion, label); } } /// /// 停止扫描模式 /// [YarnCommand("stop_scan_mode")] public static void StopScanMode() { var detector = GetDetector(); if (detector != null) { detector.StopScanMode(); } } /// /// 等待扫描锁定(逻辑模式) /// [YarnCommand("wait_scan_locked")] public static IEnumerator WaitScanLocked() { var detector = GetDetector(); if (detector != null) { while (!detector.IsLocked) { yield return null; } } } /// /// 等待扫描完成未找到(情绪模式) /// [YarnCommand("wait_scan_not_found")] public static IEnumerator WaitScanNotFound() { var detector = GetDetector(); if (detector != null) { while (!detector.NotFoundTriggered) { yield return null; } } } /// /// 检查是否已锁定 /// [YarnFunction("is_scan_locked")] public static bool IsScanLocked() { var detector = GetDetector(); return detector != null && detector.IsLocked; } /// /// 检查是否扫描完成未找到 /// [YarnFunction("is_scan_not_found")] public static bool IsScanNotFound() { var detector = GetDetector(); return detector != null && detector.NotFoundTriggered; } /// /// 检查是否已覆盖全部区域 /// [YarnFunction("is_fully_covered")] public static bool IsFullyCovered() { var detector = GetDetector(); return detector != null && detector.FullyCovered; } #endregion #region 时间戳 /// /// 获取锁定的时间戳 /// [YarnFunction("get_locked_timestamp")] public static string GetLockedTimestamp() { var detector = GetDetector(); return detector != null ? detector.LockedTimestamp : ""; } /// /// 显示锁定时间戳对应的原始波形 /// [YarnCommand("show_timestamp_waveform")] public static IEnumerator ShowTimestampWaveform() { var detector = GetDetector(); if (detector != null) { yield return detector.ShowTimestampWaveform(); } } #endregion #region 波形显示(保持兼容) [YarnCommand("show_waveform")] public static IEnumerator ShowWaveform(string waveformType, float duration = 0.5f) { var detector = GetDetector(); if (detector != null) { if (!detector.IsShown) yield return detector.Show(); yield return detector.ShowWaveform(waveformType, duration); } } [YarnCommand("hide_waveform")] public static IEnumerator HideWaveform(float duration = 0.3f) { var detector = GetDetector(); if (detector != null) { yield return detector.HideWaveform(duration); } } [YarnCommand("transform_waveform")] public static IEnumerator TransformWaveform(string fromType, string toType, float duration = 1f) { var detector = GetDetector(); if (detector != null) { yield return detector.TransformWaveform(fromType, toType, duration); } } #endregion #region 结果显示 [YarnCommand("show_waveform_result")] public static void ShowWaveformResult(string message, bool isSuccess = true) { var detector = GetDetector(); if (detector != null) { detector.ShowResult(isSuccess, message); } } [YarnCommand("hide_waveform_result")] public static void HideWaveformResult() { var detector = GetDetector(); if (detector != null) { detector.HideResult(); } } #endregion #region 波形效果命令 /// /// 波形检测效果(闪烁) /// [YarnCommand("check_waveform")] public static IEnumerator CheckWaveform(int blinkCount = 3) { var detector = GetDetector(); if (detector != null) { yield return detector.WaveformCheckEffect(blinkCount); } } /// /// 屏蔽词检测效果(横扫) /// [YarnCommand("check_waveform_sweep")] public static IEnumerator CheckWaveformSweep(int sweepCount = 2, float sweepDuration = 0.25f) { var detector = GetDetector(); if (detector != null) { yield return detector.WaveformSweepCheck(sweepCount, sweepDuration); } } /// /// 限幅检测效果(探测最大/最小) /// [YarnCommand("check_waveform_range")] public static IEnumerator CheckWaveformRange(int pulseCount = 2, float pulseInterval = 0.12f) { var detector = GetDetector(); if (detector != null) { yield return detector.WaveformRangeCheck(pulseCount, pulseInterval); } } /// /// 波形检测通过效果(绿色闪烁) /// [YarnCommand("check_waveform_pass")] public static IEnumerator CheckWaveformPass() { var detector = GetDetector(); if (detector != null) { yield return detector.WaveformCheckPass(); } } /// /// 波形检测失败/警告效果(红色闪烁) /// [YarnCommand("check_waveform_fail")] public static IEnumerator CheckWaveformFail() { var detector = GetDetector(); if (detector != null) { yield return detector.WaveformCheckFail(); } } /// /// 波形被篡改的变换效果 /// 用法: transform_waveform "emotion" "joke" 2 /// [YarnCommand("modify_waveform")] public static IEnumerator ModifyWaveform(string fromType, string toType, float duration = 1.5f) { var detector = GetDetector(); if (detector != null) { yield return detector.TransformWaveform(fromType, toType, duration); } } #endregion #region 报错效果(Stage4使用) [YarnCommand("show_error_flood")] public static IEnumerator ShowErrorFlood(int count = 5, float interval = 0.3f) { var errorMessages = new string[] { "[ERROR] 悲伤表达单元:信号堆积溢出", "[ERROR] 焦虑表达单元:无法处理积压请求", "[ERROR] 恐惧表达单元:RAM不足", "[WARNING] 表达模块即将闭锁", "[CRITICAL] 系统响应超时", "[ERROR] 未处理的情绪信号队列已满", "[WARNING] 低频信号被阻塞", "[ERROR] 表达缓冲区溢出" }; var panel = UIManager.Instance?.GetPanel(); if (panel != null) { for (int i = 0; i < Mathf.Min(count, errorMessages.Length); i++) { yield return panel.OpenWarningWindow(errorMessages[i % errorMessages.Length]); yield return new WaitForSeconds(interval); } } } [YarnCommand("clear_errors")] public static void ClearErrors() { // 报错窗口会自动关闭 } #endregion } }