public void ReceiveKnockback(DamageTag knockbackTag, KnockbackParameters knockbackParams, Vector3 dir) { if (knockbackTag != DamageTag.Environment && knockbackTag == damageTag) { return; } if (damageTag == DamageTag.Disc && !knockbackParams.canKnockbackDiscs) { return; } if (knockbackParams.IsNull) { return; } currentStartKnockbackForce = knockbackParams.knockbackForce; currentKnockbackForce = currentStartKnockbackForce; knockbackDurationSystem.ChangeTimerValue(knockbackParams.knockbackDuration); knockbackDurationSystem.StartTimer(); knockbackAttenuationDurationSystem.ChangeTimerValue(knockbackParams.knockbackAttenuationDuration); knockbackAttenuationDurationSystem.StartTimer(); knockbackAttenuationDurationSystem.SetUp(EndKnockback); currentKnockbackDirection = dir; }
public static KnockbackParameters Lerp(KnockbackParameters a, KnockbackParameters b, float coeff) { return(new KnockbackParameters( Mathf.Lerp(a.knockbackForce, b.knockbackForce, coeff), Mathf.Lerp(a.knockbackDuration, b.knockbackDuration, coeff), Mathf.Lerp(a.knockbackAttenuationDuration, b.knockbackAttenuationDuration, coeff), a.canKnockbackDiscs)); }
public KnockbackParameters GetReboundOnObjectKnockback() { KnockbackParameters parameters = new KnockbackParameters(); parameters.knockbackForce = currentSpeed / 4f; parameters.knockbackDuration = 0.02f; parameters.knockbackAttenuationDuration = 0.08f; parameters.canKnockbackDiscs = true; return(parameters); }
public KnockbackParameters GetKnockbackParametersWithDistance(Vector3 hitKnockablePosition) { hitKnockablePosition.y = transform.position.y; float distance = Vector3.Distance(transform.position, hitKnockablePosition); float coeff = Mathf.Clamp((maxKnockbackDistance - distance) / (maxKnockbackDistance - minKnockbackDistance), 0, 1); coeff = knockbackDependingOnDistanceAttenuationCurve.Evaluate(coeff); return(KnockbackParameters.Lerp(maxKnockbackParameters, minKnockbackParameters, coeff)); }
/// <summary> /// Applique le knockback renseigné comme étant le knockback actuel /// </summary> /// <param name="knockbackParameters"></param> public void SetCurrentKnockbackParameters(KnockbackParameters knockbackParameters, Vector3 knockbackDirection, Vector3 redirection) { if (currentRecoveringTime != 0) { return; } if (relatedShip.IsKnockbackProtected && !knockbackParameters.IgnoresProtection) { return; } currentKnockbackParameters = knockbackParameters; currentKnockbackParameters.Initialize(knockbackDirection, redirection); if (redirection != Vector3.zero) { relatedShip.ShipMvt.SetRedirection(redirection, knockbackParameters.GetRedirectionCoeff, knockbackParameters.GetRedirectionTime); } currentRecoveringTime = recoveringTime; }
public void DealKnockback(ICollisionReceiver collisionReceiver, KnockbackParameters knockbackParameters, Vector3 knockbackDirection, Vector3 redirection) { collisionReceiver.ReceiveKnockback(this, knockbackParameters, knockbackDirection, redirection); }
/// <summary> /// Gère la prise de Knockback /// </summary> /// <param name="collisionSource">Source de la collision</param> /// <param name="knockbackParameters">Paramètre de knockbacks donnés par la source de la collision</param> /// <param name="knockbackDirection">Direction du knockback</param> /// <param name="redirection">Redirection appliquée par le knockback</param> public void ReceiveKnockback(ICollisionSource collisionSource, KnockbackParameters knockbackParameters, Vector3 knockbackDirection, Vector3 redirection) { relatedShip.KnckbckManager.SetCurrentKnockbackParameters(knockbackParameters, knockbackDirection, redirection); }
public void Reset() { currentKnockbackParameters = new KnockbackParameters(); }
private void Start() { damagesParameters = new DamagesParameters(1, 0.3f, RecoveringType.ConsidersRecover); knockbackParameters = new KnockbackParameters(20, 0.15f, 0.1f, true, 0.6f, 0.3f); }