타이핑 연출
This commit is contained in:
@@ -288,9 +288,9 @@ private void CaptureInitialAnimState(Animator anim)
|
||||
// 반환: true = 대기 도중 히든 제스처가 발동됨(→ HiddenBranch로 분기), false = 평범하게 진행
|
||||
private async Awaitable<bool> PlayNode(DialogNode node)
|
||||
{
|
||||
// DialogHud에 대사 표시 (이름은 노드 오버라이드 우선)
|
||||
// DialogHud에 대사 표시 (이름은 노드 오버라이드 우선, 타이핑 연출도 노드 지정이 우선)
|
||||
if (DialogHud.Instance != null)
|
||||
DialogHud.Instance.Show(node.Speaker, node.TalkText, node.SpeakerNameOverride);
|
||||
DialogHud.Instance.Show(node.Speaker, node.TalkText, node.SpeakerNameOverride, node.Typewriter);
|
||||
|
||||
// 호감도 증감 — 화자 기준, 화자가 비어 있으면 대화 주인 NPC
|
||||
if (node.Affection != 0)
|
||||
@@ -467,7 +467,12 @@ private async Awaitable<bool> WaitAdvanceOrDivert()
|
||||
while (true)
|
||||
{
|
||||
if (HiddenBranchResolver.Fired) return true; // 히든 발동 → 히든 분기
|
||||
if (advance) return false; // 진행 입력 → 평범하게 진행
|
||||
if (advance)
|
||||
{
|
||||
advance = false;
|
||||
// 타이핑 중이었으면 이 입력은 "전체 표시"에 쓰고 계속 기다린다
|
||||
if (!TrySkipReveal()) return false; // 이미 다 나옴 → 평범하게 진행
|
||||
}
|
||||
if (timeLeft >= 0f)
|
||||
{
|
||||
timeLeft -= Time.deltaTime;
|
||||
@@ -486,7 +491,17 @@ private async Awaitable<bool> WaitAdvanceOrDivert()
|
||||
}
|
||||
}
|
||||
|
||||
// 대화 진행 입력(OnDialogNext) 한 번을 대기
|
||||
// 대사가 아직 드러나는 중이면 전체 표시로 건너뛰고 true.
|
||||
// 이미 다 나와 있으면 false — 그 입력은 다음 노드로 넘어가는 데 쓰인다.
|
||||
private static bool TrySkipReveal()
|
||||
{
|
||||
var hud = DialogHud.Instance;
|
||||
if (hud == null || !hud.IsRevealing) return false;
|
||||
hud.SkipReveal();
|
||||
return true;
|
||||
}
|
||||
|
||||
// 대화 진행 입력(OnDialogNext) 한 번을 대기 (타이핑 중이면 첫 입력은 전체 표시에 쓰인다)
|
||||
private async Awaitable WaitForAdvanceInput()
|
||||
{
|
||||
var im = InputManager.Instance;
|
||||
@@ -502,8 +517,16 @@ private async Awaitable WaitForAdvanceInput()
|
||||
im.OnDialogNext_Event += Handler;
|
||||
try
|
||||
{
|
||||
while (!pressed)
|
||||
while (true)
|
||||
{
|
||||
if (pressed)
|
||||
{
|
||||
pressed = false;
|
||||
// 타이핑 중이었으면 이 입력은 "전체 표시"에 쓰고 계속 기다린다
|
||||
if (!TrySkipReveal()) break; // 이미 다 나옴 → 다음 노드로
|
||||
}
|
||||
await Awaitable.NextFrameAsync(destroyCancellationToken);
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user