using System.Collections.Generic; using PrimeTween; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class ScriptManager : MonoBehaviour { [SerializeField] TextAsset scriptFile; [SerializeField] TextMeshProUGUI speakerText; [SerializeField] GameObject speakerSprite; [SerializeField] TextMeshProUGUI dialogueText; [SerializeField] private GameObject choiceButtonPrefab; [SerializeField] private Transform choiceButtonContainer; [SerializeField] private Image choiceBackground; [SerializeField] float charsPerSecond = 45f; public VisualNovelLayoutDirector director; private readonly float shakeAmount = 1.1f; private bool isChoiceAvailable = false; private Tween dialogueTween; private Script _currentScript; void Start() { speakerText.SetText(" "); speakerText.ForceMeshUpdate(true); dialogueText.SetText(" "); dialogueText.ForceMeshUpdate(true); director.AddCharacter("chino01"); Invoke("test1", 2f); Invoke("test2", 4f); _currentScript = ScriptParser.Parse(scriptFile.text); NextStep(); } void test1() { director.AddCharacter("chino01"); } void test2() { director.AddCharacter("chino01"); } void Update() { DisplayEffects(dialogueText); if (!isChoiceAvailable && !IsPointerOverInteractiveUI() && (Input.GetMouseButtonDown(0) || Input.GetKeyDown(KeyCode.Space))) { if (dialogueTween.isAlive) dialogueTween.Complete(); else NextStep(); } } private void NextStep() { if (_currentScript.HasNextAction()) { ScriptAction action = _currentScript.Continue(); ExecuteAction(action); return; } Debug.Log("ScriptManager :: End of Script"); } private void ExecuteAction(ScriptAction action) { if (action.Type == "scene") { string sceneName = action.GetParam("name"); Debug.Log($"ScriptManager :: Change Scene: {sceneName}"); NextStep(); return; } if (action.Type == "bg") { string bgFile = action.GetParam("file"); Debug.Log($"ScriptManager :: Change Background: {bgFile}"); NextStep(); return; } if (action.Type == "spk") { string speaker = action.GetParam("name"); if (speaker == "") speakerSprite.SetActive(false); speakerText.SetText(speaker); speakerText.ForceMeshUpdate(true); NextStep(); return; } if (action.Type == "msg") { string dialogue = action.GetParam("content"); DisplayDialogue(dialogue); return; } if (action.Type == "goto") { string targetScene = action.GetParam("scene"); _currentScript.JumpTo(targetScene); NextStep(); return; } if (action.Type == "choices") { Debug.Log("ScriptManager :: Show Choices"); isChoiceAvailable = true; // WTF.. is this shit Color tempColor = choiceBackground.color; tempColor.a = 0.8f; choiceBackground.color = tempColor; foreach (var choice in action.Choices) { string text = choice["content"]; string target = choice["goto"]; GameObject buttonObj = Instantiate(choiceButtonPrefab, choiceButtonContainer); buttonObj.GetComponentInChildren().text = text; buttonObj .GetComponent