1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- using System;
- using System.Collections.Generic;
- using UnityEngine;
- public class AnkleTwist : ATwistCtrl
- {
- public AnkleTwist(bool is_left, TBody body) : base((!is_left) ? Maid.AutoTwist.AnkleR : Maid.AutoTwist.AnkleL, body)
- {
- string str;
- if (body.IsCrcBody)
- {
- str = "Bip01";
- }
- else
- {
- str = (body.boMAN ? "ManBip" : "Bip01");
- }
- string str2 = (!is_left) ? " R Foot" : " L Foot";
- base.bone = body.GetBone(str + str2);
- base.mrBone = base.GetMRBone(str + str2);
- if (body.IsCrcBody)
- {
- for (int i = 0; i < 5; i++)
- {
- string name = (!is_left) ? string.Format("CalfTwist{0}_R", i + 1) : string.Format("CalfTwist{0}_L", i + 1);
- Transform transform = base.bone.parent.Find(name);
- if (transform)
- {
- Transform transform2 = base.mrBone.parent.Find(name);
- if (transform2)
- {
- base.twistBones.Add(new KeyValuePair<Transform, Transform>(transform2, transform));
- }
- }
- }
- }
- }
- public override void ApplyTwist()
- {
- Vector3 vector = base.bone.rotation * Vector3.forward;
- Vector3 vector2 = base.bone.parent.rotation * base.mrBone.localRotation * Vector3.forward;
- Vector3 normalized = (base.bone.position - base.bone.parent.position).normalized;
- vector2 = (vector2 - normalized * Vector3.Dot(vector2, normalized)).normalized;
- vector = (vector - normalized * Vector3.Dot(vector, normalized)).normalized;
- float f = Vector3.Dot(vector2, vector);
- float num = Mathf.Acos(f) * 57.29578f;
- if (float.IsNaN(num))
- {
- num = 0f;
- }
- else
- {
- Vector3 lhs = Vector3.Cross(normalized, vector2);
- if (Vector3.Dot(lhs, vector) < 0f)
- {
- num = -num;
- }
- }
- for (int i = 0; i < base.twistBones.Count; i++)
- {
- KeyValuePair<Transform, Transform> keyValuePair = base.twistBones[i];
- float num2 = (float)i / (float)base.twistBones.Count;
- keyValuePair.Value.localRotation = keyValuePair.Key.localRotation;
- keyValuePair.Value.rotation = Quaternion.AngleAxis(num * num2, normalized) * keyValuePair.Value.rotation;
- }
- }
- }
|