using UnityEngine; namespace Invector { public class vSpike : MonoBehaviour { HingeJoint joint; [HideInInspector] public vSpikeControl control; void Start() { joint = GetComponent(); } bool inConect; Transform impaled; void OnCollisionEnter(Collision collision) { if (collision.rigidbody != null && collision.collider.GetComponent() != null && !inConect) { bool condition = control == null ? true : !control.attachColliders.Contains(collision.collider.transform); if (control) control.attachColliders.Add(collision.collider.transform); if (condition) { inConect = true; if (joint && collision.rigidbody) joint.connectedBody = collision.rigidbody; impaled = collision.transform; foreach (Rigidbody body in collision.transform.root.GetComponentsInChildren()) { body.linearVelocity = Vector3.zero; } var damageReceiver = collision.collider.GetComponent(); if (damageReceiver && damageReceiver.ragdoll && damageReceiver.ragdoll.iChar!=null) damageReceiver.ragdoll.iChar.ChangeHealth((int)-damageReceiver.ragdoll.iChar.currentHealth); } } } void OnTriggerExit(Collider other) { if (other.transform != null && impaled != null && other.transform == impaled) { if (joint) joint.connectedBody = null; impaled = null; if (control != null && control.attachColliders.Contains(impaled)) control.attachColliders.Remove(impaled); inConect = false; } } } }