summaryrefslogtreecommitdiff
path: root/DamageEffects.cs
blob: 305c1d7a2532a690424254254bfe230c7a9722a9 (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
using UnityEngine;
using UnityEngine.PostProcessing;

public class DamageEffects : MonoBehaviour
{
	private WobbleShake screenShake;

	private ParticleParent[] particleParents;

	private float counter;

	public AnimationCurve curve;

	public AnimationCurve curve2;

	public PostProcessingProfile post;

	private Camera mainCam;

	public float damageValue;

	private Transform hip;

	private void Start()
	{
		screenShake = base.transform.root.GetComponentInChildren<WobbleShake>();
		particleParents = GetComponentsInChildren<ParticleParent>();
		mainCam = base.transform.root.GetComponentInChildren<Camera>();
		hip = base.transform.root.GetComponentInChildren<Transform>().transform;
	}

	private void Update()
	{
		VignetteModel.Settings settings = post.vignette.settings;
		ChromaticAberrationModel.Settings settings2 = post.chromaticAberration.settings;
		counter += Time.deltaTime;
		if (damageValue > 0f)
		{
			damageValue -= Time.deltaTime * 0.3f;
		}
		if (counter < curve.keys[curve.length - 1].time)
		{
			float intensity = curve.Evaluate(counter);
			settings.intensity = intensity;
		}
		settings.intensity = Mathf.Lerp(settings.intensity, 0f, Time.deltaTime * 0.5f);
		settings.intensity = Mathf.Clamp(settings.intensity, 0f, 9f);
		post.vignette.settings = settings;
		if (counter < curve2.keys[curve2.length - 1].time)
		{
			float intensity2 = curve2.Evaluate(counter);
			settings2.intensity = intensity2;
		}
		settings2.intensity = Mathf.Lerp(settings2.intensity, 0f, Time.deltaTime * 0.5f);
		settings2.intensity = Mathf.Clamp(settings2.intensity, 0f, 9f);
		post.chromaticAberration.settings = settings2;
	}

	public void TakeDamage(Vector3 damage, Vector3 hitPoint)
	{
		counter = 0f;
		damageValue += damage.magnitude * 0.02f;
		damageValue = Mathf.Clamp(damageValue, 0f, 0.5f);
		GetComponentInChildren<Torso>().GetComponent<Rigidbody>().AddForce(damage.normalized * (damage.magnitude * 0.3f + 3f), ForceMode.VelocityChange);
		screenShake.AddShakeWorld(damage * 0.4f, 0.8f);
		DirectionalParticles(mainCam.transform.InverseTransformDirection(-damage));
	}

	private void DirectionalParticles(Vector3 damage)
	{
		for (int i = 0; i < particleParents.Length; i++)
		{
			Vector3 from = particleParents[i].transform.position - particleParents[i].transform.parent.position;
			Vector3 to = damage;
			from.y = 0f;
			to.y = 0f;
			if (Vector3.Angle(from, to) < 15f + damage.magnitude * 0.5f)
			{
				float multi = 1f - Vector3.Angle(from, to) / damage.magnitude * 0.5f;
				particleParents[i].Play(damage.magnitude, multi);
			}
		}
	}
}