summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/RidingDamager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.0/Decompile/RidingDamager.cs')
-rw-r--r--Thronefall_v1.0/Decompile/RidingDamager.cs75
1 files changed, 75 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/RidingDamager.cs b/Thronefall_v1.0/Decompile/RidingDamager.cs
new file mode 100644
index 0000000..ad8148d
--- /dev/null
+++ b/Thronefall_v1.0/Decompile/RidingDamager.cs
@@ -0,0 +1,75 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class RidingDamager : MonoBehaviour
+{
+ public Equippable requiredUpgrade;
+
+ public LayerMask lmRecieveDamage;
+
+ public List<DamageModifyer> 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<TaggedObject> recentlyHit = new List<TaggedObject>();
+
+ private List<float> recentlyHitWhen = new List<float>();
+
+ private float time;
+
+ public float DamageMultiplyer => upgradeManager.playerDamageMultiplyer * blacksmithUpgrades.meleeDamage;
+
+ private void Start()
+ {
+ if (!PerkManager.IsEquipped(requiredUpgrade))
+ {
+ Object.Destroy(base.gameObject);
+ return;
+ }
+ myCollider = GetComponent<BoxCollider>();
+ playerMovement = GetComponentInParent<PlayerMovement>();
+ 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<TaggedObject>();
+ 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);
+ }
+ }
+}