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(); particleParents = GetComponentsInChildren(); mainCam = base.transform.root.GetComponentInChildren(); hip = base.transform.root.GetComponentInChildren().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().GetComponent().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); } } } }