public bool TakeDamage(CHitInfoData hitInfo) { hitInfo.DamageMultiplier = _damageMultiplier; if (_healthToNotify != null) { _healthToNotify.TakeDamage(hitInfo); } _takeDamageEvent?.Invoke(); return(true); }
/// <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); }
private void DamageTake(float dmgAmount, CHitInfoData hitInfo) { this.StunProgress += dmgAmount; this._lastHitInfoData = hitInfo; }
public void Initialize(CHitInfoData hitInfo, Transform attackerTransform) { this._hitInfo = hitInfo; this._hitInfo.AttackerRootTransform = attackerTransform; }