void ProceedToNarrative(string narrativeDataGUID) { DialogueNodeData nodeData = currPatient.dialogue.DialogueNodeData.Find(x => x.NodeGUID == narrativeDataGUID); string text = nodeData.DialogueText; List <NodeLinkData> choices = currPatient.dialogue.NodeLinks.Where(x => x.BaseNodeGUID == narrativeDataGUID).ToList(); PatientData.PatientMoodData mood = currPatient.GetMoodData(nodeData.mood); if (mood.mood == PatientMood.ExitNotOK) { AudioManager.Instance.PlayMusic(loseAmbient, time: 0.5f); } else if (mood.mood == PatientMood.ExitOk) { AudioManager.Instance.MuteMusic(AudioManager.Instance.crossfadeTime); winAmbientAS = AudioManager.Instance.Play(winAmbient, 0.4f, 1.0f, AudioManager.Instance.crossfadeTime); LeanTween.delayedCall(winAmbient.length - AudioManager.Instance.crossfadeTime, AudioManager.Instance.ContinueMusicAfterMute); } dialogLog.AddToLog(DialogLogUI.LogEntryType.Patient, ProcessProperties(text), currPatient.name, mood.backColor, currPatient, mood, () => { AudioManager.Instance.Play(patientWriteSound, 0.5f); }, () => { AudioManager.Instance.Play(buttonAppear, buttonAppearVolume); foreach (var choice in choices) { string choiceText = ProcessProperties(choice.PortName); dialogSelect.AddButton(choiceText, () => { dialogSelect.Clear(); dialogLog.AddToLog(DialogLogUI.LogEntryType.Operator, choiceText, operatorName, minTimeToCallShow: 0.5f, onShowLog: () => { switch (mood.mood) { case PatientMood.ExitOk: case PatientMood.ExitNotOK: EndPatient(); break; case PatientMood.Normal: case PatientMood.Angry: default: ProceedToNarrative(choice.TargetNodeGUID); break; } }); }); } if (mood.mood == PatientMood.ExitOk || mood.mood == PatientMood.ExitNotOK) { EndPatient(); } }); }
public void AddToLog(LogEntryType type, string text, string name = "", Color backColor = default, PatientData patientData = null, PatientData.PatientMoodData moodData = default, Action beforeStartScroll = null, Action onShowLog = null, float minTimeToCallShow = 0.0f) { if (type == LogEntryType.Patient) { GameObject typingGO = Instantiate(patientTypingPrefab, layoutGroup.transform); patientTyping = typingGO.GetComponent <PatientTypingEntry>(); patientTyping.Init(patientData != null ? patientData.GetMoodData("normal").backColor : backColor); StartCoroutine(ScrollToBottom(null, 0.0f)); float delay = dotsAnimLenghtRange.GetRandomValueFloat(); LeanTween.delayedCall(delay, () => { beforeStartScroll?.Invoke(); Destroy(patientTyping.gameObject); AddToLogImmediatly(); }); } else { beforeStartScroll?.Invoke(); AddToLogImmediatly(); } void AddToLogImmediatly() { GameObject entryGO; Color c; switch (type) { case LogEntryType.Operator: entryGO = Instantiate(operatorLogPrefab, layoutGroup.transform); c = operatorColor; break; case LogEntryType.Servise: entryGO = Instantiate(serviceLogPrefab, layoutGroup.transform); c = serviceColor; break; case LogEntryType.Patient: default: entryGO = Instantiate(patientLogPrefab, layoutGroup.transform); c = backColor; break; } DialogLogEntry entry = entryGO.GetComponent <DialogLogEntry>(); if (patientData != null && patientData.skeletonDataAsset != null && moodData.animationSpine != null) { entry.Init(name, text, patientData.skeletonDataAsset, moodData.animationSpine, c); } else { entry.Init(name, text, moodData.avatar, c); } if (type != LogEntryType.Servise) { for (int i = 0; i < entries.Count; ++i) { entries[i].OnBecomeOld(); } } entries.Add(entry); contentSizeFitter.enabled = false; contentSizeFitter.SetLayoutVertical(); foreach (Transform child in entryGO.transform) { LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)child.transform); } LayoutRebuilder.ForceRebuildLayoutImmediate((RectTransform)entryGO.transform); contentSizeFitter.enabled = true; StartCoroutine(ScrollToBottom(onShowLog, minTimeToCallShow)); } }