summaryrefslogtreecommitdiff
path: root/GameCode/PlayerChat.cs
diff options
context:
space:
mode:
Diffstat (limited to 'GameCode/PlayerChat.cs')
-rw-r--r--GameCode/PlayerChat.cs87
1 files changed, 87 insertions, 0 deletions
diff --git a/GameCode/PlayerChat.cs b/GameCode/PlayerChat.cs
new file mode 100644
index 0000000..61c9578
--- /dev/null
+++ b/GameCode/PlayerChat.cs
@@ -0,0 +1,87 @@
+using System.Collections;
+using TMPro;
+using UnityEngine;
+
+public class PlayerChat : MonoBehaviour
+{
+ public float spring = 15f;
+
+ public float damper = 15f;
+
+ public float impulse;
+
+ public float targetScale;
+
+ private TextMeshProUGUI messageText;
+
+ private ScaleShake scaleShake;
+
+ private float currentScale;
+
+ private float vel;
+
+ public Transform target;
+
+ private Screenshaker shaker;
+
+ private float sinceType;
+
+ public float shakeAmount;
+
+ public float shakeSpeed = 1f;
+
+ private void Start()
+ {
+ messageText = target.GetComponentInChildren<TextMeshProUGUI>();
+ shaker = target.GetComponentInChildren<Screenshaker>();
+ target.transform.localScale = Vector3.zero;
+ }
+
+ private void Update()
+ {
+ sinceType -= Time.unscaledDeltaTime;
+ if (sinceType < 0f)
+ {
+ targetScale = 0f;
+ }
+ else
+ {
+ targetScale = 1f;
+ }
+ vel = FRILerp.Lerp(vel, (targetScale - currentScale) * spring, damper);
+ currentScale += Time.unscaledDeltaTime * vel;
+ if (currentScale < 0f)
+ {
+ vel = 0f;
+ currentScale = 0f;
+ }
+ target.transform.localScale = Vector3.one * currentScale;
+ }
+
+ public void Send(string message)
+ {
+ message = ChatFilter.instance.FilterMessage(message);
+ messageText.text = message;
+ if (sinceType > 0f)
+ {
+ vel += impulse;
+ }
+ sinceType = 2f + (float)message.Length * 0.05f;
+ targetScale = 1f;
+ if (message.ToUpper() == message)
+ {
+ StartCoroutine(ShakeOverTime(sinceType));
+ }
+ }
+
+ private IEnumerator ShakeOverTime(float t)
+ {
+ float a = t;
+ while (a > 0f)
+ {
+ shaker.OnUIGameFeel(shakeAmount * Random.insideUnitCircle);
+ a -= Time.unscaledDeltaTime * shakeSpeed;
+ yield return null;
+ }
+ }
+}