Ejemplo n.º 1
0
        public static void InitGlobalMappingData()
        {
            if (AvatarAutoMapper.s_DidPerformInit)
            {
                return;
            }
            List <AvatarAutoMapper.BoneMappingItem> boneMappingItemList = new List <AvatarAutoMapper.BoneMappingItem>((IEnumerable <AvatarAutoMapper.BoneMappingItem>)AvatarAutoMapper.s_MappingDataBody);
            int count = boneMappingItemList.Count;

            for (int index = 0; index < count; ++index)
            {
                AvatarAutoMapper.BoneMappingItem boneMappingItem = boneMappingItemList[index];
                if (boneMappingItem.side == AvatarAutoMapper.Side.Right)
                {
                    int boneIndexFromRight1 = AvatarAutoMapper.GetLeftBoneIndexFromRight(boneMappingItem.bone);
                    int boneIndexFromRight2 = AvatarAutoMapper.GetLeftBoneIndexFromRight(boneMappingItem.parent);
                    boneMappingItemList.Add(new AvatarAutoMapper.BoneMappingItem(boneIndexFromRight2, boneIndexFromRight1, boneMappingItem.minStep, boneMappingItem.maxStep, boneMappingItem.lengthRatio, new Vector3(-boneMappingItem.dir.x, boneMappingItem.dir.y, boneMappingItem.dir.z), AvatarAutoMapper.Side.Left, boneMappingItem.optional, boneMappingItem.alwaysInclude, boneMappingItem.keywords));
                }
            }
            AvatarAutoMapper.s_MappingDataBody = boneMappingItemList.ToArray();
            for (int index = 0; index < AvatarAutoMapper.s_MappingDataBody.Length; ++index)
            {
                AvatarAutoMapper.s_MappingDataBody[index].GetChildren(AvatarAutoMapper.s_MappingDataBody);
            }
            for (int index = 0; index < AvatarAutoMapper.s_LeftMappingDataHand.Length; ++index)
            {
                AvatarAutoMapper.s_LeftMappingDataHand[index].GetChildren(AvatarAutoMapper.s_LeftMappingDataHand);
            }
            for (int index = 0; index < AvatarAutoMapper.s_RightMappingDataHand.Length; ++index)
            {
                AvatarAutoMapper.s_RightMappingDataHand[index].GetChildren(AvatarAutoMapper.s_RightMappingDataHand);
            }
            AvatarAutoMapper.s_DidPerformInit = true;
        }
Ejemplo n.º 2
0
        public static void InitGlobalMappingData()
        {
            if (AvatarAutoMapper.s_DidPerformInit)
            {
                return;
            }
            List <AvatarAutoMapper.BoneMappingItem> list = new List <AvatarAutoMapper.BoneMappingItem>(AvatarAutoMapper.s_MappingDataBody);
            int count = list.Count;

            for (int i = 0; i < count; i++)
            {
                AvatarAutoMapper.BoneMappingItem boneMappingItem = list[i];
                if (boneMappingItem.side == AvatarAutoMapper.Side.Right)
                {
                    int leftBoneIndexFromRight  = AvatarAutoMapper.GetLeftBoneIndexFromRight(boneMappingItem.bone);
                    int leftBoneIndexFromRight2 = AvatarAutoMapper.GetLeftBoneIndexFromRight(boneMappingItem.parent);
                    list.Add(new AvatarAutoMapper.BoneMappingItem(leftBoneIndexFromRight2, leftBoneIndexFromRight, boneMappingItem.minStep, boneMappingItem.maxStep, boneMappingItem.lengthRatio, new Vector3(-boneMappingItem.dir.x, boneMappingItem.dir.y, boneMappingItem.dir.z), AvatarAutoMapper.Side.Left, boneMappingItem.optional, boneMappingItem.alwaysInclude, boneMappingItem.keywords));
                }
            }
            AvatarAutoMapper.s_MappingDataBody = list.ToArray();
            for (int j = 0; j < AvatarAutoMapper.s_MappingDataBody.Length; j++)
            {
                AvatarAutoMapper.s_MappingDataBody[j].GetChildren(AvatarAutoMapper.s_MappingDataBody);
            }
            for (int k = 0; k < AvatarAutoMapper.s_LeftMappingDataHand.Length; k++)
            {
                AvatarAutoMapper.s_LeftMappingDataHand[k].GetChildren(AvatarAutoMapper.s_LeftMappingDataHand);
            }
            for (int l = 0; l < AvatarAutoMapper.s_RightMappingDataHand.Length; l++)
            {
                AvatarAutoMapper.s_RightMappingDataHand[l].GetChildren(AvatarAutoMapper.s_RightMappingDataHand);
            }
            AvatarAutoMapper.s_DidPerformInit = true;
        }
        protected void AutoMapping()
        {
            Dictionary <int, Transform> mapping = AvatarAutoMapper.MapBones(gameObject.transform, modelBones);

            foreach (KeyValuePair <int, Transform> kvp in mapping)
            {
                AvatarSetupTool.BoneWrapper bone = m_Bones[kvp.Key];
                bone.bone = kvp.Value;
                bone.Serialize(m_HumanBoneArray);
            }
        }
