IEnumerator DynamicStoryExample() { NovelController.instance.LoadChapterFile("story_1"); yield return(new WaitForEndOfFrame()); while (NovelController.instance.isHandlingChapterFile) { yield return(new WaitForEndOfFrame()); } ChoiceScreen.Show("What will you do?", "Go with Terrance", "Stay where you are"); while (ChoiceScreen.isWaitingForChoiceToBeMade) { yield return(new WaitForEndOfFrame()); } //you chose to go with Terrance if (ChoiceScreen.lastChoiceMade.index == 0) { NovelController.instance.LoadChapterFile("story_a1"); } //you chose to stay where you are else { NovelController.instance.LoadChapterFile("story_b1"); } yield return(new WaitForEndOfFrame()); NovelController.instance.Next(); while (NovelController.instance.isHandlingChapterFile) { yield return(new WaitForEndOfFrame()); } }
// Update is called once per frame void Update() { if (Input.GetKeyDown(KeyCode.Alpha1)) { ChoiceScreen.Show(title, "Dogs", "Cats"); } }
IEnumerator HandlingChoiceLine(string line) { string title = line.Split('"')[1]; List <string> choices = new List <string>(); List <string> actions = new List <string>(); bool gatheringChoices = true; while (gatheringChoices) { chapterProgress++; line = data[chapterProgress]; if (line == "{") { continue; } line = line.Replace("\t", "");//remove the tabs that have become quad spaces. if (line != "}") { choices.Add(line.Split('"')[1]); actions.Add(data[chapterProgress + 1].Replace("\t", "")); chapterProgress++; } else { gatheringChoices = false; } } //display choices if if (choices.Count > 0) { ChoiceScreen.Show(title, choices.ToArray()); yield return(new WaitForEndOfFrame()); while (ChoiceScreen.isWaitingForChoiceToBeMade) { yield return(new WaitForEndOfFrame()); } //choice is made string action = actions[ChoiceScreen.lastChoiceMade.index]; HandleLine(action); while (isHandlingLine) { yield return(new WaitForEndOfFrame()); } } else { Debug.LogError("Invalid choice operation. No choices were found."); } }
/// <summary> /// Handling choice command /// </summary> /// <param name="choice"></param> /// <returns></returns> IEnumerator HandlingChoiceLine(string line) { string title = line.Split('"')[1]; List <string> choices = new List <string>(); List <string> actions = new List <string>(); while (true) { chapterProgress++; line = data[chapterProgress]; if (line == "{") { continue; } line = line.Replace("\t", ""); if (line != "}") { choices.Add(line.Split('"')[1]); string act = data[chapterProgress + 1].Replace("\t", ""); print(act); actions.Add(act); chapterProgress++; } else { break; } } if (choices.Count > 0) { ChoiceScreen.Show(title, choices.ToArray()); yield return(new WaitForEndOfFrame()); while (ChoiceScreen.isWaitingChoiceToBeMade) { yield return(new WaitForEndOfFrame()); } // choice is made. execute the paired actions string action = actions[ChoiceScreen.lastChoiceMade.index]; handleLine(action); while (isHandlingLine) { yield return(new WaitForEndOfFrame()); } } else { Debug.LogError("invalid Choice operation"); } }
public IEnumerator HandleLine(string line) { string title = line.Split('"')[1]; List <string> choices = new List <string>(); Dictionary <string /*choice*/, List <string> > /*line / action list*/ actions = new Dictionary <string, List <string> >(); bool gatheringChoices = true; bool gatheringActions = false; int cProgress = dialogueController.chapterProgress; while (gatheringChoices || gatheringActions) { cProgress++; line = dialogueController.data[cProgress]; if (line == "{") { continue; } if (line == "}") { gatheringChoices = false; gatheringActions = false; continue; } line = line.Trim(); if (gatheringChoices) { if (line.ToLower().StartsWith("[")) { gatheringChoices = false; gatheringActions = true; continue; } choices.Add(line.Split('"')[1]); actions.Add(line.Split('"')[1], new List <string>()); } else { if (line.ToLower().StartsWith("]")) { gatheringChoices = true; gatheringActions = false; continue; } actions[choices.Last()].Add(line); } } if (choices.Count > 0) { ChoiceScreen.Show(title, choices.ToArray()); ///TODO: ///BLOCK OFF CHOICES THAT ARE NOT SELECTED if this is the past. yield return(new WaitForEndOfFrame()); Debug.Log("BEGIN WAITING FOR CHOICE"); while (ChoiceScreen.isWaitingForChoiceToBeMade) { yield return(new WaitForEndOfFrame()); } Debug.Log("DONE WAITING FOR CHOICE"); List <string> actionList = actions[choices[ChoiceScreen.lastChoiceMade.index]]; foreach (Tuple <int, string> addedData in actionList.Select(s => new Tuple <int, string>(actionList.IndexOf(s) + 1 + cProgress, s))) { if (dialogueController.data[addedData.Item1] != addedData.Item2) { dialogueController.data.Insert(addedData.Item1, addedData.Item2); } } } else { Debug.LogError("Invalid choice operation, no choices are found"); } dialogueController.chapterProgress = cProgress; dialogueController.chapterProgress++; //Debug.Log("cProgress at: " + cProgress + " chaoterProgessAt: " + dialogueController.chapterProgress); dialogueController._next = true; dialogueController.StopHandlingLine(); }