using System.Collections.Generic; using UnityEngine; public class RidingDamager : MonoBehaviour { public Equippable requiredUpgrade; public LayerMask lmRecieveDamage; public List damage; private BoxCollider myCollider; private Collider[] tempColliders = new Collider[50]; public float cooldownPerObject = 4f; private PlayerMovement playerMovement; private PlayerUpgradeManager upgradeManager; private BlacksmithUpgrades blacksmithUpgrades; private List recentlyHit = new List(); private List recentlyHitWhen = new List(); private float time; public float DamageMultiplyer => upgradeManager.playerDamageMultiplyer * blacksmithUpgrades.meleeDamage; private void Start() { if (!PerkManager.IsEquipped(requiredUpgrade)) { Object.Destroy(base.gameObject); return; } myCollider = GetComponent(); playerMovement = GetComponentInParent(); upgradeManager = PlayerUpgradeManager.instance; blacksmithUpgrades = BlacksmithUpgrades.instance; } private void Update() { Vector3 center = base.transform.localToWorldMatrix.MultiplyPoint(myCollider.center); Vector3 halfExtents = base.transform.localToWorldMatrix.MultiplyVector(myCollider.size); if (playerMovement.Moving && playerMovement.enabled) { Physics.OverlapBoxNonAlloc(center, halfExtents, tempColliders, base.transform.rotation, lmRecieveDamage); for (int i = 0; i < tempColliders.Length && !(tempColliders[i] == null); i++) { DealWithColliderHit(tempColliders[i]); } } time += Time.deltaTime; while (recentlyHitWhen.Count > 0 && time - recentlyHitWhen[0] > cooldownPerObject) { recentlyHitWhen.RemoveAt(0); recentlyHit.RemoveAt(0); } } private void DealWithColliderHit(Collider other) { TaggedObject componentInParent = other.GetComponentInParent(); if ((bool)componentInParent && !recentlyHit.Contains(componentInParent) && componentInParent.Tags.Contains(TagManager.ETag.EnemyOwned)) { componentInParent.Hp.TakeDamage(Weapon.CalculateDamageGeneral(componentInParent, damage, DamageMultiplyer)); recentlyHit.Add(componentInParent); recentlyHitWhen.Add(time); } } }