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));
            }
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
    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);
    }