Beispiel #1
0
 public NovelExpression(ref List <FrameFragment> fragments, NovelCharacter character)
 {
     this.character = character.name;
     token          = Tokens.expression;
     payload        = fragments[0].payload;
     fragments.Remove(fragments[0]);
 }
Beispiel #2
0
    public NovelText(ref List <FrameFragment> fragments)
    {
        token = Tokens.TEXT;
        fragments.Remove(fragments[0]);

        NovelCharacter novelCharacter = new NovelCharacter(ref fragments);

        string line = string.Empty;

        foreach (NovelFrame frame in novelCharacter.ownedFrames)
        {
            line += frame.payload;
        }

        this.character = novelCharacter.name;
        this.line      = line;
    }
Beispiel #3
0
    public NovelLine(ref List <FrameFragment> lines, NovelCharacter character)
    {
        this.character = character.name;
        token          = Tokens.line;

        List <FrameFragment> selected = new List <FrameFragment>();
        List <FrameFragment> post     = new List <FrameFragment>();
        bool   terminator             = false;
        string payload = lines[0].payload;

        lines.Remove(lines[0]);

        foreach (FrameFragment fragment in lines)
        {
            if (fragment.token != Tokens.none)
            {
                terminator = true;
                post.Add(fragment);
            }
            else
            {
                if (terminator)
                {
                    post.Add(fragment);
                }
                else
                {
                    selected.Add(fragment);
                    if (payload != string.Empty)
                    {
                        payload += " ";
                    }
                    payload += fragment.payload;
                }
            }
        }

        this.payload = payload;
        lines        = post;
    }
Beispiel #4
0
    void Advance(bool doNotIncrement = false)
    {
        //Debug.Log("advance:"+doNotIncrement);
        lastToken = currentBranch.frames[currentFrame].token;
        if (!doNotIncrement)
        {
            currentFrame++;
        }

        if (currentFrame >= currentBranch.frames.Count)
        {
            running = false;
            characterGraphic.gameObject.SetActive(false);
            if (callBack != null)
            {
                callBack.Invoke();
            }
            return;
        }

        NovelFrame frame = currentBranch.frames[currentFrame];

        switch (frame.token)
        {
        case Tokens.background:
        {
            title.text        = string.Empty;
            message.text      = string.Empty;
            background.sprite = marshal.Background((string)frame.payload);
            StartTimer();
        } break;

        case Tokens.monologue:
        {
            title.text   = "monologue";
            message.text = (string)frame.payload;
            state        = RunnerStates.waitOnInput;
        } break;

        case Tokens.character:
        {
            NovelCharacter character = ((NovelCharacter)frame);
            if (character.name != "You" && character.name != "player")
            {
                characterGraphic.gameObject.SetActive(true);
                characterGraphic.sprite = marshal.Character(character.name, null);
                characterGraphic.rectTransform.sizeDelta = Scale(characterGraphic.sprite.rect.size.y, 1080,
                                                                 characterGraphic.sprite.rect.size);
            }
            title.text   = ((NovelCharacter)frame).name;
            message.text = string.Empty;
            state        = RunnerStates.waitOnTimer;
        } break;

        case Tokens.expression:
        {
            NovelExpression expression = ((NovelExpression)frame);
            if (expression.character != "You" && expression.character != "player")
            {
                characterGraphic.gameObject.SetActive(true);
                characterGraphic.sprite = marshal.Character(expression.character, (string)expression.payload);
                characterGraphic.rectTransform.sizeDelta = Scale(characterGraphic.sprite.rect.size.y, 1080,
                                                                 characterGraphic.sprite.rect.size);
            }

            title.text = ((NovelExpression)frame).character;
            StartTimer();
        } break;

        case Tokens.line:
        {
            if (lastToken == Tokens.character || lastToken == Tokens.expression || lastToken == Tokens.line)
            {                     /* Do Nothing */
            }
            else
            {
                title.text = ((NovelExpression)frame).character + " " + ((NovelExpression)frame).payload;
            }
            message.text = (string)frame.payload;
            state        = RunnerStates.waitOnInput;
        } break;

        case Tokens.hidecharacter:
        {
            characterGraphic.gameObject.SetActive(false);
            StartTimer();
        } break;

        case Tokens.directive:
        {
            marshal.ExecuteProcedure((string)frame.payload);
            state = RunnerStates.waitOnTimer;
            StartTimer();
        } break;

        case Tokens.jump:
        {
            StartTimer();
            Jump((string)frame.payload);
        } break;

        case Tokens.TEXT:
        {
            NovelText text = (NovelText)frame;
            state = RunnerStates.waitOnInput;
            phone.PostTextMessage(text.character == "You", text.character, text.line);
        } break;

        case Tokens.options:
        {
            novelAssembly.SetActive(true);
            state = RunnerStates.waitOnChoice;
            NovelOptions options = (NovelOptions)frame;

            normalDisplay.SetActive(false);
            optionDisplay.SetActive(true);

            Transform[] old = optionContent.GetComponentsInChildren <Transform>();
            Debug.Log(old.Length);

            foreach (Transform go in old)
            {
                if (go == optionContent.transform)
                {
                    continue;
                }
                go.transform.parent = null;
                GameObject.Destroy(go.gameObject);
            }

            foreach (NovelOption option in options.options)
            {
                GameObject g = GameObject.Instantiate(providedButton, optionContent.transform.position,
                                                      optionContent.transform.rotation, optionContent.transform);
                g.GetComponentInChildren <Text>().text = (string)option.payload;
                g.GetComponent <Button>().onClick.AddListener(
                    () => { Jump(option.target); EndOptions(); }                              /// CLOSURE! to the rescue!!
                    );
            }
        } break;

        default:
        {
            throw new System.Exception("Unexpected token " + frame.token + " in switch statement.");
        }
        }
    }