예제 #1
0
        private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform, List <string> report)
        {
            bool result;

            for (int i = 0; i < AvatarBipedMapper.s_BipedBones.Length; i++)
            {
                int       index      = AvatarBipedMapper.s_BipedBones[i].index;
                int       parentBone = HumanTrait.GetParentBone(index);
                bool      flag       = HumanTrait.RequiredBone(index);
                bool      flag2      = parentBone == -1 || HumanTrait.RequiredBone(parentBone);
                Transform transform  = (parentBone == -1) ? root : humanToTransform[parentBone];
                if (transform == null && !flag2)
                {
                    parentBone = HumanTrait.GetParentBone(parentBone);
                    flag2      = (parentBone == -1 || HumanTrait.RequiredBone(parentBone));
                    transform  = ((parentBone == -1) ? null : humanToTransform[parentBone]);
                    if (transform == null && !flag2)
                    {
                        parentBone = HumanTrait.GetParentBone(parentBone);
                        transform  = ((parentBone == -1) ? null : humanToTransform[parentBone]);
                    }
                }
                humanToTransform[index] = AvatarBipedMapper.MapBipedBone(i, transform, transform, report);
                if (humanToTransform[index] == null && flag)
                {
                    result = false;
                    return(result);
                }
            }
            result = true;
            return(result);
        }
