Example #1
0
    // TODO: Aplicarlo también a impactos que no sean de bala
    // Manejarlo aquí cuando usemos el escudo
    float ApplyKineticShield(Rigidbody collidingRb, Vector3 impactNormal, Bullet bulletComponent)
    {
        //
        //Debug.Log("Colliding rigidbody: " + collidingRb.transform.name);
        //
        float totalImpactForce;

        if (bulletComponent != null)
        {
            totalImpactForce = GeneralFunctions.GetBulletKineticEnergy(collidingRb);
        }
        else
        {
            totalImpactForce = GeneralFunctions.GetCollisionForce(bodyRB, collidingRb);
        }
        //
        Vector3 repulseDirection = Vector3.Reflect(collidingRb.velocity.normalized, impactNormal);
        // Primero sacamos el angulo entre la dirección del impacto y la normal
        float impactAngle = Vector3.Angle(repulseDirection, impactNormal);
        // TODO: Los casos de más de 90 deben de ser proyectiles que tocan a EM después de "atravesarlo"
        // De momento lo ignoramos
        // Lo revisaremos más adelante
        float receivedForce;

        if (impactAngle <= 90)
        {
            //
            float proportionalForceBecauseAngle = Mathf.Cos(impactAngle);
            receivedForce = proportionalForceBecauseAngle * totalImpactForce;
            //
            collidingRb.AddForce(repulseDirection * collidingRb.mass);
            bodyRB.AddForce(-repulseDirection * collidingRb.mass);
            robotControl.ChangeDampingType(DampingType.ThreeDimensional);
        }
        else
        {
            receivedForce = totalImpactForce;
            bodyRB.AddForce(collidingRb.velocity * collidingRb.mass, ForceMode.Impulse);
            robotControl.ChangeDampingType(DampingType.ThreeDimensional);
        }

        //
        return(receivedForce);
    }
Example #2
0
 //
 public void RepulsorDash(Vector3 xzDirection)
 {
     // Salto con el repulsor en vez de con las palas
     if (dashCooldown > 1)
     {
         //
         //Vector3 xzVelocity = new Vector3(rb.velocity.x, 0, rb.velocity.z);
         // TODO: Revisar esto
         // Igual hay que cvambiar al 3dDamoping
         robotControl.ChangeDampingType(DampingType.None);
         rb.AddForce(xzDirection * gameManager.playerAttributes.jumpForce * 10, ForceMode.Impulse);
         //
         dashCooldown = 0;
         // Sonido de dash
         GeneralFunctions.PlaySoundEffect(audioSource, jumpClip);
     }
 }