예제 #1
0
        public static void Main(string[] args)
        {
            // Load story file
            string     storyJson = File.ReadAllText("Stories/musgraveritual.json");
            StoryModel model     = StoryModel.Create(storyJson);

            // Load story into player
            StoryPlayer player = new StoryPlayer(model, new Inklewriter.MarkupConverters.ConsoleMarkupConverter());

            // Display header
            Console.Clear();
            Console.WriteLine();
            Console.WriteLine(player.Title);
            Console.WriteLine("by " + player.Author);

            // Main loop
            Stitch lastStitch = player.InitialStitch;

            while (lastStitch != null)
            {
                Console.WriteLine();
                DrawHorizontalLine();
                Console.WriteLine();

                var nextChunk = player.CreateChunkForStitch(lastStitch);
                lastStitch = DisplayChunk(nextChunk);
            }
        }
예제 #2
0
        public void ReplaceStyleMarkup()
        {
            StoryPlayer player = new StoryPlayer(null, new HtmlConverter());

            Assert.AreEqual("This is <b>bold</b> text.", player.ReplaceStyleMarkup("This is *-bold-* text."));
            Assert.AreEqual("This is <i>italic</i> text.", player.ReplaceStyleMarkup("This is /=italic=/ text."));
        }
예제 #3
0
        public async Task Play(IStory <IMessageActivity> story, ChannelAccount from, IServiceCollection services)
        {
            var provider = services.BuildServiceProvider();
            var player   = new StoryPlayer(provider);

            await player.Play(story);
        }
예제 #4
0
        public void ReplaceQuotes()
        {
            StoryPlayer player = new StoryPlayer(null, new HtmlConverter());

            Assert.AreEqual("This is “quoted” text.", player.ReplaceQuotes("This is \"quoted\" text."));
            Assert.AreEqual("It’s an apostrophe.", player.ReplaceQuotes("It's an apostrophe."));
        }
예제 #5
0
        public void ReplaceImageMarkup()
        {
            StoryPlayer player = new StoryPlayer(null, new HtmlConverter());
            var         result = player.ReplaceImageMarkup(@"%|%|%image.jpg$|$|$");

            Assert.AreEqual(@"<div id=""illustration""><img class=""pic"" src=""image.jpg""/></div>", result);
        }
예제 #6
0
        public void ShuffleRandomElements()
        {
            StoryPlayer   player       = new StoryPlayer(null, new HtmlConverter());
            List <string> validResults = new List <string> {
                "Random red color.", "Random blue color.", "Random green color."
            };
            string result = player.ShuffleRandomElements("Random {~red|green|blue} color.");

            Assert.IsTrue(validResults.Contains(result));
        }
예제 #7
0
        public void CalculateApproximateWordCount()
        {
            Stitch a         = new Stitch("The quick brown fox");
            Stitch b         = new Stitch("jumped over the lazy dog.");
            int    wordCount = StoryPlayer.CalculateApproximateWordCount(new List <Stitch> {
                a, b
            });

            // Word count is rounded to the nearest 10 when under 100 words, otherwise rounded to 100
            Assert.AreEqual(10, wordCount);
        }
예제 #8
0
        public void ParseInLineConditionals()
        {
            string input = "Moving { speed > 5 :    quickly    |    slowly    }.";
//			string slowResult = StoryPlayer.ParseInLineConditionals (input, new List<FlagValue> { new FlagValue ("speed", 1) });
            string quickResult = StoryPlayer.ReplaceInLineConditionals(input, new List <FlagValue> {
                new FlagValue("speed", 8)
            });

//			Assert.AreEqual ("Moving slowly.", slowResult);
            Assert.AreEqual("Moving quickly.", quickResult);
        }
예제 #9
0
        public void ConvertNumbersToWords()
        {
            StoryPlayer      player = new StoryPlayer(null, new HtmlConverter());
            List <FlagValue> flags  = new List <FlagValue> {
                new FlagValue("a", 5),
                new FlagValue("b", 10),
            };

            Assert.AreEqual("The number five.", player.ConvertNumbersToWords("The number [value:a].", flags));
            Assert.AreEqual("The number 5.", player.ConvertNumbersToWords("The number [number:a].", flags));
        }