예제 #2
0
 private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform, List <string> report)
 {
     for (int i = 0; i < HumanTrait.BoneCount; i++)
     {
         string    str        = kBipedHumanBoneNames[i];
         int       parentBone = HumanTrait.GetParentBone(i);
         bool      flag       = HumanTrait.RequiredBone(i);
         bool      flag2      = (parentBone == -1) || HumanTrait.RequiredBone(parentBone);
         Transform transform  = (parentBone == -1) ? root : humanToTransform[parentBone];
         if ((transform == null) && !flag2)
         {
             parentBone = HumanTrait.GetParentBone(parentBone);
             transform  = (parentBone == -1) ? null : humanToTransform[parentBone];
         }
         if (str != "")
         {
             humanToTransform[i] = MapBipedBone(i, transform, transform, report);
             if ((humanToTransform[i] == null) && flag)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
        private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform, List <string> report)
        {
            bool result;

            for (int i = 0; i < HumanTrait.BoneCount; i++)
            {
                string    a          = AvatarBipedMapper.kBipedHumanBoneNames[i];
                int       parentBone = HumanTrait.GetParentBone(i);
                bool      flag       = HumanTrait.RequiredBone(i);
                bool      flag2      = parentBone == -1 || HumanTrait.RequiredBone(parentBone);
                Transform transform  = (parentBone == -1) ? root : humanToTransform[parentBone];
                if (transform == null && !flag2)
                {
                    parentBone = HumanTrait.GetParentBone(parentBone);
                    transform  = ((parentBone == -1) ? null : humanToTransform[parentBone]);
                }
                if (a != "")
                {
                    humanToTransform[i] = AvatarBipedMapper.MapBipedBone(i, transform, transform, report);
                    if (humanToTransform[i] == null && flag)
                    {
                        result = false;
                        return(result);
                    }
                }
            }
            result = true;
            return(result);
        }
예제 #4
0
 private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform, List <string> report)
 {
     for (int index = 0; index < HumanTrait.BoneCount; ++index)
     {
         string    bipedHumanBoneName = AvatarBipedMapper.kBipedHumanBoneNames[index];
         int       parentBone1        = HumanTrait.GetParentBone(index);
         bool      flag1     = HumanTrait.RequiredBone(index);
         bool      flag2     = parentBone1 == -1 || HumanTrait.RequiredBone(parentBone1);
         Transform transform = parentBone1 == -1 ? root : humanToTransform[parentBone1];
         if ((Object)transform == (Object)null && !flag2)
         {
             int parentBone2 = HumanTrait.GetParentBone(parentBone1);
             transform = parentBone2 == -1 ? (Transform)null : humanToTransform[parentBone2];
         }
         if (bipedHumanBoneName != string.Empty)
         {
             humanToTransform[index] = AvatarBipedMapper.MapBipedBone(index, transform, transform, report);
             if ((Object)humanToTransform[index] == (Object)null && flag1)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
예제 #5
0
 private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform)
 {
     for (int i = 0; i < HumanTrait.BoneCount; i++)
     {
         bool      directChild = kBipedBoneDirectChild[i];
         int       parentBone  = HumanTrait.GetParentBone(i);
         bool      flag2       = HumanTrait.RequiredBone(i);
         bool      flag3       = (parentBone == -1) || HumanTrait.RequiredBone(parentBone);
         Transform transform   = (parentBone == -1) ? root : humanToTransform[parentBone];
         if ((transform == null) && !flag3)
         {
             parentBone  = HumanTrait.GetParentBone(parentBone);
             transform   = (parentBone == -1) ? null : humanToTransform[parentBone];
             directChild = false;
         }
         if (kBipedHumanBoneNames[i] != string.Empty)
         {
             humanToTransform[i] = MapBipedBone(i, transform, directChild);
             if ((humanToTransform[i] == null) && flag2)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
예제 #6
0
        protected AvatarControl.BodyPartColor IsValidBodyPart(BodyPart bodyPart)
        {
            AvatarControl.BodyPartColor bodyPartColor = AvatarControl.BodyPartColor.Off;
            bool flag = false;

            if (bodyPart != BodyPart.LeftFingers && bodyPart != BodyPart.RightFingers)
            {
                for (int i = 0; i < this.m_BodyPartHumanBone[(int)bodyPart].Length; i++)
                {
                    if (this.m_BodyPartHumanBone[(int)bodyPart][i] != -1)
                    {
                        BoneState state = this.m_Bones[this.m_BodyPartHumanBone[(int)bodyPart][i]].state;
                        flag |= (state == BoneState.Valid);
                        if (HumanTrait.RequiredBone(this.m_BodyPartHumanBone[(int)bodyPart][i]) && state == BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                        if (state != BoneState.Valid && state != BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                    }
                }
            }
            else
            {
                bool flag2 = true;
                int  num   = 3;
                for (int j = 0; j < this.m_BodyPartHumanBone[(int)bodyPart].Length / num; j++)
                {
                    bool flag3 = false;
                    int  num2  = j * num;
                    for (int k = num - 1; k >= 0; k--)
                    {
                        bool flag4 = this.m_Bones[this.m_BodyPartHumanBone[(int)bodyPart][num2 + k]].state == BoneState.Valid;
                        flag2 &= flag4;
                        if (flag3)
                        {
                            if (!flag4)
                            {
                                return((AvatarControl.BodyPartColor) 10);
                            }
                        }
                        else
                        {
                            flag |= (flag3 = (!flag3 && flag4));
                        }
                    }
                }
                bodyPartColor = ((!flag2) ? AvatarControl.BodyPartColor.IKRed : AvatarControl.BodyPartColor.IKGreen);
            }
            if (!flag)
            {
                return(AvatarControl.BodyPartColor.IKRed);
            }
            return(AvatarControl.BodyPartColor.Green | bodyPartColor);
        }
예제 #7
0
    static int RequiredBone(IntPtr L)
    {
        LuaScriptMgr.CheckArgsCount(L, 1);
        int  arg0 = (int)LuaScriptMgr.GetNumber(L, 1);
        bool o    = HumanTrait.RequiredBone(arg0);

        LuaScriptMgr.Push(L, o);
        return(1);
    }
예제 #8
0
        protected AvatarControl.BodyPartColor IsValidBodyPart(BodyPart bodyPart)
        {
            AvatarControl.BodyPartColor bodyPartColor = AvatarControl.BodyPartColor.Off;
            bool flag1  = false;
            int  index1 = (int)bodyPart;

            if (bodyPart != BodyPart.LeftFingers && bodyPart != BodyPart.RightFingers)
            {
                for (int index2 = 0; index2 < this.m_BodyPartHumanBone[index1].Length; ++index2)
                {
                    if (this.m_BodyPartHumanBone[index1][index2] != -1)
                    {
                        BoneState state = this.m_Bones[this.m_BodyPartHumanBone[index1][index2]].state;
                        flag1 |= state == BoneState.Valid;
                        if (HumanTrait.RequiredBone(this.m_BodyPartHumanBone[index1][index2]) && state == BoneState.None || state != BoneState.Valid && state != BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                    }
                }
            }
            else
            {
                bool flag2 = true;
                int  num1  = 3;
                for (int index2 = 0; index2 < this.m_BodyPartHumanBone[index1].Length / num1; ++index2)
                {
                    bool flag3 = false;
                    int  num2  = index2 * num1;
                    for (int index3 = num1 - 1; index3 >= 0; --index3)
                    {
                        bool flag4 = this.m_Bones[this.m_BodyPartHumanBone[index1][num2 + index3]].state == BoneState.Valid;
                        flag2 &= flag4;
                        if (flag3)
                        {
                            if (!flag4)
                            {
                                return(AvatarControl.BodyPartColor.Red | AvatarControl.BodyPartColor.IKRed);
                            }
                        }
                        else
                        {
                            flag1 |= flag3 = !flag3 && flag4;
                        }
                    }
                }
                bodyPartColor = !flag2 ? AvatarControl.BodyPartColor.IKRed : AvatarControl.BodyPartColor.IKGreen;
            }
            if (!flag1)
            {
                return(AvatarControl.BodyPartColor.IKRed);
            }
            return(AvatarControl.BodyPartColor.Green | bodyPartColor);
        }
예제 #9
0
 void SetupBones()
 {
     boneNames = new List <string>();
     string[] boneName = HumanTrait.BoneName;
     for (int i = 0; i < HumanTrait.BoneCount; ++i)
     {
         if ((_requiredOnly && HumanTrait.RequiredBone(i)) || !_requiredOnly)
         {
             boneNames.Add(boneName[i]);
         }
     }
     matchingBones = new List <Transform>(boneNames.Count);
 }
예제 #10
0
        public Avatar Create()
        {
            // check if it's a valid mecanim avatar
            var boneName = HumanTrait.BoneName;

            for (var x = 0; x < boneName.Length; x++)
            {
                if (!HumanTrait.RequiredBone(x))
                {
                    continue;
                }
                var requiredBoneType = Naming.MecanimNameToBoneType(boneName[x]);
                if (!_boneMapping.ContainsKey(requiredBoneType))
                {
                    return(AvatarBuilder.BuildGenericAvatar(_root, ""));
                }
            }

            var humanBones    = new HumanBone[_boneMapping.Count];
            var skeletonBones = GetSkeletonBones();

            for (var x = 0; x < _boneMapping.Count; x++)
            {
                var item            = _boneMapping.ElementAt(x);
                var boneType        = item.Key;
                var go              = item.Value;
                var mecanimBoneName = Naming.BoneTypeToMecanimName(boneType);
                if (mecanimBoneName == "default")
                {
                    mecanimBoneName = go.name;
                }

                var humanBone = new HumanBone
                {
                    humanName = mecanimBoneName,
                    boneName  = go.name,
                    limit     = { useDefaultValues = true }
                };
                humanBones[x] = humanBone;
            }

            var humanDescription = new HumanDescription()
            {
                skeleton = skeletonBones,
                human    = humanBones
            };

            return(AvatarBuilder.BuildHumanAvatar(_root, humanDescription));
        }
    public static int RequiredBone_s(IntPtr l)
    {
        int result;

        try
        {
            int i;
            LuaObject.checkType(l, 1, out i);
            bool b = HumanTrait.RequiredBone(i);
            LuaObject.pushValue(l, true);
            LuaObject.pushValue(l, b);
            result = 2;
        }
        catch (Exception e)
        {
            result = LuaObject.error(l, e);
        }
        return(result);
    }
        private static bool MapBipedBones(Transform root, ref Transform[] humanToTransform, List <string> report)
        {
            Debug.Log("s_BipedBones.length:" + s_BipedBones.Length);
            for (int bipedBoneIter = 0; bipedBoneIter < s_BipedBones.Length; bipedBoneIter++)
            {
                int boneIndex = s_BipedBones[bipedBoneIter].index;

                int parentIndex = HumanTrait.GetParentBone(boneIndex);

                bool required       = HumanTrait.RequiredBone(boneIndex);
                bool parentRequired = parentIndex != -1 ? HumanTrait.RequiredBone(parentIndex) : true;

                Transform parentTransform = parentIndex != -1 ? humanToTransform[parentIndex] : root;

                if (parentTransform == null && !parentRequired)
                {
                    parentIndex     = HumanTrait.GetParentBone(parentIndex);
                    parentRequired  = parentIndex != -1 ? HumanTrait.RequiredBone(parentIndex) : true;
                    parentTransform = parentIndex != -1 ? humanToTransform[parentIndex] : null;

                    if (parentTransform == null && !parentRequired)
                    {
                        parentIndex     = HumanTrait.GetParentBone(parentIndex);
                        parentTransform = parentIndex != -1 ? humanToTransform[parentIndex] : null;
                    }
                }

                humanToTransform[boneIndex] = MapBipedBone(bipedBoneIter, parentTransform, parentTransform, report);

                if (humanToTransform[boneIndex] == null && required)
                {
                    return(false);
                }
            }

            return(true);
        }
        protected AvatarControl.BodyPartColor IsValidBodyPart(BodyPart bodyPart)
        {
            AvatarControl.BodyPartColor ik = AvatarControl.BodyPartColor.Off;
            bool hasAnyBone = false;

            int idx = (int)bodyPart;

            if (bodyPart != BodyPart.LeftFingers && bodyPart != BodyPart.RightFingers)
            {
                int i;
                for (i = 0; i < m_BodyPartHumanBone[idx].Length; i++)
                {
                    if (m_BodyPartHumanBone[idx][i] != -1)
                    {
                        BoneState state = m_Bones[m_BodyPartHumanBone[idx][i]].state;
                        hasAnyBone |= state == BoneState.Valid;

                        // if it a required bone and no bone is set this body part is not valid
                        if (HumanTrait.RequiredBone(m_BodyPartHumanBone[idx][i]) == true && state == BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                        else if (state != BoneState.Valid && state != BoneState.None)
                        {
                            return(AvatarControl.BodyPartColor.Red);
                        }
                    }
                }
            }
            else
            {
                bool hasAllFinger = true;

                int i;
                int phalangeCount = 3;
                for (i = 0; i < m_BodyPartHumanBone[idx].Length / phalangeCount; i++)
                {
                    bool hasFinger   = false;
                    int  fingerIndex = i * phalangeCount;
                    int  j;
                    for (j = phalangeCount - 1; j >= 0; j--)
                    {
                        bool hasBone = m_Bones[m_BodyPartHumanBone[idx][fingerIndex + j]].state == BoneState.Valid;
                        hasAllFinger &= hasBone;
                        if (hasFinger)
                        {
                            if (!hasBone)
                            {
                                return(AvatarControl.BodyPartColor.Red | AvatarControl.BodyPartColor.IKRed);
                            }
                        }
                        else
                        {
                            hasAnyBone |= hasFinger = !hasFinger && hasBone;
                        }
                    }
                }

                ik = hasAllFinger ? AvatarControl.BodyPartColor.IKGreen : AvatarControl.BodyPartColor.IKRed;
            }

            if (!hasAnyBone)
            {
                return(AvatarControl.BodyPartColor.Off | AvatarControl.BodyPartColor.IKRed);
            }

            return(AvatarControl.BodyPartColor.Green | ik);
        }
예제 #14
0
            /// <summary>
            /// Draws the GUI for a single bone dot.
            /// </summary>
            /// <returns>Returns true if this is being hovered</returns>
            public bool BoneDotGUI(Rect rect, Rect selectRect, Rect tooltipRect, int boneIndex, bool hasHover = false)
            {
                bool  hover   = false;
                Event current = Event.current;
                Color color   = GUI.color;

                if (!hasHover)
                {
                    if (selectRect.Contains(current.mousePosition))
                    {
                        if (state == BoneState.Valid)
                        {
                            if (current.type == EventType.MouseDown)
                            {
                                if (bone == null)
                                {
                                    state = BoneState.None;
                                }
                                else
                                {
                                    Selection.activeTransform = bone;
                                    if (bone != null)
                                    {
                                        EditorGUIUtility.PingObject(bone);
                                    }
                                }

                                current.Use();
                            }
                            else
                            {
                                GUI.color = kBoneSelected;
                                GUI.DrawTexture(rect, DotSelection.image);
                            }
                        }

                        GUI.color = color;
                        GUI.Box(tooltipRect, boneName, EditorStyles.whiteMiniLabel);
                        hover = true;
                    }
                }

                switch (state)
                {
                case BoneState.Valid:
                    GUI.color = kBoneValid;
                    break;

                case BoneState.None:
                    GUI.color = kBoneInactive;
                    break;

                default:
                    GUI.color = kBoneInvalid;
                    break;
                }

                Texture image = HumanTrait.RequiredBone(boneIndex) ? DotFrame.image : DotFrameDotted.image;

                GUI.DrawTexture(rect, image);
                if (bone != null)
                {
                    GUI.DrawTexture(rect, DotFill.image);
                }
                GUI.color = color;
                return(hover);
            }
예제 #15
0
 public static bool IsRequiredBone(int boneID)
 {
     return(HumanTrait.RequiredBone(boneID));
 }
 private static bool IsBoneOptional(HumanBodyBones humanBodyBones)
 {
     return(!HumanTrait.RequiredBone((int)humanBodyBones));
 }