예제 #1
0
        IEnumerator TryBreakRoadblockRoutine(InteractionUser user)
        {
            SceneLoader.Instance.currentSceneController.SetBusy();
            // HACK this feels dirty
            bool wait = true;

            UnityEngine.Events.UnityAction continueAction = () => wait = false;
            System.Func <bool>             waitP          = () => { return(wait); };

            dialogue.SetTitle("Roadblock");
            dialogue.ClearButtons();
            dialogue.AddButton("Next", continueAction);
            dialogue.SetPortrait(roadblockImage);
            dialogue.ShowBox();
            dialogue.SetDialogue("A pile of objects blocks your path out of the town");
            yield return(new WaitWhile(waitP));

            wait = true;
            // HACK for testing
            if (forceAllow)
            {
                dialogue.SetDialogue("Your party breaks down the roadblock");
                yield return(new WaitWhile(waitP));

                trigger.enabled = false;
                EndDialogue(user);
                yield return(RoadblockFallRoutine());
            }
            else
            if (!(SceneLoader.Instance.CheckBool("06 Barracks_Interior", "knight_battle")))
            {
                dialogue.SetDialogue("You need a strong knight to move these objects!");
                yield return(new WaitWhile(waitP));

                EndDialogue(user);
            }
            else if (!(SceneLoader.Instance.CheckBool("04 Town", "rogue_battle")))
            {
                dialogue.SetDialogue("You need an expert in breaking and entering for this job.");
                yield return(new WaitWhile(waitP));

                EndDialogue(user);
            }
            else if (!(SceneLoader.Instance.CheckBool("05 Tavern_Interior", "bard_battle")))
            {
                dialogue.SetDialogue("You can't work without musical accompaniment!");
                yield return(new WaitWhile(waitP));

                EndDialogue(user);
            }
            else
            {
                dialogue.SetDialogue("Your party breaks down the roadblock");
                yield return(new WaitWhile(waitP));

                trigger.enabled = false;
                EndDialogue(user);
                yield return(RoadblockFallRoutine());
            }
        }
예제 #2
0
        IEnumerator OpenChestRoutine(InteractionUser user)
        {
            // Suspend interactions
            SceneLoader.Instance.currentSceneController.SetBusy();

            // TODO factor out dialogue stuff to some other class

            // HACK this feels dirty
            bool wait = true;

            UnityEngine.Events.UnityAction continueAction = () => wait = false;
            System.Func <bool>             waitP          = () => { return(wait); };

            dialogue.SetTitle("Treasure Chest");
            dialogue.ClearButtons();
            dialogue.AddButton("Next", continueAction);
            dialogue.SetPortrait(treasureImage);
            dialogue.ShowBox();
            if (contents.Count > 0)
            {
                internalGlow.Play();
                animator.SetTrigger("Opening");
                dialogue.SetDialogue("It was full of treasure!");
                yield return(new WaitWhile(waitP));

                wait = true;
                dialogue.SetDialogue("You found:\n" + ContentsText());
                dialogue.ClearButtons();
                dialogue.AddButton("Exit", continueAction);
                dialogue.RebuildLayout();

                // Add items to inventory
                foreach (RPGItems.Item item in contents)
                {
                    GameController.Instance.inventory.Add(Instantiate(item));
                }
                EmptyChest();
                trigger.Triggered = true;
                trigger.Save();

                yield return(new WaitWhile(waitP));
            }
            else
            {
                dialogue.SetDialogue("The chest was empty");
                dialogue.ClearButtons();
                dialogue.AddButton("Exit", continueAction);
                dialogue.RebuildLayout();
                yield return(new WaitWhile(waitP));
            }
            dialogue.ClearButtons();
            dialogue.HideBox();

            SceneLoader.Instance.currentSceneController.ClearBusy();
        }