using System.Collections;
using System.Collections.Generic;
using AibisDream.FixSystem;
using AibisDream;
using Yarn.Unity;
namespace AibisDream.MiniGame.Language
{
///
/// 表达系统的 Yarn 命令接口(原语言系统)
///
public static class LanguageYarnCommand
{
private static AibisDream.ExpressionManager ExpressionManager => FixSystemCenter.SystemDic.Get();
///
/// 启动表达粒子系统(在打开视图后调用),等待火山表达panel播完再返回
/// <>
///
/// 干扰短句(笑话等),用 | 分隔,用于非目标粒子字符池,如:"哈哈|嘿嘿|呵呵"
/// 目标句子
/// 完成时触发的对话节点(可选)
[YarnCommand("start_expression")]
public static IEnumerator StartExpression(string anxietyPhrasesStr, string targetSentence, string completionNode = "")
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!请确保场景中有 ExpressionManager 组件。");
yield break;
}
// 解析干扰短句(用 | 分隔)
string[] phrases = null;
if (!string.IsNullOrEmpty(anxietyPhrasesStr))
{
phrases = anxietyPhrasesStr.Split('|');
for (int i = 0; i < phrases.Length; i++)
{
phrases[i] = phrases[i].Trim();
}
}
// 若火山释放 log 界面已淡出,先淡入再开始流程
yield return ExpressionManager.EnsureReleaseLogFadedIn(1f);
ExpressionManager.StartSystem(phrases, targetSentence, completionNode);
yield return ExpressionManager.WaitUntilExpressionFlowReady();
}
///
/// 关闭表达系统
/// <>
///
[YarnCommand("close_expression")]
public static void CloseExpression()
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
return;
}
ExpressionManager.CloseView();
}
///
/// 重置表达系统(使用当前配置)
/// <>
/// 或
/// <> // 不播放入场动画
///
/// 是否播放入场效果
[YarnCommand("reset_expression")]
public static void ResetExpression(bool playEntranceEffect = true)
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
return;
}
ExpressionManager.ResetSystem(playEntranceEffect);
}
///
/// 触发聚焦稳定化(从文字飘动保持态 → 概率递增 → 文字锁定 → 排列),等待全流程完成后返回
/// <>
///
[YarnCommand("resolve_expression_focus")]
public static IEnumerator ResolveExpressionFocus()
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
yield break;
}
yield return ExpressionManager.StartCoroutine(ExpressionManager.ResolveFocusAndWait());
}
///
/// 淡入 ExpressionManager 的 Sprite 图片
/// <>
/// <>
///
/// 淡入时长(秒),默认 1
[YarnCommand("expression_sprite_fade_in")]
public static IEnumerator ExpressionSpriteFadeIn(float duration = 1f)
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
yield break;
}
yield return ExpressionManager.StartCoroutine(ExpressionManager.FadeInSpriteOverlay(duration));
}
///
/// 淡出 ExpressionManager 的 Sprite 图片
/// <>
/// <>
///
/// 淡出时长(秒),默认 1
[YarnCommand("expression_sprite_fade_out")]
public static IEnumerator ExpressionSpriteFadeOut(float duration = 1f)
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
yield break;
}
yield return ExpressionManager.StartCoroutine(ExpressionManager.FadeOutSpriteOverlay(duration));
}
///
/// Glitch 噪波过渡,等待完成后再继续下一步。
/// <> -- 从 0 到 0.95,2 秒
/// <> -- 立即到 0.95(duration 默认 0)
/// <> -- 从 0.3 到 0.45,1 秒
///
[YarnCommand("glitch_transition")]
public static IEnumerator GlitchTransition(float to, float duration = 0f)
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
yield break;
}
yield return ExpressionManager.StartCoroutine(ExpressionManager.TransitionGlitchAndWait(to, duration));
}
///
/// Glitch 噪波过渡(指定起止值),等待完成后再继续下一步。
///
[YarnCommand("glitch_transition")]
public static IEnumerator GlitchTransition(float from, float to, float duration)
{
if (ExpressionManager == null)
{
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
yield break;
}
yield return ExpressionManager.StartCoroutine(ExpressionManager.TransitionGlitchAndWait(from, to, duration));
}
}
}