using System; using UnityEngine; // Token: 0x0200006D RID: 109 public class Osage : MonoBehaviour { // Token: 0x06000295 RID: 661 RVA: 0x00014858 File Offset: 0x00012A58 private void Initialize() { if (this.trs != null) { return; } this.trs = base.transform; this.localRotation = this.trs.localRotation; this.initialLocalPos = this.trs.localPosition; this.scale = this.trs.localScale.x; Transform parent = this.trs.parent; while (parent != null) { this.scale *= parent.localScale.x; parent = parent.parent; } } // Token: 0x06000296 RID: 662 RVA: 0x000148F0 File Offset: 0x00012AF0 private void Awake() { this.Initialize(); this.childBone = null; foreach (object obj in base.transform) { Transform transform = (Transform)obj; if (transform.name.IndexOf("j_osg") == 0) { this.childBone = transform; break; } } this.parentBone = ((base.transform.parent == null || base.transform.parent.GetComponent() == null) ? null : base.transform.parent); this.reset = 0; } // Token: 0x06000297 RID: 663 RVA: 0x000149B0 File Offset: 0x00012BB0 private void Start() { if (this.trs == null) { return; } if (this.childBone == null) { this.springLength = this.boneAxis.magnitude * this.scale; this.crntPos = this.trs.TransformPoint(this.boneAxis); } else { this.springLength = Vector3.Distance(this.trs.position, this.childBone.position); this.crntPos = this.childBone.position; } this.prevPos = this.crntPos; this.oldPos = new Vector3(0f, -9999f, 0f); } // Token: 0x06000298 RID: 664 RVA: 0x00014A64 File Offset: 0x00012C64 private void UpdateSpring(bool rst, Transform thighL, Transform thighR, bool mov) { if (!enabled) return; if (mov) { this.trs.localRotation = Quaternion.identity * this.localRotation; Vector3 fromDirection = this.trs.TransformDirection(this.boneAxis); if (rst) { this.crntPos = fromDirection.normalized * this.springLength + this.trs.position; this.prevPos = this.crntPos; } this.oldPos = this.trs.position; Vector3 a = this.trs.rotation * (this.boneAxis * this.stiffnessForce); a += (this.prevPos - this.crntPos) / this.scale * this.dragForce; a += this.springForce; Vector3 vector = this.crntPos; this.crntPos = this.crntPos - this.prevPos + this.crntPos + a * this.scale; this.crntPos = (this.crntPos - this.trs.position).normalized * this.springLength + this.trs.position; this.prevPos = vector; Quaternion lhs = Quaternion.FromToRotation(fromDirection, this.crntPos - this.trs.position); this.trs.rotation = lhs * this.trs.rotation; if (thighL != null && thighR != null && base.name == "j_osg_apron_a") { float num = 90f - thighL.eulerAngles.z; if (num < 0f) { num = 0f; } float num2 = 90f - thighR.eulerAngles.z; if (num2 < 0f) { num2 = 0f; } float num3 = this.localRotation.eulerAngles.x - (num + num2) * 0.5f; Vector3 eulerAngles = this.trs.eulerAngles; if (eulerAngles.x > num3) { eulerAngles.x = num3; } if ((num3 -= eulerAngles.x) < 0f) { num3 = 0f; } eulerAngles.y -= eulerAngles.z; eulerAngles.z = (num2 - num) * 0.5f; if (eulerAngles.z < 0f) { eulerAngles.z += num3; } else { eulerAngles.z -= num3; } this.trs.eulerAngles = eulerAngles; } } else { this.prevPos = this.crntPos; this.crntPos = this.trs.TransformDirection(this.boneAxis).normalized * this.springLength + this.trs.position; this.oldPos = this.trs.position; } Osage osage = (this.childBone == null) ? null : this.childBone.GetComponent(); if (osage != null) { osage.UpdateSpring(rst, null, null, mov); } } // Token: 0x06000299 RID: 665 RVA: 0x00014DBC File Offset: 0x00012FBC public void UpdateOsage() { if (!enabled) return; if (this.trs == null) return; if (this.parentBone != null) return; /* if (TimeManager.Pause) { return; } */ this.trs.localRotation = Quaternion.identity * this.localRotation; } // Token: 0x0600029A RID: 666 RVA: 0x00014E0C File Offset: 0x0001300C public void LateUpdateOsage(Transform thighL, Transform thighR) { if (!enabled) return; if (this.trs == null) return; if (this.parentBone != null) return; /* if (TimeManager.Pause) { return; } */ if (Vector3.Distance(this.oldPos, this.trs.position) / this.scale > 0.1f && this.reset < 2) { this.reset = 2; } bool mov = false; Quaternion lhs = this.trs.localRotation; this.trs.localRotation = Quaternion.identity * this.localRotation; if (lhs == this.trs.localRotation) { mov = true; } else { this.trs.localRotation = lhs; } this.UpdateSpring(this.reset > 0, thighL, thighR, mov); if (this.reset > 0) { this.reset--; } } // Token: 0x0600029B RID: 667 RVA: 0x00014EE8 File Offset: 0x000130E8 public void Reset() { if (this.reset < 3) { this.reset = 3; } } // Token: 0x17000073 RID: 115 // (get) Token: 0x0600029C RID: 668 RVA: 0x00014EFA File Offset: 0x000130FA public Vector3 InitialLocalPos { get { return this.initialLocalPos; } } // Token: 0x17000074 RID: 116 // (get) Token: 0x0600029D RID: 669 RVA: 0x00014F02 File Offset: 0x00013102 public Quaternion LocalRotation { get { return this.localRotation; } } // Token: 0x0600029E RID: 670 RVA: 0x00014F0C File Offset: 0x0001310C public void ResetForce(Osage inSrc = null) { this.Initialize(); if (inSrc != null) { inSrc.Initialize(); this.initialLocalPos = inSrc.InitialLocalPos; this.localRotation = inSrc.LocalRotation; } this.trs.localPosition = this.initialLocalPos; this.trs.localRotation = this.localRotation; } // Token: 0x0400040D RID: 1037 public Vector3 boneAxis = new Vector3(0f, 0f, -1f); // Token: 0x0400040E RID: 1038 public float stiffnessForce = 0.1f; // Token: 0x0400040F RID: 1039 public float dragForce = 0.01f; // Token: 0x04000410 RID: 1040 public Vector3 springForce = new Vector3(0f, -0.001f, 0f); // Token: 0x04000411 RID: 1041 private Transform childBone; // Token: 0x04000412 RID: 1042 private Transform parentBone; // Token: 0x04000413 RID: 1043 private float springLength; // Token: 0x04000414 RID: 1044 private Quaternion localRotation; // Token: 0x04000415 RID: 1045 private Transform trs; // Token: 0x04000416 RID: 1046 private Vector3 crntPos; // Token: 0x04000417 RID: 1047 private Vector3 prevPos; // Token: 0x04000418 RID: 1048 private Vector3 oldPos; // Token: 0x04000419 RID: 1049 private int reset; // Token: 0x0400041A RID: 1050 private Vector3 initialLocalPos; // Token: 0x0400041B RID: 1051 private float scale; }