using UnityEngine;
using System.Collections;
namespace RootMotion.FinalIK {
///
/// Maps a single bone to a node in %IK Solver
///
[System.Serializable]
public class IKMappingBone: IKMapping {
#region Main Interface
///
/// The bone transform.
///
public Transform bone;
///
/// The weight of maintaining the bone's rotation after solver has finished.
///
[Range(0f, 1f)]
public float maintainRotationWeight = 1f;
///
/// Determines whether this IKMappingBone is valid.
///
public override bool IsValid(IKSolver solver, ref string message) {
if (!base.IsValid(solver, ref message)) return false;
if (bone == null) {
message = "IKMappingBone's bone is null.";
return false;
}
return true;
}
#endregion Main Interface
private BoneMap boneMap = new BoneMap();
public IKMappingBone() {}
public IKMappingBone(Transform bone) {
this.bone = bone;
}
public void StoreDefaultLocalState() {
boneMap.StoreDefaultLocalState();
}
public void FixTransforms() {
boneMap.FixTransform(false);
}
/*
* Initiating and setting defaults
* */
public override void Initiate(IKSolverFullBody solver) {
if (boneMap == null) boneMap = new BoneMap();
boneMap.Initiate(bone, solver);
}
/*
* Pre-solving
* */
public void ReadPose() {
boneMap.MaintainRotation();
}
public void WritePose(float solverWeight) {
// Rotating back to the last maintained rotation
boneMap.RotateToMaintain(solverWeight * maintainRotationWeight);
}
}
}