summaryrefslogtreecommitdiff
path: root/DamageEffects.cs
diff options
context:
space:
mode:
Diffstat (limited to 'DamageEffects.cs')
-rw-r--r--DamageEffects.cs84
1 files changed, 84 insertions, 0 deletions
diff --git a/DamageEffects.cs b/DamageEffects.cs
new file mode 100644
index 0000000..305c1d7
--- /dev/null
+++ b/DamageEffects.cs
@@ -0,0 +1,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);
+ }
+ }
+ }
+}