protected void AssertBoneWeightContainsChannels(BoneWeight expected, BoneWeight actual) { var m_BoneWeightDataList = new List <BoneWeightData>(); for (var i = 0; i < 4; ++i) { m_BoneWeightDataList.Add(new BoneWeightData() { boneIndex = expected.GetBoneIndex(i), weight = expected.GetWeight(i) }); } for (var i = 0; i < 4; ++i) { Assert.IsTrue(m_BoneWeightDataList.Contains(new BoneWeightData() { boneIndex = actual.GetBoneIndex(i), weight = actual.GetWeight(i) }), "BoneWeight incorrect channel " + i + " with boneIndex " + actual.GetBoneIndex(i) + " and weight " + actual.GetWeight(i)); } }
public static void SetFromBoneWeight(this EditableBoneWeight editableBoneWeight, BoneWeight boneWeight) { editableBoneWeight.Clamp(4, false); while (editableBoneWeight.Count < 4) { editableBoneWeight.AddChannel(0, 0f, false); } for (var i = 0; i < 4; ++i) { var weight = boneWeight.GetWeight(i); editableBoneWeight[i].boneIndex = boneWeight.GetBoneIndex(i); editableBoneWeight[i].weight = weight; editableBoneWeight[i].enabled = weight > 0f; } }
public static BoneWeight Lerp(BoneWeight a, BoneWeight b, float mix) { if (mix <= 0f) { return(a); } if (mix >= 1f) { return(b); } a.weight0 *= 1f - mix; a.weight1 *= 1f - mix; a.weight2 *= 1f - mix; a.weight3 *= 1f - mix; b.weight0 *= mix; b.weight1 *= mix; b.weight2 *= mix; b.weight3 *= mix; BoneWeight result = default(BoneWeight); int num = 0; int num2 = 0; if (a.GetWeight(num) > b.GetWeight(num2)) { result.weight0 = a.GetWeight(num); result.boneIndex0 = a.GetBoneIndex(num); num++; } else { result.weight0 = b.GetWeight(num2); result.boneIndex0 = b.GetBoneIndex(num2); num2++; } if (a.GetWeight(num) > b.GetWeight(num2)) { result.weight1 = a.GetWeight(num); result.boneIndex1 = a.GetBoneIndex(num); num++; } else { result.weight1 = b.GetWeight(num2); result.boneIndex1 = b.GetBoneIndex(num2); num2++; } if (a.GetWeight(num) > b.GetWeight(num2)) { result.weight2 = a.GetWeight(num); result.boneIndex2 = a.GetBoneIndex(num); num++; } else { result.weight2 = b.GetWeight(num2); result.boneIndex2 = b.GetBoneIndex(num2); num2++; } if (a.GetWeight(num) > b.GetWeight(num2)) { result.weight3 = a.GetWeight(num); result.boneIndex3 = a.GetBoneIndex(num); num++; } else { result.weight3 = b.GetWeight(num2); result.boneIndex3 = b.GetBoneIndex(num2); num2++; } float num3 = result.weight0 + result.weight1 + result.weight2 + result.weight3; if (num3 != 0f) { result.weight0 /= num3; result.weight1 /= num3; result.weight2 /= num3; result.weight3 /= num3; } return(result); }