diff options
Diffstat (limited to 'DamageEffects.cs')
-rw-r--r-- | DamageEffects.cs | 84 |
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); + } + } + } +} |