예제 #1
0
    public static void HandleEvent(string _event, ChaperLineManager.LINE.SEGMENT segment)
    {
        if (_event.Contains("("))
        {
            List <Tuple <string, string> > actions = ChaperLineManager.GetActions(_event);

            foreach (Tuple <string, string> action in actions)
            {
                CommandHandler.HandleCommand(action.Item1, action.Item2);
            }
        }

        string[] eventData = _event.Split(new char[1] {
            ' '
        }, 2);

        string[] parameters = eventData.Length > 1 ? eventData[1].Split(',') : null;

        switch (eventData[0])
        {
        case "txtSpd":
            EVENT_TxtSpd(parameters, segment);
            break;

        case "/txtSpd":
            segment.architect.speed = 1;
            segment.architect.charactersPerFrame = 1;
            break;
        }
    }
예제 #2
0
    static void EVENT_TxtSpd(string[] parameters, ChaperLineManager.LINE.SEGMENT segment)
    {
        float delay = float.Parse(parameters[0].Trim());
        int   charactersPerFrame = int.Parse(parameters[1].Trim());

        segment.architect.speed = delay;
        segment.architect.charactersPerFrame = charactersPerFrame;
    }
예제 #3
0
    public IEnumerator HandleLine(string rawLine)
    {
        ChaperLineManager.LINE line = ChaperLineManager.Interpret(rawLine);

        dialogueController._next = false;
        int lineProgress = 0;

        while (lineProgress < line.segments.Count)
        {
            dialogueController._next = false;
            ChaperLineManager.LINE.SEGMENT segment = line.segments[lineProgress];

            if (lineProgress != 0)
            {
                if (segment.trigger == ChaperLineManager.LINE.SEGMENT.TRIGGER.autoDelay)
                {
                    for (float timer = segment.autoDelay; timer >= 0; timer -= Time.deltaTime)
                    {
                        yield return(new WaitForEndOfFrame());

                        if (dialogueController._next)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    while (!dialogueController._next)
                    {
                        yield return(new WaitForEndOfFrame());
                    }
                }
            }
            dialogueController._next = false;

            //the segment now needs to build and run
            segment.Run();

            while (segment.isRunning)
            {
                yield return(new WaitForEndOfFrame());

                if (dialogueController._next)
                {
                    if (!segment.architect.skip)
                    {
                        segment.architect.skip = true;
                    }
                    else
                    {
                        segment.ForceFinish();
                    }

                    dialogueController._next = false;
                }
            }

            lineProgress++;
        }

        for (int i = 0; i < line.actions.Count; i++)
        {
            CommandHandler.HandleCommand(line.actions[i].Item1, line.actions[i].Item2);
        }

        //This is to give actions (particularly LoadScene) time to execute before saving their states
        yield return(new WaitForEndOfFrame());

        dialogueController.chapterProgress++;

        //Debug.Log("INCREMENT CHAPTER PROGRESS AT: " + 430);

        dialogueController.StopHandlingLine();
    }