summaryrefslogtreecommitdiff
path: root/GameCode/PlayerChat.cs
blob: 61c957889558e914cd94b3891e986b0b5b800fbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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;
		}
	}
}