//Next command public void Next() { for (;;) { if (programCounter >= commands.Count) { Debug.LogWarning("programCounter >= commands.Count"); Debug.LogWarning(programCounter); return; } Debug.Log(programCounter); if (commands[programCounter].GetType() == typeof(DialogueAndNarration)) { DialogueAndNarration dialogueAndNarrationCommand = (DialogueAndNarration)commands[programCounter]; //Debug.Log(dialogueAndNarrationCommand); dialogueManager.SetText(((dialogueAndNarrationCommand.Character != null) ? dialogueAndNarrationCommand.Character.Name : "") + "\n\n" + dialogueAndNarrationCommand.Text); programCounter++; return; } else if (commands[programCounter].GetType() == typeof(string[])) { string[] arrayCommand = (string[])commands[programCounter]; Debug.Log(string.Join(", ", arrayCommand)); switch (arrayCommand[0]) { case "hide": if (arrayCommand.Length == 2) { characterManager.RemoveCharacter(arrayCommand[1]); } else if (arrayCommand.Length == 3) { if (arrayCommand[2].ToUpper().Equals("FADEOUT")) { characterManager.GetCharacter(arrayCommand[1]).GetComponent <CharacterModel>().FadeOutInit(1f); } } else { if (arrayCommand[2].ToUpper().Equals("FADEOUT")) { characterManager.GetCharacter(arrayCommand[1]).GetComponent <CharacterModel>().FadeOutInit(int.Parse(arrayCommand[3])); } } programCounter++; continue; case "jump": if (labels.ContainsKey(arrayCommand[1])) { programCounter = labels[arrayCommand[1]]; continue; } else { Debug.LogWarning(string.Format("Unknown label `{0}`", arrayCommand[1])); programCounter++; return; } case "play": if (arrayCommand[1].ToUpper().Equals("MUSIC")) { audioManager.ChangeMusic(arrayCommand[2], true); } else if (arrayCommand[1].ToUpper().Equals("SOUND")) { audioManager.PlaySound(arrayCommand[2]); } programCounter++; continue; case "scene": if (arrayCommand[2] == null) { backgroundManager.ChangeBackground(arrayCommand[1]); } else { string[] trans = arrayCommand[2].Split(' '); if (trans.Length == 1) { backgroundManager.ChangeBackground(arrayCommand[1], transitions[trans[0]]); } else if (trans.Length == 2) { backgroundManager.ChangeBackground(arrayCommand[1], transitions[trans[0]], int.Parse(trans[1])); } else { Debug.Log(string.Format("Excessive Transition modifiers at line '{0}'.")); } } programCounter++; continue; case "lighting": float[] newLight; lightingColors.TryGetValue(arrayCommand[1], out newLight); if (newLight != null) { backgroundManager.AmbientLight.GetComponent <Light>().color = new Color(newLight[0], newLight[1], newLight[2]); backgroundManager.AmbientLight.GetComponent <Light>().intensity = newLight[3]; } else { Debug.Log(string.Format("Unknown lighting parameter '{0}'.", arrayCommand[1])); } programCounter++; continue; case "show": string[] anims = arrayCommand[1].Split(' '); if (!characterManager.GetCharacter(anims[0])) { characterManager.AddCharacter(anims[0]); } if (anims.Length > 1) { for (int i = 1; i < anims.Length; i++) { characterManager.StartAnimation(anims[i], anims[0]); } } else { characterManager.StartAnimation(anims[1], anims[0]); } programCounter++; continue; case "choices": if (!dialogueManager.choiceState && !dialogueManager.choiceBuffer) { int numChoices = int.Parse(arrayCommand[1]); string[] choiceTexts = new string[numChoices]; string choiceName = arrayCommand[2]; //Debug.LogError(choiceName); for (int l = 1; l <= numChoices; l++) { //Debug.LogError(2 + l * 3); choiceTexts[l - 1] = arrayCommand[2 + l * 3]; } dialogueManager.ChoiceInit(choiceTexts, choiceName); return; } else if (dialogueManager.choiceBuffer) { if (dialogueManager.GetSelectedChoice() < 1 || dialogueManager.GetSelectedChoice() > 5) { Debug.LogError("Invalid choice index returned: " + dialogueManager.GetSelectedChoice() + " Choice aborted"); programCounter++; dialogueManager.ResetChoice(); return; } else { int choiceIndex = dialogueManager.GetSelectedChoice() * 3; //choiceData.Add("" + choiceIndex/3); if (labels.ContainsKey(arrayCommand[choiceIndex + 1])) { programCounter = labels[arrayCommand[choiceIndex + 1]]; dialogueManager.ResetChoice(); continue; } else { Debug.LogWarning(string.Format("Unknown label assigned to choice `{0}`", arrayCommand[choiceIndex])); programCounter++; dialogueManager.ResetChoice(); return; } } } else { return; } case "return": //UnityEditor.EditorApplication.isPlaying = false; programCounter++; return; default: Debug.LogWarning(string.Format("Unknown command `{0}`", arrayCommand[0])); programCounter++; continue; } } else { Debug.LogWarning(string.Format("Unknown command `{0}`", commands[programCounter])); programCounter++; continue; } } }