private void OnDamageHitReceived(Attack arg1, CombatSystem arg2, Vector3 arg3) { if (!arg1.GetData().DealsStun) { return; } StartStun(arg1.GetData().StunTime); }
private void OnDamageHitReceived(Attack attack, CombatSystem attackerCombatSystem, Vector3 contactPoint) { if (!_knockbackLock.CanDoAction()) { return; } if (attack.GetData().DealsKnockback) { StartKnockback(attack, attackerCombatSystem); } }
private void StartKnockback(Attack attack, CombatSystem attackerCombatSystem) { if (_knockbackCr != null) { return; } _knockbackCr = StartCoroutine(KnockbackCoroutine(attack, attackerCombatSystem)); OnStartKnockback?.Invoke(); OnBlockEvent?.Invoke(actionBlocks); }
private IEnumerator KnockbackCoroutine(Attack attack, CombatSystem attackerCombatSystem) { float timer = 0.0f; float a = attack.GetData().KnockbackSize / (0.5f * attack.GetData().KnockbackDuration *attack.GetData().KnockbackDuration); _rigidbody.velocity = Vector3.zero; Vector3 knockbackDirection = Vector3 .ProjectOnPlane((_combatSystem.transform.position - attackerCombatSystem.transform.position), new Vector3(0f, 1f, 0f)).normalized; while (timer < attack.GetData().KnockbackDuration) { _rigidbody.velocity = knockbackDirection * (a * timer); timer += Time.fixedDeltaTime; yield return(new WaitForFixedUpdate()); } _rigidbody.velocity = Vector3.zero; StopKnockback(); }
private void Awake() => _combatSystem = GetComponent <CombatSystem>();
private void Awake() { _combatSystem = GetComponent <CombatSystem>(); _rigidbody = transform.root.GetComponent <Rigidbody>(); }