把释放log的序列拆成两部分

This commit is contained in:
2026-03-13 13:02:40 +08:00
parent 9da6e74632
commit eea12c1728
7 changed files with 2133 additions and 2038 deletions
File diff suppressed because it is too large Load Diff
@@ -2942,7 +2942,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 14073792904200192
m_Localized: "me: \u91CA\u653Elog"
m_Localized: "me: \u5BFB\u627Elog"
m_Metadata:
m_Items: []
- m_Id: 14073793021640704
@@ -2950,7 +2950,7 @@ MonoBehaviour:
m_Metadata:
m_Items: []
- m_Id: 14128499794280448
m_Localized: "\u8FDB\u5165\u9500\u552E\u6A21\u5F0F"
m_Localized: "me: \u91CA\u653Elog"
m_Metadata:
m_Items: []
- m_Id: 14128499802669056
+17 -16
View File
@@ -106,23 +106,24 @@ colorID: 1
---
//每次进入维修界面就自动保存
<<fade_out 1>>
// <<switch_fix_system_to BodyModule Head>>
// <<switch_fix_system_to Expression>>
// me: 寻找log
// <<start_expression "哈哈|嘿嘿|呵呵" "我很害怕" "LOG1梳理完成">>
// <<wait 1>>
<<switch_fix_system_to BodyModule Head>>
<<switch_fix_system_to Expression>>
me: 寻找log
<<start_expression "哈哈|嘿嘿|呵呵" "我很害怕" "LOG1梳理完成">>
<<wait 1>>
me: 释放log
->进入销售模式
<<switch_fix_system_to Sales>>
->进入步进模式
<<enter_step_mode>>
<<spin_crank>>
<<switch_emotion_wave_config empty>>
<<show_emotion_wave 1>>
<<enter_processor_mode>>
me: 下一步
<<open_knob_lid>>
<<unlock_knob>>
// ->进入销售模式
// <<switch_fix_system_to Sales>>
// ->进入步进模式
// <<enter_step_mode>>
// <<spin_crank>>
// <<switch_emotion_wave_config empty>>
// <<show_emotion_wave 1>>
// <<enter_processor_mode>>
// me: 下一步
// <<open_knob_lid>>
// <<unlock_knob>>
// me: 下一步
// <<switch_emotion_wave_config "normal" 0>>
// me: 下一步
@@ -1,4 +1,4 @@
title: Stage6
tags: Stage 入口 释放RAM
colorID: 2
@@ -78,7 +78,9 @@ hs: 你现在不是路师了,你是*凶柿*了。*凶*柿你知道么。西红
me: 火山! #line:034a446
hs: 好啦好啦,我不闹了。 #line:0607264
hs: 我…就是个…笑话。 #line:0fbba7e
<<resolve_expression_focus>>
<<expression_sprite_fade_out 1>>
me: 你不是,火山。 #line:07ddaef2
<<wait 1>>
hs: 我明白我是。 #line:0e82896
@@ -156,7 +158,7 @@ hs: 不…要… #line:060b1e6
<<wait 1>>
hs: 我不行。 #line:0c42fcc
me: 说呀! #line:09d7762
hs: …… #line:0a5286d
hs: …… #line:0a5286d
hs: 我… #line:02a5070
hs: 我让它失望了!!! #line:03f5b98
<<expression_sprite_fade_out 1>>
@@ -121,6 +121,27 @@ namespace AibisDream
yield return particleManager.WaitUntilExpressionFlowReady();
}
/// <summary>
/// 从聚焦保持态触发稳定化(概率递增 → 文字锁定 → 排列)
/// </summary>
public void ResolveFocusSequence()
{
if (particleManager != null)
{
particleManager.ResolveFocusSequence();
}
}
/// <summary>
/// 触发聚焦稳定化并等待全流程完成
/// </summary>
public IEnumerator ResolveFocusAndWait()
{
if (particleManager == null) yield break;
particleManager.ResolveFocusSequence();
yield return particleManager.WaitUntilFocusFinished();
}
/// <summary>
/// 关闭表达系统
/// </summary>
@@ -26,6 +26,7 @@ namespace AibisDream.MiniGame.Language
{
None, // 未完成
Completed, // 已完成但尚未进入聚焦流程
FocusHolding, // 聚焦位置保持态(文字飘动/变换,等待外部命令触发下一步)
Focusing, // 正在聚焦放大并收敛
Finished // 全流程完成
}
@@ -674,7 +675,11 @@ namespace AibisDream.MiniGame.Language
}
}
if (completionPhase == CompletionPhase.Focusing)
if (completionPhase == CompletionPhase.FocusHolding)
{
UpdateFocusHolding();
}
else if (completionPhase == CompletionPhase.Focusing)
{
UpdateFocusSequence();
}
@@ -1026,8 +1031,7 @@ namespace AibisDream.MiniGame.Language
completedTweens++;
if (completedTweens >= tweenTargetCount)
{
focusTweensCompleted = true;
focusTimer = 0f;
EnterFocusHolding();
}
});
particle.transform.DOScale(Vector3.one * focusZoomScale, focusMoveDuration).SetEase(Ease.InOutQuad);
@@ -1042,8 +1046,7 @@ namespace AibisDream.MiniGame.Language
if (tweenTargetCount == 0)
{
focusTweensCompleted = true;
focusTimer = 0f;
EnterFocusHolding();
}
}
@@ -1097,6 +1100,31 @@ namespace AibisDream.MiniGame.Language
return visual;
}
private void EnterFocusHolding()
{
completionPhase = CompletionPhase.FocusHolding;
focusTimer = 0f;
if (!string.IsNullOrEmpty(completionDialogNode))
{
DialogController.Instance?.StartDialogNode(completionDialogNode);
}
}
private void UpdateFocusHolding()
{
focusTimer += Time.deltaTime;
foreach (var visual in focusVisuals.Values)
{
if (visual == null || visual.particle == null)
continue;
Vector3 shuffleOffset = CalculateShuffleOffset(visual, 0f, focusTimer);
visual.particle.transform.position = visual.focusPosition + shuffleOffset;
}
}
private void UpdateFocusSequence()
{
if (!focusTweensCompleted)
@@ -1152,6 +1180,30 @@ namespace AibisDream.MiniGame.Language
}
}
/// <summary>
/// 从 FocusHolding 进入稳定化阶段(概率递增、文字锁定、排列到最终位置)
/// </summary>
public void ResolveFocusSequence()
{
if (completionPhase != CompletionPhase.FocusHolding)
return;
completionPhase = CompletionPhase.Focusing;
focusTweensCompleted = true;
focusTimer = 0f;
}
/// <summary>
/// 等待聚焦流程全部完成(稳定化 → Finished)
/// </summary>
public IEnumerator WaitUntilFocusFinished()
{
while (completionPhase != CompletionPhase.Finished && completionPhase != CompletionPhase.None)
{
yield return null;
}
}
private void CompleteFocusSequence()
{
foreach (var visual in focusVisuals.Values)
@@ -1191,12 +1243,6 @@ namespace AibisDream.MiniGame.Language
FadeOutUIElement(focusSequenceButton.gameObject, focusFadeDuration);
}
FadeOutSpriteRenderer(releaseLogSpriteRenderer, focusFadeDuration);
// 触发完成对话节点
if (!string.IsNullOrEmpty(completionDialogNode))
{
DialogController.Instance?.StartDialogNode(completionDialogNode);
}
}
private Vector3 GetDynamicArrangementTarget(TargetFocusVisual visual, float arrangementProgress, float localTime)
@@ -1522,6 +1568,17 @@ namespace AibisDream.MiniGame.Language
BeginFocusSequence();
}
while (completionPhase == CompletionPhase.Focusing)
{
yield return null;
}
if (completionPhase == CompletionPhase.FocusHolding)
{
yield return new WaitForSeconds(1.5f);
ResolveFocusSequence();
}
while (completionPhase != CompletionPhase.Finished)
{
yield return null;
@@ -79,6 +79,21 @@ namespace AibisDream.MiniGame.Language
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>
/// 重新启动表达系统(会重置并使用新配置,相当于 close + open + start
/// <<restart_expression "我好怕|怎么办|不行" "我能做到" "ExpressionCompleted">>