This commit is contained in:
2025-11-05 23:59:55 +08:00
parent 80b26ade3b
commit b10e641105
28 changed files with 1089 additions and 1263 deletions
@@ -2,7 +2,6 @@ using System;
using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
using UnityEngine.Events;
using Yarn.Unity;
namespace AibisDream
@@ -12,12 +11,9 @@ namespace AibisDream
private DialogueRunner _dialogueRunner;
private LocalisedLineProvider _lineProvider;
# region controller状态标识
[SerializeField] private LineAdvanceInput lineAdvanceInput;
public bool quickRunMode;
public bool autoRunMode;
# endregion
public AdvanceMode advanceMode;
private void Start()
{
@@ -34,6 +30,28 @@ namespace AibisDream
});
}
private void OnEnable()
{
EnumEventSystem.Global.Register(GameLoopEnum.GameStart, ResetAdvanceMode);
}
private void OnDisable()
{
EnumEventSystem.Global.UnRegister(GameLoopEnum.GameStart, ResetAdvanceMode);
}
private void ResetAdvanceMode()
{
advanceMode = new AdvanceMode
{
isAuto = false,
isQuick = false
};
Time.timeScale = 1f;
lineAdvanceInput.ResetAdvanceMode();
}
#region Yarn控制
/// <summary>
@@ -46,13 +64,12 @@ namespace AibisDream
_lineProvider.InitStringTable(yarnProject.name);
_dialogueRunner.StartDialogue("Start");
}
public void StopDialog()
{
_dialogueRunner.Stop();
StorageSystem.Instance.Clear();
DialogCanvasManager.Instance.HideDialog();
DialogCanvasManager.Instance.SwitchDialogView(DialogViewType.StandardBubble);
DialogUIManager.Instance.HideDialog();
}
public void LoadDialog(YarnProject yarnProject)
@@ -70,13 +87,13 @@ namespace AibisDream
Debug.LogWarning($"对话正在运行中,无法启动新节点: {nodeName}");
return;
}
if (CheckIfNodeExistInCurrentYarnProject(nodeName))
{
_dialogueRunner.StartDialogue(nodeName);
}
}
private bool CheckIfNodeExistInCurrentYarnProject(string nodeName)
{
YarnProject currentProject = _dialogueRunner.yarnProject;
@@ -93,16 +110,56 @@ namespace AibisDream
}
#endregion
/// <summary>
/// 跳到下一句
/// </summary>
public void JumpLine()
#region
public void SwitchAutoMode()
{
if (!DialogCanvasManager.Instance.TrySkipLine())
advanceMode.isAuto = !advanceMode.isAuto;
lineAdvanceInput.SwitchAdvanceHandler(advanceMode.CurrentMode);
}
public void SwitchQuickMode()
{
advanceMode.isQuick = !advanceMode.isQuick;
lineAdvanceInput.SwitchAdvanceHandler(advanceMode.CurrentMode);
Time.timeScale = advanceMode.CurrentMode == AdvanceModeEnum.Quick ? 8f : 1f;
}
#endregion
}
public struct AdvanceMode
{
public bool isAuto;
public bool isQuick;
public AdvanceModeEnum CurrentMode
{
get
{
DialogCanvasManager.Instance.NextStep();
if (isAuto)
{
return AdvanceModeEnum.Auto;
}
else if (isQuick)
{
return AdvanceModeEnum.Quick;
}
else
{
return AdvanceModeEnum.Default;
}
}
}
}
public enum AdvanceModeEnum
{
Default,
Auto,
Quick
}
}