public override IKSolver.Point GetPoint(Transform transform) { IKSolverLookAt.LookAtBone[] array = this.spine; for (int i = 0; i < array.Length; i++) { IKSolverLookAt.LookAtBone lookAtBone = array[i]; if (lookAtBone.transform == transform) { return(lookAtBone); } } IKSolverLookAt.LookAtBone[] array2 = this.eyes; for (int j = 0; j < array2.Length; j++) { IKSolverLookAt.LookAtBone lookAtBone2 = array2[j]; if (lookAtBone2.transform == transform) { return(lookAtBone2); } } if (this.head.transform == transform) { return(this.head); } return(null); }
public bool SetChain(Transform[] spine, Transform head, Transform[] eyes, Transform root) { this.SetBones(spine, ref this.spine); this.head = new IKSolverLookAt.LookAtBone(head); this.SetBones(eyes, ref this.eyes); base.Initiate(root); return(base.initiated); }
private static void DrawLookAtBoneInScene(IKSolverLookAt.LookAtBone bone, Vector3 IKPosition, Color color, float lineWeight) { Handles.color = color; GUI.color = color; Handles.SphereCap(0, bone.transform.position, Quaternion.identity, GetHandleSize(bone.transform.position)); // Draw a transparent line from last bone to IKPosition if (Application.isPlaying && lineWeight > 0) { Handles.color = new Color(color.r, color.g, color.b, color.a * lineWeight); Handles.DrawLine(bone.transform.position, IKPosition); } }
protected override void OnInitiate() { if (this.firstInitiation || !Application.isPlaying) { if (this.spine.Length > 0) { this.IKPosition = this.spine[this.spine.Length - 1].transform.position + this.root.forward * 3f; } else if (this.head.transform != null) { this.IKPosition = this.head.transform.position + this.root.forward * 3f; } else if (this.eyes.Length > 0 && this.eyes[0].transform != null) { this.IKPosition = this.eyes[0].transform.position + this.root.forward * 3f; } } IKSolverLookAt.LookAtBone[] array = this.spine; for (int i = 0; i < array.Length; i++) { IKSolverLookAt.LookAtBone lookAtBone = array[i]; lookAtBone.Initiate(this.root); } if (this.head != null) { this.head.Initiate(this.root); } IKSolverLookAt.LookAtBone[] array2 = this.eyes; for (int j = 0; j < array2.Length; j++) { IKSolverLookAt.LookAtBone lookAtBone2 = array2[j]; lookAtBone2.Initiate(this.root); } if (this.spineForwards == null || this.spineForwards.Length != this.spine.Length) { this.spineForwards = new Vector3[this.spine.Length]; } if (this.headForwards == null) { this.headForwards = new Vector3[1]; } if (this.eyeForward == null) { this.eyeForward = new Vector3[1]; } }
private void SetBones(Transform[] array, ref IKSolverLookAt.LookAtBone[] bones) { if (array == null) { bones = new IKSolverLookAt.LookAtBone[0]; return; } if (bones.Length != array.Length) { bones = new IKSolverLookAt.LookAtBone[array.Length]; } for (int i = 0; i < array.Length; i++) { if (bones[i] == null) { bones[i] = new IKSolverLookAt.LookAtBone(array[i]); } } }
/* * Draws the scene view helpers for IKSolverLookAt * */ public static void AddScene(IKSolverLookAt solver, Color color, bool modifiable) { // Protect from null reference errors if (Application.isPlaying && !solver.initiated) { return; } if (!Application.isPlaying && !solver.IsValid()) { return; } // Display the Spine if (solver.spine.Length > 0) { Handles.color = color; GUI.color = color; for (int i = 0; i < solver.spine.Length; i++) { IKSolverLookAt.LookAtBone bone = solver.spine[i]; if (i < solver.spine.Length - 1) { Handles.DrawLine(bone.transform.position, solver.spine[i + 1].transform.position); } Handles.SphereCap(0, bone.transform.position, Quaternion.identity, GetHandleSize(bone.transform.position)); } // Draw a transparent line from last bone to IKPosition if (Application.isPlaying) { Handles.color = new Color(color.r, color.g, color.b, color.a * solver.IKPositionWeight * solver.bodyWeight); Handles.DrawLine(solver.spine[solver.spine.Length - 1].transform.position, solver.IKPosition); } } // Display the eyes if (solver.eyes.Length > 0) { for (int i = 0; i < solver.eyes.Length; i++) { DrawLookAtBoneInScene(solver.eyes[i], solver.IKPosition, color, solver.IKPositionWeight * solver.eyesWeight); } } // Display the head if (solver.head.transform != null) { DrawLookAtBoneInScene(solver.head, solver.IKPosition, color, solver.IKPositionWeight * solver.headWeight); } Handles.color = color; GUI.color = color; // Selecting joint and manipulating IKPosition if (Application.isPlaying && solver.IKPositionWeight > 0) { if (modifiable) { Handles.SphereCap(0, solver.IKPosition, Quaternion.identity, GetHandleSize(solver.IKPosition)); // Manipulating position if (solver.target == null) { solver.IKPosition = Handles.PositionHandle(solver.IKPosition, Quaternion.identity); } } } Handles.color = Color.white; GUI.color = Color.white; }