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));
 }
Exemple #3
0
    public KnockbackParameters GetReboundOnObjectKnockback()
    {
        KnockbackParameters parameters = new KnockbackParameters();

        parameters.knockbackForce               = currentSpeed / 4f;
        parameters.knockbackDuration            = 0.02f;
        parameters.knockbackAttenuationDuration = 0.08f;
        parameters.canKnockbackDiscs            = true;

        return(parameters);
    }
Exemple #4
0
    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));
    }
Exemple #5
0
    /// <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;
    }
Exemple #6
0
 public void DealKnockback(ICollisionReceiver collisionReceiver, KnockbackParameters knockbackParameters, Vector3 knockbackDirection, Vector3 redirection)
 {
     collisionReceiver.ReceiveKnockback(this, knockbackParameters, knockbackDirection, redirection);
 }
Exemple #7
0
 /// <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);
 }
Exemple #8
0
 public void Reset()
 {
     currentKnockbackParameters = new KnockbackParameters();
 }
Exemple #9
0
 private void Start()
 {
     damagesParameters   = new DamagesParameters(1, 0.3f, RecoveringType.ConsidersRecover);
     knockbackParameters = new KnockbackParameters(20, 0.15f, 0.1f, true, 0.6f, 0.3f);
 }