1
0
forked from cgvr/DeltaVR

cafe waiter NPC goes and brings food after dialogue

This commit is contained in:
2026-01-29 18:12:39 +02:00
parent ceee57f808
commit e9df211610
8 changed files with 70 additions and 33 deletions

View File

@@ -166,7 +166,7 @@ MonoBehaviour:
m_FallbackScreenDPI: 96 m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96 m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1 m_DynamicPixelsPerUnit: 1
m_PresetInfoIsWorld: 0 m_PresetInfoIsWorld: 1
--- !u!114 &6105090838799004608 --- !u!114 &6105090838799004608
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -204,9 +204,12 @@ MonoBehaviour:
- Chef/Ulrich_Get_Correctly - Chef/Ulrich_Get_Correctly
- Chef/Ulrich_Excellent - Chef/Ulrich_Excellent
- Chef/Ulrich_Terribly_Sorry_1 - Chef/Ulrich_Terribly_Sorry_1
notepadText: {fileID: 0} - Chef/Ulrich_Enjoy
notepadTransform: {fileID: 0}
fmodWhisperBridge: {fileID: 0} fmodWhisperBridge: {fileID: 0}
notepadText: {fileID: 0}
notepad: {fileID: 0}
backRoom: {fileID: 0}
backRoomMovingTime: 5
--- !u!114 &7699707098595015193 --- !u!114 &7699707098595015193
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@@ -4,17 +4,23 @@ using UnityEngine;
public class CafeWaiterNPC : NPCController public class CafeWaiterNPC : NPCController
{ {
public TextMeshProUGUI notepadText;
public Transform notepadTransform;
public FMODWhisperBridge fmodWhisperBridge; public FMODWhisperBridge fmodWhisperBridge;
public TextMeshProUGUI notepadText;
public GameObject notepad;
public Transform backRoom;
public float backRoomMovingTime = 5f;
private Vector3 notepadOriginalRotation; private Vector3 notepadOriginalRotation;
private Vector3 notepadFlippedRotation; private Vector3 notepadFlippedRotation;
private Vector3 startingPosition;
// states: // states:
// 0 - waiting for player order // 0 - idle
// 1 - waiting for player to answer "is this correct?" // 1 - waiting for player order
// 2 - bringing food // 2 - waiting for player to answer "is this correct?"
// 3 - bringing food
// 4 - waiting for player to go away
private int state; private int state;
private float lastPlayerVoiceUpdateTime; private float lastPlayerVoiceUpdateTime;
@@ -22,29 +28,40 @@ public class CafeWaiterNPC : NPCController
{ {
state = 0; state = 0;
lastPlayerVoiceUpdateTime = Time.time; lastPlayerVoiceUpdateTime = Time.time;
startingPosition = transform.position;
} }
private void Start() private void Start()
{ {
notepadOriginalRotation = notepadTransform.localRotation.eulerAngles; notepadOriginalRotation = notepad.transform.localRotation.eulerAngles;
notepadFlippedRotation = notepadOriginalRotation + new Vector3(0, 180, 0); notepadFlippedRotation = notepadOriginalRotation + new Vector3(0, 180, 0);
} }
protected override void OnPlayerApproach() protected override void OnPlayerApproach()
{ {
AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject); if (state == 0)
{
AudioManager.Instance.PlayDialogue(voiceLineKeys[0], gameObject);
fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate; fmodWhisperBridge.OnWhisperSegmentUpdated += OnPlayerSpeechUpdate;
fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished; fmodWhisperBridge.OnWhisperSegmentFinished += OnPlayerSpeechFinished;
fmodWhisperBridge.ActivateRecording(); fmodWhisperBridge.ActivateRecording();
state = 1;
}
} }
protected override void OnPlayerLeave() protected override void OnPlayerLeave()
{ {
//AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject);
fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate; fmodWhisperBridge.OnWhisperSegmentUpdated -= OnPlayerSpeechUpdate;
fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished; fmodWhisperBridge.OnWhisperSegmentFinished -= OnPlayerSpeechFinished;
fmodWhisperBridge.DeactivateRecording(); fmodWhisperBridge.DeactivateRecording();
// If currently not bringing food and the player leaves, then go back to idle state
if (state != 3)
{
state = 0;
}
} }
private void OnPlayerSpeechFinished(string playerText) private void OnPlayerSpeechFinished(string playerText)
@@ -62,26 +79,27 @@ public class CafeWaiterNPC : NPCController
lastPlayerVoiceUpdateTime = Time.time; lastPlayerVoiceUpdateTime = Time.time;
Debug.Log("state = " + state.ToString() + ", voiceline: player text: " + playerText); Debug.Log("state = " + state.ToString() + ", voiceline: player text: " + playerText);
if (state == 0) if (state == 1)
{ {
// Show transcription and ask whether it is correct // Show transcription and ask whether it is correct
notepadText.text = playerText; notepadText.text = playerText;
notepadTransform.DOLocalRotate(notepadFlippedRotation, 0.5f); notepad.transform.DOLocalRotate(notepadFlippedRotation, 0.5f);
AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject); AudioManager.Instance.PlayDialogue(voiceLineKeys[1], gameObject);
state = 1; state = 2;
} else if (state == 1) } else if (state == 2)
{ {
// Flip notepad back // Flip notepad back
notepadTransform.DOLocalRotate(notepadOriginalRotation, 0.5f); notepad.transform.DOLocalRotate(notepadOriginalRotation, 0.5f);
// if player answered positively, bring food, otherwise ask again // if player answered positively, bring food, otherwise ask again
if (playerText.ToLower().Contains("yes")) if (playerText.ToLower().Contains("yes"))
{ {
AudioManager.Instance.PlayDialogue(voiceLineKeys[2], gameObject); AudioManager.Instance.PlayDialogue(voiceLineKeys[2], gameObject);
state = 2; BringFood();
state = 3;
} else } else
{ {
AudioManager.Instance.PlayDialogue(voiceLineKeys[3], gameObject); AudioManager.Instance.PlayDialogue(voiceLineKeys[3], gameObject);
state = 0; state = 1;
} }
} }
} }
@@ -94,4 +112,20 @@ public class CafeWaiterNPC : NPCController
} }
notepadText.text = playerText; notepadText.text = playerText;
} }
private void BringFood()
{
notepad.SetActive(false);
transform.DOMove(backRoom.position, backRoomMovingTime).OnComplete(() =>
{
// Come back
transform.DOMove(startingPosition, backRoomMovingTime).OnComplete(() =>
{
notepad.SetActive(true);
AudioManager.Instance.PlayDialogue(voiceLineKeys[4], gameObject);
state = 4;
});
});
}
} }