Files
2024-12-18 15:25:43 +01:00

53 lines
2.0 KiB
C#

using UnityEngine;
namespace Invector
{
public class vSpike : MonoBehaviour
{
HingeJoint joint;
[HideInInspector]
public vSpikeControl control;
void Start()
{
joint = GetComponent<HingeJoint>();
}
bool inConect;
Transform impaled;
void OnCollisionEnter(Collision collision)
{
if (collision.rigidbody != null && collision.collider.GetComponent<vCharacterController.vDamageReceiver>() != 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<Rigidbody>())
{
body.linearVelocity = Vector3.zero;
}
var damageReceiver = collision.collider.GetComponent<vCharacterController.vDamageReceiver>();
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;
}
}
}
}