Ejemplo n.º 4
0
        protected void AutoMapping()
        {
            Dictionary <int, Transform> dictionary = AvatarAutoMapper.MapBones(base.gameObject.transform, base.modelBones);

            foreach (KeyValuePair <int, Transform> current in dictionary)
            {
                AvatarSetupTool.BoneWrapper boneWrapper = this.m_Bones[current.Key];
                boneWrapper.bone = current.Value;
                boneWrapper.Serialize(base.serializedObject);
            }
        }
Ejemplo n.º 5
0
 protected void AutoMapping()
 {
     using (Dictionary <int, Transform> .Enumerator enumerator = AvatarAutoMapper.MapBones(this.gameObject.transform, this.modelBones).GetEnumerator())
     {
         while (enumerator.MoveNext())
         {
             KeyValuePair <int, Transform> current = enumerator.Current;
             AvatarSetupTool.BoneWrapper   bone    = this.m_Bones[current.Key];
             bone.bone = current.Value;
             bone.Serialize(this.serializedObject);
         }
     }
 }
Ejemplo n.º 6
0
        public static Dictionary <int, Transform> MapBones(Transform root, Dictionary <Transform, bool> validBones)
        {
            AvatarAutoMapper mapper = new AvatarAutoMapper(validBones);

            return(mapper.MapBones(root));
        }
Ejemplo n.º 7
0
        public Dictionary <int, Transform> MapBones(Transform root)
        {
            AvatarAutoMapper.InitGlobalMappingData();
            Dictionary <int, Transform> mapping = new Dictionary <int, Transform>();

            this.m_Orientation        = Quaternion.identity;
            this.m_MappingData        = AvatarAutoMapper.s_MappingDataBody;
            this.m_MappingIndexOffset = 0;
            this.m_BoneMatchDict.Clear();
            AvatarAutoMapper.BoneMatch rootMatch1 = new AvatarAutoMapper.BoneMatch((AvatarAutoMapper.BoneMatch)null, root, this.m_MappingData[0]);
            this.m_TreatDummyBonesAsReal = false;
            this.MapBonesFromRootDown(rootMatch1, mapping);
            if (mapping.Count < 15)
            {
                this.m_TreatDummyBonesAsReal = true;
                this.MapBonesFromRootDown(rootMatch1, mapping);
            }
            if (mapping.ContainsKey(1) && mapping.ContainsKey(2) && (mapping.ContainsKey(13) && mapping.ContainsKey(14)))
            {
                this.m_Orientation = AvatarSetupTool.AvatarComputeOrientation(mapping[1].position, mapping[2].position, mapping[13].position, mapping[14].position);
                if ((double)Vector3.Angle(this.m_Orientation * Vector3.up, Vector3.up) > 20.0 || (double)Vector3.Angle(this.m_Orientation * Vector3.forward, Vector3.forward) > 20.0)
                {
                    if (AvatarAutoMapper.kDebug)
                    {
                        Debug.Log((object)"*** Mapping with new computed orientation");
                    }
                    mapping.Clear();
                    this.m_BoneMatchDict.Clear();
                    this.MapBonesFromRootDown(rootMatch1, mapping);
                }
            }
            if ((!this.m_ValidBones.ContainsKey(root) ? 0 : (this.m_ValidBones[root] ? 1 : 0)) == 0 && mapping.Count > 0 && mapping.ContainsKey(0))
            {
                while (true)
                {
                    Transform parent = mapping[0].parent;
                    if ((UnityEngine.Object)parent != (UnityEngine.Object)null && (UnityEngine.Object)parent != (UnityEngine.Object)rootMatch1.bone && (this.m_ValidBones.ContainsKey(parent) && this.m_ValidBones[parent]))
                    {
                        mapping[0] = parent;
                    }
                    else
                    {
                        break;
                    }
                }
            }
            int        num         = 3;
            Quaternion orientation = this.m_Orientation;

            if (mapping.ContainsKey(17))
            {
                Transform bone      = mapping[15];
                Transform transform = mapping[17];
                this.m_Orientation        = Quaternion.FromToRotation(orientation * -Vector3.right, transform.position - bone.position) * orientation;
                this.m_MappingData        = AvatarAutoMapper.s_LeftMappingDataHand;
                this.m_MappingIndexOffset = 24;
                this.m_BoneMatchDict.Clear();
                AvatarAutoMapper.BoneMatch rootMatch2 = new AvatarAutoMapper.BoneMatch((AvatarAutoMapper.BoneMatch)null, bone, this.m_MappingData[0]);
                this.m_TreatDummyBonesAsReal = true;
                int count = mapping.Count;
                this.MapBonesFromRootDown(rootMatch2, mapping);
                if (mapping.Count < count + num)
                {
                    for (int key = 24; key <= 38; ++key)
                    {
                        mapping.Remove(key);
                    }
                }
            }
            if (mapping.ContainsKey(18))
            {
                Transform bone      = mapping[16];
                Transform transform = mapping[18];
                this.m_Orientation        = Quaternion.FromToRotation(orientation * Vector3.right, transform.position - bone.position) * orientation;
                this.m_MappingData        = AvatarAutoMapper.s_RightMappingDataHand;
                this.m_MappingIndexOffset = 39;
                this.m_BoneMatchDict.Clear();
                AvatarAutoMapper.BoneMatch rootMatch2 = new AvatarAutoMapper.BoneMatch((AvatarAutoMapper.BoneMatch)null, bone, this.m_MappingData[0]);
                this.m_TreatDummyBonesAsReal = true;
                int count = mapping.Count;
                this.MapBonesFromRootDown(rootMatch2, mapping);
                if (mapping.Count < count + num)
                {
                    for (int key = 39; key <= 53; ++key)
                    {
                        mapping.Remove(key);
                    }
                }
            }
            return(mapping);
        }
