private void GetDialogueLine(DialogueTextEvent textEvent)
        {
            int speakerID = textEvent.speakerID;
            CharacterProfile currentSpeaker = speakers[speakerID];

            CurrentSpeakerID               = speakerID;
            CurrentSpeakerName             = currentSpeaker.characterName;
            CurrentSpeakerText             = textEvent.line;
            TextLength                     = GetTextLength(CurrentSpeakerText);
            CurrentSpeakerFace             = currentSpeaker.face;
            CurrentSpeakerTone             = currentSpeaker.chatTone;
            audioSource.clip               = CurrentSpeakerTone;
            CharacterRevealSpeedMultiplier = textEvent.characterRevealSpeedMultiplier;

            float  delay  = textEvent.delay;
            Action action = () =>
            {
                RevealedCharacterCount = 0;
                OnLineRevealed?.Invoke();
                currentConversation.InvokeEvent(currentPosition);
            };

            if (delay > 0f)
            {
                IsWaitingOnDelayedText = true;
                action += () => IsWaitingOnDelayedText = false;
                OnStartDelayedText?.Invoke();
                DelayedTextEvent(textEvent.delay, action);
            }
            else
            {
                action?.Invoke();
            }
        }
예제 #2
0
        public void Load()
        {
            string convo = conversationFile.text;

            string[]            lines = convo.Split('\n');
            DialogueTextEvent[] previousConversation = conversation;
            int fileLineCount = LineCountFromFile;

            if (conversation == null || conversation.Length != fileLineCount)
            {
                conversation         = new DialogueTextEvent[fileLineCount];
                previousConversation = conversation;
            }

            int previousLength = previousConversation.Length;
            int lineCounter    = 0;

            for (int i = 0; lineCounter < fileLineCount; i++)
            {
                string[] line    = lines[i].Split('|');
                byte     speaker = (previousLength <= lineCounter || previousConversation[lineCounter] == null)
                                        ? (byte)0
                                        : previousConversation[lineCounter].speakerID;
                float delay = (previousLength <= lineCounter || previousConversation[lineCounter] == null)
                                        ? 0f
                                        : previousConversation[lineCounter].delay;
                float revealSpeed = (previousLength <= lineCounter || previousConversation[lineCounter] == null)
                                        ? 1f
                                        : previousConversation[lineCounter].characterRevealSpeedMultiplier;
                if (line.Length > 1 && byte.TryParse(line[0], out speaker))
                {
                    conversation[lineCounter]           = new DialogueTextEvent();
                    conversation[lineCounter].speakerID = speaker;
                    conversation[lineCounter].delay     = delay;
                    conversation[lineCounter].characterRevealSpeedMultiplier = revealSpeed;
                    conversation[lineCounter].line = line[1];
                    lineCounter++;
                }
                //check for comment
                else if (line.Length == 1 && line[0].Length > 0 && line[0][0] == '#')
                {
                }
                //check for invalid line
                else
                {
                    conversation[lineCounter]      = new DialogueTextEvent();
                    conversation[lineCounter].line = DialogueTextEvent.DEFAULT_LINE;
                    lineCounter++;
                }
            }
        }