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;
}
}
}
|