예제 #10
0
 IEnumerator OnPassageUpdatedCoroutine(Passage passage)
 {
     while (!storyPanel.EndTyping)
     {
         yield return(null);
     }
     storyPanel.EndTyping = false;
     if (passage.isEnd) //해당 페이지가 끝인 경우
     {
         GameObject button = Instantiate(ButtonPrefab, ButtonHolder.transform);
         buttonList.Add(button);
         button.transform.GetComponentInChildren <Text>().text = "[엔딩]";
         button.GetComponent <Button>().onClick.AddListener(() =>
         {
             while (buttonList.Count != 0)
             {
                 Destroy(buttonList.ElementAt(0));
                 buttonList.RemoveAt(0);
             }
             resultPanel.SetActive(true);
         });
     }
     else //페이지가 끝이 아닐 경우
     {
         for (int i = 0; i < passage.links.Count; i++)
         {
             Link       link   = passage.links[i];
             GameObject button = Instantiate(ButtonPrefab, ButtonHolder.transform);
             buttonList.Add(button);
             button.transform.GetComponentInChildren <Text>().text = link.name;
             button.GetComponent <Button>().onClick.AddListener(() =>
             {
                 StoryPlayer.SelectLink(link);
                 while (buttonList.Count != 0)
                 {
                     Destroy(buttonList.ElementAt(0));
                     buttonList.RemoveAt(0);
                 }
                 storyPanel.OnPassageUpdated();
                 var temp = OnPassageUpdatedCoroutine(StoryPlayer.CurrentPassage);
                 StartCoroutine(temp);
                 Debug.Log($"Selected: {link.name}");
             });
         }
     }
 }
예제 #11
0
        void Start()
        {
            var resource = Resources.Load(storyName) as TextAsset;

            if (!resource)
            {
                Debug.LogWarning("Inklewriter story could not be loaded: " + storyName);
                return;
            }

            string     storyJson = resource.text;
            StoryModel model     = StoryModel.Create(storyJson);

            this.player = new StoryPlayer(model, new UnityMarkupConverter());

            var firstChunk = player.CreateFirstChunk();

            InstantiateChunk(firstChunk);
        }
예제 #12
0
 public void OnClickStoryButton(Story story)
 {
     StoryPlayer.SetStory(story);
     SceneManager.LoadScene("GameScene");
 }
예제 #13
0
 private void Start()
 {
     script = player.GetComponent <StoryPlayer>();
 }
예제 #14
0
    // Use this for initialization
    void Awake()
    {
        if (instance == null)
            instance = this;
        else if (instance != this)
            Destroy(gameObject);

        DontDestroyOnLoad(gameObject);
        scene = GetComponent<StorySceneManager>();
        player = (StoryPlayer)FindObjectOfType(typeof(StoryPlayer));
        InitCharacterDic();

        fader = GameObject.Find("Navigator").GetComponent<Fading>();

        PNJTable = new List<string>();
        ObjectsTable = new List<string>();
        PNJTable.Add("Pixie");
        PNJTable.Add("Gaby");
        //PNJTable.Add("Philibert");
        //PNJTable.Add("Camille");
        //PNJTable.Add("Victor");
        //PNJTable.Add("Olivier-happy");

        //ObjectsTable.Add("Lunettes");
        //ObjectsTable.Add("Seve");
        //ObjectsTable.Add("Secret");
        InitGame();
    }
예제 #15
0
        public void ReplaceRunOnMarker()
        {
            StoryPlayer player = new StoryPlayer(null, new HtmlConverter());

            Assert.AreEqual("Run on ", player.RemoveRunOnMarker("Run on[...]"));
        }
예제 #16
0
        public void ReplaceUrlMarkup()
        {
            StoryPlayer player = new StoryPlayer(null, new HtmlConverter());

            Assert.AreEqual("<a href=\"http://inklestudios.com\">Inkle</a>", player.ReplaceUrlMarkup("[http://inklestudios.com|Inkle]"));
        }
예제 #17
0
 // Start is called before the first frame update
 void Start()
 {
     playerScript = player.GetComponent <StoryPlayer>();
     rb           = GetComponent <Rigidbody2D>();
     rb.velocity  = new Vector2(playerScript.movingSpeed, 0);
 }
예제 #18
0
 void OnClickOkButton()
 {
     StoryPlayer.SetStory(story);
     SceneManager.LoadScene("GameScene");
 }