예제 #1
0
    public void StartDamageShipAnim(int damages, DamageSourceRelativePosition damageSourceRelativePosition)
    {
        shipRenderingManager.StartDamageAnimation(damages, damageSourceRelativePosition);

        if (shipFeedbacks != null)
        {
            shipFeedbacks.PlayDamageFeedback();
        }
    }
    public void StartDamageAnimation(int damages, DamageSourceRelativePosition damageSourceRelativePosition)
    {
        currentMaxRotationPerDamage = Mathf.Clamp(rotationForcePerTakenDamage * damages, 0, maxRotationFromDamages);

        if (damageSourceRelativePosition == DamageSourceRelativePosition.Right)
        {
            damageCurveCounter = 0.5f;
        }
        else
        {
            damageCurveCounter = 1.5f;
        }
    }
예제 #3
0
    /// <summary>
    /// Used to receive the attack from the inputed source
    /// </summary>
    /// <param name="attackSource">The attack source that touched this attack receiver</param>
    /// <param name="attackParameters">The parameters of the received attack</param>
    public virtual void ReceiveDamage(IDamageSource damageSource, DamagesParameters damagesParameters, ProjectileSpecialParameters projSpecialParameters)
    {
        if (relatedShip.IsLifeProtected)
        {
            return;
        }

        relatedShip.LfManager.Damage(damagesParameters.GetDamageAmount, damagesParameters.GetRecoveringTime, damagesParameters.GetRecoveringType);

        #region Damage Feedback
        DamageSourceRelativePosition damageSourceRelativePosition = DamageSourceRelativePosition.Right;

        if (damageSource != null)
        {
            Vector3 attackSourceRelativePos = (damageSource.GetDamageSourcePosition - transform.position).normalized;
            Vector3 selfDirection           = relatedShip.GetShipVelocity;
            if (Vector3.Dot(attackSourceRelativePos, selfDirection.GetLeftOrthogonalVectorXZ()) > 0)
            {
                damageSourceRelativePosition = DamageSourceRelativePosition.Left;
            }
        }
        else
        {
            int random = Random.Range(0, 2);
            if (random == 1)
            {
                damageSourceRelativePosition = DamageSourceRelativePosition.Left;
            }
        }

        relatedShip.StartDamageShipAnim(damagesParameters.GetDamageAmount, damageSourceRelativePosition);
        #endregion

        if (projSpecialParameters != null)
        {
            if (projSpecialParameters.GetSpeedModifier != null)
            {
                relatedShip.ShipMvt.StartNewSpeedModifier(projSpecialParameters.GetSpeedModifier);
            }

            if (projSpecialParameters.GetSkeweringParameters.Skewering)
            {
                relatedShip.SetCurrentSkeweringProjectile(projSpecialParameters.GetSkeweringParameters.GetSourceProjectile);
            }
        }
    }