Created
September 5, 2020 01:26
-
-
Save GuyInGrey/45ae1faad871323777e05b4d71d2a3df to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections.Generic; | |
using System.Linq; | |
using TMPro; | |
using UnityEngine; | |
using UnityEngine.UI; | |
namespace MorganSS | |
{ | |
public class DialogueBox : MonoBehaviour | |
{ | |
public static Message CurrentMessage; | |
public static List<Message> MessageQueue = new List<Message>(); | |
public bool Showing => !(CurrentMessage is null); | |
[SerializeField] | |
private Sprite[] CharacterExpressions; | |
[SerializeField] | |
private Image Background; | |
[SerializeField] | |
private Image CharacterDisplay; | |
[SerializeField] | |
private TMP_Text TextField; | |
[SerializeField] | |
private int CharactersPerSecond = 20; | |
private float TimeSinceTextStart; | |
// Update is called once per frame | |
void Update() | |
{ | |
CharacterDisplay.enabled = Showing; | |
Background.enabled = Showing; | |
TextField.enabled = Showing; | |
MessageQueue.RemoveAll(m => m is null); | |
if (!Showing && MessageQueue.Count > 0) | |
{ | |
CurrentMessage = MessageQueue[0]; | |
MessageQueue.RemoveAt(0); | |
} | |
if (!Showing) { return; } | |
CharacterDisplay.sprite = CharacterExpressions.Where( | |
s => s.name == (CurrentMessage.CharacterSpeaking + "_" + CurrentMessage.Expression).ToLower()).FirstOrDefault(); | |
CharacterDisplay.GetComponent<RectTransform>().sizeDelta = new Vector2( | |
4.4f * CharacterDisplay.sprite.rect.width, | |
4.4f * CharacterDisplay.sprite.rect.height); | |
TimeSinceTextStart += Time.deltaTime; | |
var charactersShouldShow = (int)(TimeSinceTextStart * CharactersPerSecond); | |
charactersShouldShow = charactersShouldShow >= CurrentMessage.Text.Length ? CurrentMessage.Text.Length : charactersShouldShow; | |
TextField.text = CurrentMessage.Text.Substring(0,charactersShouldShow); | |
if (Input.GetKeyDown(KeyCode.C)) | |
{ | |
if (charactersShouldShow < CurrentMessage.Text.Length) | |
{ | |
TimeSinceTextStart = 1000f; // Longer time than any message would take to display | |
} | |
else | |
{ | |
CurrentMessage = null; | |
if (MessageQueue.Count > 0) | |
{ | |
CurrentMessage = MessageQueue[0]; | |
MessageQueue.RemoveAt(0); | |
} | |
TimeSinceTextStart = 0f; | |
} | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment