Example #1
0
        /// <summary>
        /// Get socket location
        /// </summary>
        public Vector3 GetSocketLocation(string SocketName)
        {
            RuntimeSocket socket = null;

            for (int i = 0; i < sockets.Length; i++)
            {
                if (sockets[i].Name == SocketName)
                {
                    socket = sockets[i];
                    break;
                } // if (sockets[i].Name)
            }

            if (socket == null ||
                socket.OwnerBone == null)
            {
                return(Vector3.Zero);
            }

            return(socket.OwnerBone.finalMatrix.Translation + socket.Translation);
        } // GetSocketLocation(SocketName)
Example #2
0
        /// <summary>
        /// Load
        /// </summary>
        public override void Deserialize(BinaryReader reader)
        {
            base.Deserialize(reader);

            // Read mesh data
            numOfVertices = reader.ReadInt32();
            vertices      = new SkinnedTangentVertex[numOfVertices];
            for (int i = 0; i < vertices.Length; i++)
            {
                vertices[i] = new SkinnedTangentVertex(
                    new Vector3(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle()),
                    new Vector2(reader.ReadSingle(), reader.ReadSingle()),
                    new Vector3(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle()),
                    new Vector3(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle()),
                    new Vector3(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle()),
                    new Vector4(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle(), reader.ReadSingle()),
                    new Vector4(reader.ReadSingle(), reader.ReadSingle(),
                                reader.ReadSingle(), reader.ReadSingle()));
            } // for (int)

            numOfIndices  = reader.ReadInt32();
            objectIndices = new uint[numOfIndices];
            for (int i = 0; i < objectIndices.Length; i++)
            {
                objectIndices[i] = reader.ReadUInt32();
            } // for (int)

            boundingSphere = new BoundingSphere(
                new Vector3(reader.ReadSingle(), reader.ReadSingle(),
                            reader.ReadSingle()),
                reader.ReadSingle());

            // Read animation data
            runtimeAnimations.Clear();

            int numAnim = reader.ReadInt32();

            for (int i = 0; i < numAnim; i++)
            {
                RuntimeAnimation anim = new RuntimeAnimation();
                anim.Name  = reader.ReadString();
                anim.Start = reader.ReadInt32();
                anim.End   = reader.ReadInt32();
                runtimeAnimations.Add(anim);
            } // for (int)

            string semantic = reader.ReadString();
            string defaultDiffuseTexture = reader.ReadString();

            semantic = reader.ReadString();
            string defaultNormalTexture = reader.ReadString();

            objectMatrix = ReadMatrixHelper(reader);

            numOfAnimations = reader.ReadInt32();

            int boneCnt = reader.ReadInt32();

            bones = new RuntimeBone[boneCnt];
            // Precreate empty bones
            for (int i = 0; i < boneCnt; i++)
            {
                bones[i] = new RuntimeBone();
            } // for (int)
              // Now read bones
            for (int i = 0; i < boneCnt; i++)
            {
                bones[i].id     = reader.ReadString();
                bones[i].parent = ReadBoneRef(reader);
                int childCnt = reader.ReadInt32();
                bones[i].children = new RuntimeBone[childCnt];
                for (int j = 0; j < childCnt; j++)
                {
                    bones[i].children[j] = ReadBoneRef(reader);
                } // for (int)
                bones[i].initialMatrix     = ReadMatrixHelper(reader);
                bones[i].invBoneSkinMatrix = ReadMatrixHelper(reader);
                int aninMatCnt = reader.ReadInt32();
                bones[i].animationMatrices = new Matrix[aninMatCnt];
                for (int j = 0; j < aninMatCnt; j++)
                {
                    bones[i].animationMatrices[j] =
                        ReadMatrixHelper(reader);
                } // for (int)
            }     // for (int)

            for (int i = 0; i < bones.Length; i++)
            {
                RuntimeBone bone = bones[i];

                // Just assign the final matrix from the animation matrices.
                bone.finalMatrix = bone.animationMatrices[0];

                // Also use parent matrix if we got one
                // This will always work because all the bones are in order.
                if (bone.parent != null)
                {
                    bone.finalMatrix *=
                        bone.parent.finalMatrix;
                }
            } // for (int)

            sockets = new RuntimeSocket[reader.ReadInt32()];
            for (int i = 0; i < sockets.Length; i++)
            {
                sockets[i] = new RuntimeSocket();
                sockets[i].LoadFromStream(reader, bones);
            } // for (int)

            GenerateVertexAndIndexBuffers();

            CreateBoundingSphere();

            ValidateAnimations();
        } // Load(packageName, assetName, stream)