Esempio n. 1
0
 public bool TakeDamage(CHitInfoData hitInfo)
 {
     hitInfo.DamageMultiplier = _damageMultiplier;
     if (_healthToNotify != null)
     {
         _healthToNotify.TakeDamage(hitInfo);
     }
     _takeDamageEvent?.Invoke();
     return(true);
 }
Esempio n. 2
0
        /// <summary>
        /// Returns the amount of damage taken.
        /// </summary>
        public float TakeDamage(CHitInfoData hitInfo)
        {
            if (this.IsDead)
            {
                return(0f);
            }
            var hitScriptObj = hitInfo.ScriptableObject;

            if (hitScriptObj.Damage <= 0f)
            {
                return(0f);
            }

            this._lastAttacker = hitInfo.AttackerRootTransform;

            // Start total damage calculation.
            float finalDamage = hitScriptObj.Damage;

            // external damage multiplier
            if (hitInfo.DamageMultiplier != 0f)
            {
                finalDamage *= hitInfo.DamageMultiplier;
            }

            //todo calculate armor damage reduction
            //todo calculate damage bonus
            //todo repulsion by animation
            //todo play damage animation if apply

            if (hitScriptObj.LookAtAttacker)
            {
                this._transform.LookAt(hitInfo.AttackerRootTransform.transform);
                this._transform.eulerAngles = new Vector3(0f, this._transform.eulerAngles.y, 0f);
            }

            if (finalDamage > 0f)
            {
                this.OnDamageTaken?.Invoke(finalDamage, hitInfo);
            }
            this.CurrentHealth -= finalDamage;

            // camera shake
            if (this._transformShake != null && hitInfo.AttackerRootTransform != null)
            {
                this._transformShake.RequestShake(
                    (hitInfo.AttackerRootTransform.position - this._transform.position).normalized * (finalDamage * 0.01f),
                    hitScriptObj.DamageShakePattern,
                    hitScriptObj.ShakeMultiplier
                    );
            }

            this._lastAttacker = hitInfo.AttackerRootTransform;

            return(finalDamage);
        }
Esempio n. 3
0
 private void DamageTake(float dmgAmount, CHitInfoData hitInfo)
 {
     this.StunProgress    += dmgAmount;
     this._lastHitInfoData = hitInfo;
 }
Esempio n. 4
0
		public void Initialize(CHitInfoData hitInfo, Transform attackerTransform) {
			this._hitInfo = hitInfo;
			this._hitInfo.AttackerRootTransform = attackerTransform;
		}