private void OnTriggerEnter(Collider collision) { if (collision.tag == "Player") { PlayerStats playerStats = collision.GetComponent <PlayerStats>(); CharacterManager enemyCharacterManager = collision.GetComponent <CharacterManager>(); BlockingCollider shield = collision.transform.GetComponentInChildren <BlockingCollider>(); if (enemyCharacterManager != null) { if (enemyCharacterManager.isParrying) { // play animation characterManager.GetComponentInChildren <AnimatorManager>().PlayTargetAnimation("Parried", true); return; } else if (shield != null && enemyCharacterManager.isBlocking) { float physicalDamageAfterBlock = currentWeaponDamage - (currentWeaponDamage * shield.blockingPhysicalDamageAbsorption) / 100; if (playerStats != null) { playerStats.TakeDamage(Mathf.RoundToInt(physicalDamageAfterBlock), "Block Guard"); return; } } } if (playerStats != null) { playerStats.TakeDamage(currentWeaponDamage); } } if (collision.tag == "Enemy") { EnemyStats enemyStats = collision.GetComponent <EnemyStats>(); CharacterManager enemyCharacterManager = collision.GetComponent <CharacterManager>(); BlockingCollider shield = collision.transform.GetComponentInChildren <BlockingCollider>(); if (enemyCharacterManager != null) { if (enemyCharacterManager.isParrying) { // play animation characterManager.GetComponentInChildren <EnemyAnimatorManager>().PlayTargetAnimation("Parried", true); return; } else if (shield != null && enemyCharacterManager.isBlocking) { float physicalDamageAfterBlock = currentWeaponDamage - (currentWeaponDamage * shield.blockingPhysicalDamageAbsorption) / 100; if (enemyStats != null) { enemyStats.TakeDamage(Mathf.RoundToInt(physicalDamageAfterBlock), "Block Guard"); return; } } } if (enemyStats != null) { enemyStats.TakeDamage(currentWeaponDamage); } } if (collision.tag == "Hidden Wall") { HiddenWall hiddenWall = collision.GetComponent <HiddenWall>(); hiddenWall.wallHasBeenHit = true; } }
public void AttemptBackStabOrRiposte() { //Stamina dependency if (playerStats.CurrentStamina <= 0) { return; } RaycastHit hit; // start point - going out to transforms direction forward - out hit variable - distance 0.5f - scan on layer if (Physics.Raycast(inputHandler.criticalAttackRayCastStartPoint.position, transform.TransformDirection(Vector3.forward), out hit, 0.5f, backStabLayer)) { #region Backstab CharacterManager enemyCharacterManager = hit.transform.gameObject.GetComponentInParent <CharacterManager>(); DamageCollider rightWeapon = weaponSlotManager.rightHandDamageCollider; if (enemyCharacterManager != null) { //check id ( so you cant stab ally ) //pull is into a transform behind the enemy so backstab looks clean playerManager.transform.position = enemyCharacterManager.backStabCollider.deathblowsPosition.position; //rotate us towards that transform Vector3 rotationDirection = playerManager.transform.root.eulerAngles; rotationDirection = hit.transform.position - playerManager.transform.position; rotationDirection.y = 0; rotationDirection.Normalize(); Quaternion tr = Quaternion.LookRotation(rotationDirection); Quaternion targetRotation = Quaternion.Slerp(playerManager.transform.rotation, tr, 500 * Time.deltaTime); playerManager.transform.rotation = targetRotation; int criticalDamage = playerInventory.rightWeapon.criticalDamageMultiplier * rightWeapon.currentWeaponDamage; enemyCharacterManager.pendingCriticalDamage = criticalDamage; //play animation animatorHandler.PlayTargetAnimation("Back Stab", true); //make enemy play animation enemyCharacterManager.GetComponentInChildren <AnimatorManager>().PlayTargetAnimation("Back Stabbed", true); //do damage } #endregion } else if (Physics.Raycast(inputHandler.criticalAttackRayCastStartPoint.position, transform.TransformDirection(Vector3.forward), out hit, 0.7f, riposteLayer)) { #region Riposte CharacterManager enemyCharacterManager = hit.transform.gameObject.GetComponentInParent <CharacterManager>(); DamageCollider rightWeapon = weaponSlotManager.rightHandDamageCollider; if (enemyCharacterManager != null && enemyCharacterManager.canBeRiposted) { playerManager.transform.position = enemyCharacterManager.riposteCollider.deathblowsPosition.position; Vector3 rotationDirection = playerManager.transform.root.eulerAngles; rotationDirection = hit.transform.position - playerManager.transform.position; rotationDirection.y = 0; rotationDirection.Normalize(); Quaternion tr = Quaternion.LookRotation(rotationDirection); Quaternion targetRotation = Quaternion.Slerp(playerManager.transform.rotation, tr, 500 * Time.deltaTime); playerManager.transform.rotation = targetRotation; int criticalDamage = playerInventory.rightWeapon.criticalDamageMultiplier * rightWeapon.currentWeaponDamage; enemyCharacterManager.pendingCriticalDamage = criticalDamage; animatorHandler.PlayTargetAnimation("Riposte", true); enemyCharacterManager.GetComponentInChildren <AnimatorManager>().PlayTargetAnimation("Riposted", true); } #endregion } }