Ejemplo n.º 8
0
        public Dictionary <int, Transform> MapBones(Transform root)
        {
            AvatarAutoMapper.InitGlobalMappingData();
            Dictionary <int, Transform> dictionary = new Dictionary <int, Transform>();

            this.m_Orientation        = Quaternion.identity;
            this.m_MappingData        = AvatarAutoMapper.s_MappingDataBody;
            this.m_MappingIndexOffset = 0;
            this.m_BoneMatchDict.Clear();
            AvatarAutoMapper.BoneMatch boneMatch = new AvatarAutoMapper.BoneMatch(null, root, this.m_MappingData[0]);
            this.m_TreatDummyBonesAsReal = false;
            this.MapBonesFromRootDown(boneMatch, dictionary);
            if (dictionary.Count < 15)
            {
                this.m_TreatDummyBonesAsReal = true;
                this.MapBonesFromRootDown(boneMatch, dictionary);
            }
            if (dictionary.ContainsKey(1) && dictionary.ContainsKey(2) && dictionary.ContainsKey(13) && dictionary.ContainsKey(14))
            {
                this.m_Orientation = AvatarSetupTool.AvatarComputeOrientation(dictionary[1].position, dictionary[2].position, dictionary[13].position, dictionary[14].position);
                if (Vector3.Angle(this.m_Orientation * Vector3.up, Vector3.up) > 20f || Vector3.Angle(this.m_Orientation * Vector3.forward, Vector3.forward) > 20f)
                {
                    if (AvatarAutoMapper.kDebug)
                    {
                        Debug.Log("*** Mapping with new computed orientation");
                    }
                    dictionary.Clear();
                    this.m_BoneMatchDict.Clear();
                    this.MapBonesFromRootDown(boneMatch, dictionary);
                }
            }
            bool flag = !this.m_ValidBones.ContainsKey(root) || !this.m_ValidBones[root];

            if (flag && dictionary.Count > 0 && dictionary.ContainsKey(0))
            {
                while (true)
                {
                    Transform parent = dictionary[0].parent;
                    if (!(parent != null) || !(parent != boneMatch.bone) || !this.m_ValidBones.ContainsKey(parent) || !this.m_ValidBones[parent])
                    {
                        break;
                    }
                    dictionary[0] = parent;
                }
            }
            int        num         = 3;
            Quaternion orientation = this.m_Orientation;

            if (dictionary.ContainsKey(17))
            {
                Transform transform  = dictionary[15];
                Transform transform2 = dictionary[17];
                this.m_Orientation        = Quaternion.FromToRotation(orientation * -Vector3.right, transform2.position - transform.position) * orientation;
                this.m_MappingData        = AvatarAutoMapper.s_LeftMappingDataHand;
                this.m_MappingIndexOffset = 24;
                this.m_BoneMatchDict.Clear();
                AvatarAutoMapper.BoneMatch rootMatch = new AvatarAutoMapper.BoneMatch(null, transform, this.m_MappingData[0]);
                this.m_TreatDummyBonesAsReal = true;
                int count = dictionary.Count;
                this.MapBonesFromRootDown(rootMatch, dictionary);
                if (dictionary.Count < count + num)
                {
                    for (int i = 24; i <= 38; i++)
                    {
                        dictionary.Remove(i);
                    }
                }
            }
            if (dictionary.ContainsKey(18))
            {
                Transform transform3 = dictionary[16];
                Transform transform4 = dictionary[18];
                this.m_Orientation        = Quaternion.FromToRotation(orientation * Vector3.right, transform4.position - transform3.position) * orientation;
                this.m_MappingData        = AvatarAutoMapper.s_RightMappingDataHand;
                this.m_MappingIndexOffset = 39;
                this.m_BoneMatchDict.Clear();
                AvatarAutoMapper.BoneMatch rootMatch2 = new AvatarAutoMapper.BoneMatch(null, transform3, this.m_MappingData[0]);
                this.m_TreatDummyBonesAsReal = true;
                int count2 = dictionary.Count;
                this.MapBonesFromRootDown(rootMatch2, dictionary);
                if (dictionary.Count < count2 + num)
                {
                    for (int j = 39; j <= 53; j++)
                    {
                        dictionary.Remove(j);
                    }
                }
            }
            return(dictionary);
        }