166 lines
6.5 KiB
C#
166 lines
6.5 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using AibisDream.FixSystem;
|
||
using AibisDream;
|
||
using Yarn.Unity;
|
||
|
||
namespace AibisDream.MiniGame.Language
|
||
{
|
||
/// <summary>
|
||
/// 表达系统的 Yarn 命令接口(原语言系统)
|
||
/// </summary>
|
||
public static class LanguageYarnCommand
|
||
{
|
||
private static AibisDream.ExpressionManager ExpressionManager => FixSystemCenter.SystemDic.Get<AibisDream.ExpressionManager>();
|
||
|
||
/// <summary>
|
||
/// 启动表达粒子系统(在打开视图后调用),等待火山表达panel播完再返回
|
||
/// <<start_expression "哈哈|嘿嘿|呵呵" "我很害怕" "ExpressionCompleted">>
|
||
/// </summary>
|
||
/// <param name="anxietyPhrasesStr">干扰短句(笑话等),用 | 分隔,用于非目标粒子字符池,如:"哈哈|嘿嘿|呵呵"</param>
|
||
/// <param name="targetSentence">目标句子</param>
|
||
/// <param name="completionNode">完成时触发的对话节点(可选)</param>
|
||
[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();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 关闭表达系统
|
||
/// <<close_expression>>
|
||
/// </summary>
|
||
[YarnCommand("close_expression")]
|
||
public static void CloseExpression()
|
||
{
|
||
if (ExpressionManager == null)
|
||
{
|
||
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
|
||
return;
|
||
}
|
||
|
||
ExpressionManager.CloseView();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置表达系统(使用当前配置)
|
||
/// <<reset_expression>>
|
||
/// 或
|
||
/// <<reset_expression false>> // 不播放入场动画
|
||
/// </summary>
|
||
/// <param name="playEntranceEffect">是否播放入场效果</param>
|
||
[YarnCommand("reset_expression")]
|
||
public static void ResetExpression(bool playEntranceEffect = true)
|
||
{
|
||
if (ExpressionManager == null)
|
||
{
|
||
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
|
||
return;
|
||
}
|
||
|
||
ExpressionManager.ResetSystem(playEntranceEffect);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 触发聚焦稳定化(从文字飘动保持态 → 概率递增 → 文字锁定 → 排列),等待全流程完成后返回
|
||
/// <<resolve_expression_focus>>
|
||
/// </summary>
|
||
[YarnCommand("resolve_expression_focus")]
|
||
public static IEnumerator ResolveExpressionFocus()
|
||
{
|
||
if (ExpressionManager == null)
|
||
{
|
||
UnityEngine.Debug.LogError("ExpressionManager 未找到!");
|
||
yield break;
|
||
}
|
||
yield return ExpressionManager.StartCoroutine(ExpressionManager.ResolveFocusAndWait());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 淡入 ExpressionManager 的 Sprite 图片
|
||
/// <<expression_sprite_fade_in>>
|
||
/// <<expression_sprite_fade_in 1.5>>
|
||
/// </summary>
|
||
/// <param name="duration">淡入时长(秒),默认 1</param>
|
||
[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));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 淡出 ExpressionManager 的 Sprite 图片
|
||
/// <<expression_sprite_fade_out>>
|
||
/// <<expression_sprite_fade_out 1.5>>
|
||
/// </summary>
|
||
/// <param name="duration">淡出时长(秒),默认 1</param>
|
||
[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));
|
||
}
|
||
|
||
/// <summary>
|
||
/// Glitch 噪波过渡,等待完成后再继续下一步。
|
||
/// <<glitch_transition 0.95 2>> -- 从 0 到 0.95,2 秒
|
||
/// <<glitch_transition 0.95>> -- 立即到 0.95(duration 默认 0)
|
||
/// <<glitch_transition 0.3 0.45 1>> -- 从 0.3 到 0.45,1 秒
|
||
/// </summary>
|
||
[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));
|
||
}
|
||
|
||
/// <summary>
|
||
/// Glitch 噪波过渡(指定起止值),等待完成后再继续下一步。
|
||
/// </summary>
|
||
[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));
|
||
}
|
||
}
|
||
}
|
||
|