Esempio n. 1
0
 internal RawTransform([NotNull] xform transform)
 {
     Translation = transform.t;
     Rotation    = transform.q;
     Scale       = transform.s;
 }
Esempio n. 2
0
 internal RawTransform([NotNull] xform transform)
 {
     LocalPosition = transform.t;
     LocalRotation = transform.q;
     LocalScale    = transform.s;
 }
Esempio n. 3
0
        public void AddBone(Transform parent, Transform bone)
        {
            string parentPath = BonePath(parent.m_GameObject.instance.m_Name);
            string bonePath = parentPath + "/" + bone.m_GameObject.instance.m_Name;
            uint bonePathHash = Animator.StringToHash(bonePath);
            uint boneHash = Animator.StringToHash(bone.m_GameObject.instance.m_Name);

            int idx;
            for (idx = 0; idx < m_TOS.Count; idx++)
            {
                var data = m_TOS[idx];
                if (data.Key > bonePathHash)
                {
                    break;
                }
            }
            m_TOS.Insert(idx, new KeyValuePair<uint, string>(bonePathHash, bonePath));

            uint parentHash = BoneHash(parent.m_GameObject.instance.m_Name);
            for (int i = 0; i < m_Avatar.m_AvatarSkeleton.m_ID.Count; i++)
            {
                if (m_Avatar.m_AvatarSkeleton.m_ID[i] == parentHash)
                {
                    int cIdx = i + BoneIndex(parent, bone);
                    m_Avatar.m_AvatarSkeleton.m_Node.Insert(cIdx, new Node(i, -1));
                    m_Avatar.m_AvatarSkeleton.m_ID.Insert(cIdx, bonePathHash);
                    m_Avatar.m_SkeletonNameIDArray.Insert(cIdx, boneHash);
                    Matrix m = Matrix.Transpose(Matrix.Invert(Transform.WorldTransform(bone)));
                    Vector3 t, s;
                    Quaternion q;
                    m.Decompose(out s, out q, out t);
                    xform boneXform = new xform(new Vector4(t, 0), q, new Vector4(s, 1));
                    m_Avatar.m_AvatarSkeletonPose.m_X.Insert(cIdx, boneXform);
                    m_Avatar.m_DefaultPose.m_X.Insert(cIdx, boneXform);

                    for (int j = cIdx + 1; j < m_Avatar.m_AvatarSkeleton.m_ID.Count; j++)
                    {
                        if (m_Avatar.m_AvatarSkeleton.m_Node[j].m_ParentId >= cIdx)
                        {
                            m_Avatar.m_AvatarSkeleton.m_Node[j].m_ParentId++;
                        }
                    }
                    break;
                }
            }
            if (m_TOS.Count != m_Avatar.m_AvatarSkeleton.m_Node.Count)
            {
                Report.ReportLog("Warning! Parent Transform " + parent.m_GameObject.instance.m_Name + " not found in Avatar member m_ID");
            }
        }
Esempio n. 4
0
        public Human(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);
            m_RootX = new xform(stream);
            m_Skeleton = new Skeleton(stream);
            m_SkeletonPose = new SkeletonPose(stream);
            m_LeftHand = new Hand(stream);
            m_RightHand = new Hand(stream);

            int numHandles = reader.ReadInt32();
            m_Handles = new List<Handle>(numHandles);
            for (int i = 0; i < numHandles; i++)
            {
                m_Handles.Add(new Handle(stream));
            }

            int numColliders = reader.ReadInt32();
            m_ColliderArray = new List<Collider>(numColliders);
            for (int i = 0; i < numColliders; i++)
            {
                m_ColliderArray.Add(new Collider(stream));
            }

            int numIndexes = reader.ReadInt32();
            m_HumanBoneIndex = new List<int>(numIndexes);
            for (int i = 0; i < numIndexes; i++)
            {
                m_HumanBoneIndex.Add(reader.ReadInt32());
            }

            int numMasses = reader.ReadInt32();
            m_HumanBoneMass = new List<float>(numMasses);
            for (int i = 0; i < numMasses; i++)
            {
                m_HumanBoneMass.Add(reader.ReadSingle());
            }

            int numColliderIndexes = reader.ReadInt32();
            m_ColliderIndex = new List<int>(numColliderIndexes);
            for (int i = 0; i < numColliderIndexes; i++)
            {
                m_ColliderIndex.Add(reader.ReadInt32());
            }

            m_Scale = reader.ReadSingle();
            m_ArmTwist = reader.ReadSingle();
            m_ForeArmTwist = reader.ReadSingle();
            m_UpperLegTwist = reader.ReadSingle();
            m_LegTwist = reader.ReadSingle();
            m_ArmStretch = reader.ReadSingle();
            m_LegStretch = reader.ReadSingle();
            m_FeetSpacing = reader.ReadSingle();
            m_HasLeftHand = reader.ReadBoolean();
            m_HasRightHand = reader.ReadBoolean();
            reader.ReadBytes(2);
        }
Esempio n. 5
0
 public Handle(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_X = new xform(stream);
     m_ParentHumanIndex = reader.ReadUInt32();
     m_ID = reader.ReadUInt32();
 }
Esempio n. 6
0
 public Collider(Stream stream)
 {
     BinaryReader reader = new BinaryReader(stream);
     m_X = new xform(stream);
     m_Type = reader.ReadUInt32();
     m_XMotionType = reader.ReadUInt32();
     m_YMotionType = reader.ReadUInt32();
     m_ZMotionType = reader.ReadUInt32();
     m_MinLimitX = reader.ReadSingle();
     m_MaxLimitX = reader.ReadSingle();
     m_MaxLimitY = reader.ReadSingle();
     m_MaxLimitZ = reader.ReadSingle();
 }
Esempio n. 7
0
        public AvatarConstant(Stream stream)
        {
            BinaryReader reader = new BinaryReader(stream);
            m_AvatarSkeleton = new Skeleton(stream);
            m_AvatarSkeletonPose = new SkeletonPose(stream);
            m_DefaultPose = new SkeletonPose(stream);

            int numIDs = reader.ReadInt32();
            m_SkeletonNameIDArray = new List<uint>(numIDs);
            for (int i = 0; i < numIDs; i++)
            {
                m_SkeletonNameIDArray.Add(reader.ReadUInt32());
            }

            m_Human = new Human(stream);

            int numIndexes = reader.ReadInt32();
            m_HumanSkeletonIndexArray = new List<int>(numIndexes);
            for (int i = 0; i < numIndexes; i++)
            {
                m_HumanSkeletonIndexArray.Add(reader.ReadInt32());
            }

            int numReverseIndexes = reader.ReadInt32();
            m_HumanSkeletonReverseIndexArray = new List<int>(numReverseIndexes);
            for (int i = 0; i < numReverseIndexes; i++)
            {
                m_HumanSkeletonReverseIndexArray.Add(reader.ReadInt32());
            }

            m_RootMotionBoneIndex = reader.ReadInt32();
            m_RootMotionBoneX = new xform(stream);
            m_RootMotionSkeleton = new Skeleton(stream);
            m_RootMotionSkeletonPose = new SkeletonPose(stream);

            int numMotionIndexes = reader.ReadInt32();
            m_RootMotionSkeletonIndexArray = new List<int>(numMotionIndexes);
            for (int i = 0; i < numMotionIndexes; i++)
            {
                m_RootMotionSkeletonIndexArray.Add(reader.ReadInt32());
            }
        }