using System; using UnityEngine; namespace MU3 { // Token: 0x020004E0 RID: 1248 [AddComponentMenu("MU3/SwingJoint/Node", 0)] public class SwingJoint : MonoBehaviour { // Token: 0x17000370 RID: 880 // (get) Token: 0x06001ED5 RID: 7893 RVA: 0x000C2DA8 File Offset: 0x000C2DA8 // (set) Token: 0x06001ED6 RID: 7894 RVA: 0x000C2DB0 File Offset: 0x000C2DB0 public Transform childNode { get { return this._childNode; } set { this._childNode = value; } } // Token: 0x06001ED7 RID: 7895 RVA: 0x000C2DBC File Offset: 0x000C2DBC public void update() { Quaternion rotation = this._transform.rotation; this._transform.localRotation = this._initialLocalRotation; Vector3 position = this._transform.position; Quaternion rotation2 = this._transform.rotation; float x = this._childNode.lossyScale.x; Vector3 vector = rotation2 * this._nodeAxis * this.childPullForce + this.staticForce; vector *= x; vector += (this._oldChildPos - this._nowChildPos) * this.inertialForce; Vector3 vector2 = 2f * this._nowChildPos - this._oldChildPos + vector; vector2 = this.calcNormalizedChildPosition(ref vector2, ref position, x); float collisionRadius = this.collisionRadius; int num; int num2; SwingJointColliderInformation[] collideCandidates = this._manager.getCollideCandidates(out num, out num2, vector2, collisionRadius); for (int i = num; i < num2; i++) { if (collideCandidates[i].getCollisionPointWithSphere(ref vector2, ref vector2, collisionRadius)) { vector2 = this.calcNormalizedChildPosition(ref vector2, ref position, x); } } Vector3 vector3 = this._transform.TransformDirection(this._nodeAxis); Quaternion quaternion = Quaternion.FromToRotation(vector3, vector2 - position); this._transform.rotation = Quaternion.Lerp(rotation, quaternion * rotation2, this._physicsRatio); this._oldChildPos = this._nowChildPos; this._nowChildPos = vector2; } // Token: 0x17000371 RID: 881 // (get) Token: 0x06001ED8 RID: 7896 RVA: 0x000C2F4C File Offset: 0x000C2F4C private float collisionRadius { get { return ((!(this._manager != null) || !this._manager.overwriteRadius) ? this._collisionRadius : this._manager.collisionRadius) * base.transform.lossyScale.x; } } // Token: 0x17000372 RID: 882 // (get) Token: 0x06001ED9 RID: 7897 RVA: 0x000C2FA4 File Offset: 0x000C2FA4 private float childPullForce { get { return (!(this._manager != null) || !this._manager.overwriteDynamic) ? this._childPullForce : this._manager.childPullForce; } } // Token: 0x17000373 RID: 883 // (get) Token: 0x06001EDA RID: 7898 RVA: 0x000C2FE0 File Offset: 0x000C2FE0 private float inertialForce { get { return (!(this._manager != null) || !this._manager.overwriteDynamic) ? this._inertialForce : this._manager.inertialForce; } } // Token: 0x17000374 RID: 884 // (get) Token: 0x06001EDB RID: 7899 RVA: 0x000C301C File Offset: 0x000C301C private Vector3 staticForce { get { return (!(this._manager != null) || !this._manager.overwriteStatic) ? this._staticForce : this._manager.staticForce; } } // Token: 0x06001EDC RID: 7900 RVA: 0x000C3058 File Offset: 0x000C3058 private void Awake() { this._transform = base.transform; this._initialLocalRotation = this._transform.localRotation; this._manager = this.findManager(); if (this._childNode == null && this._transform.childCount > 0) { this._childNode = this._transform.GetChild(0); } } // Token: 0x06001EDD RID: 7901 RVA: 0x000C30C4 File Offset: 0x000C30C4 private void Start() { if (null != this._childNode) { Vector3 localPosition = this._childNode.transform.localPosition; this._nodeAxis = localPosition.normalized; this._nodeLength = localPosition.magnitude; this._nowChildPos = (this._oldChildPos = this._childNode.position); } if (null != this._manager) { if (this._manager.overwriteRadius) { this._collisionRadius = this._manager.collisionRadius; } if (this._manager.overwriteDynamic) { this._childPullForce = this._manager.childPullForce; this._inertialForce = this._manager.inertialForce; } if (this._manager.overwriteStatic) { this._staticForce = this._manager.staticForce; } } } // Token: 0x06001EDE RID: 7902 RVA: 0x000C31AC File Offset: 0x000C31AC private SwingJointManager findManager() { SwingJointManager swingJointManager = null; Transform transform = base.transform; while (swingJointManager == null && transform != null) { swingJointManager = transform.GetComponent(); transform = transform.parent; } return swingJointManager; } // Token: 0x06001EDF RID: 7903 RVA: 0x000C31F0 File Offset: 0x000C31F0 private Vector3 calcNormalizedChildPosition(ref Vector3 childPos, ref Vector3 position, float childLossyScale) { Vector3 vector = CustomMath.normalize(childPos - position); return position + vector * this._nodeLength * childLossyScale; } // Token: 0x040048EB RID: 18667 public float _physicsRatio = 1f; // Token: 0x040048EC RID: 18668 public float _collisionRadius = 0.05f; // Token: 0x040048ED RID: 18669 public float _childPullForce = 0.01f; // Token: 0x040048EE RID: 18670 public float _inertialForce = 0.4f; // Token: 0x040048EF RID: 18671 public Vector3 _staticForce = new Vector3(0f, -0.0001f, 0f); // Token: 0x040048F0 RID: 18672 private Transform _childNode; // Token: 0x040048F1 RID: 18673 private Vector3 _nodeAxis; // Token: 0x040048F2 RID: 18674 private float _nodeLength; // Token: 0x040048F3 RID: 18675 private Quaternion _initialLocalRotation; // Token: 0x040048F4 RID: 18676 private Vector3 _nowChildPos; // Token: 0x040048F5 RID: 18677 private Vector3 _oldChildPos; // Token: 0x040048F6 RID: 18678 private Transform _transform; // Token: 0x040048F7 RID: 18679 private SwingJointManager _manager; } }