Пример #1
0
        uint m_NumVerts;         // number of verts in skin set
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);
            serialise.UInt32(ref m_NumVerts);
            if (serialise.IsReading())
            {
                uint dataLen = 0;
                serialise.UInt32(ref dataLen);
                long pos = serialise.Position + dataLen;

                byte boneId = 0;

                for (; ;)
                {
                    serialise.UInt8(ref boneId);
                    if (boneId == 0xFF)
                    {
                        break;
                    }
                    boneIds.Add(boneId);
                }
                // pad
                if ((boneIds.Count % 2) == 0)
                {
                    serialise.UInt8(ref boneId);
                }

                vertices = new CIwAnimSkinSetVertex[m_NumVerts];

                for (int i = 0; i < m_NumVerts; ++i)
                {
                    serialise.UInt16(ref vertices[i].VertexId);
                    vertices[i].Bones = new CIwAnimSkinSetVertexBone[boneIds.Count];

                    for (int j = 0; j < boneIds.Count; j++)
                    {
                        serialise.SVec3(ref vertices[i].Bones[j].BindPose);
                    }
                    for (int j = 0; j < boneIds.Count; j++)
                    {
                        serialise.UInt8(ref vertices[i].Bones[j].Weight);
                    }
                    // pad
                    if (boneIds.Count % 2 == 1)
                    {
                        serialise.UInt8(ref boneId);
                    }
                }

                if (serialise.Position != pos)
                {
                    throw new FormatException("CIwAnimSkinSet");
                }
            }
            else
            {
                throw new ApplicationException();
            }
        }
Пример #2
0
        float m_TransformPrecision = 1; // Amount this is scaled up by.


        #endregion

        #region Public Methods and Operators

        /// <summary>
        /// The serialise.
        /// </summary>
        /// <param name="serialise">
        /// The serialise.
        /// </param>
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);

            serialise.UInt32(ref parentBone);

            serialise.SQuat(ref this.rot);
            serialise.SVec3(ref this.pos);

            serialise.UInt16(ref m_SkelID);
            serialise.UInt16(ref m_Flags);
            serialise.Fixed(ref m_TransformPrecision);
        }
Пример #3
0
        /// <summary>
        /// The serialise.
        /// </summary>
        /// <param name="serialise">
        /// The serialise.
        /// </param>
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);

            serialise.UInt32(ref parentBone);

            serialise.SQuat(ref this.rot);
            serialise.SVec3(ref this.pos);

            serialise.UInt16(ref m_SkelID);
            serialise.UInt16(ref m_Flags);
            serialise.Fixed(ref m_TransformPrecision);
        }
Пример #4
0
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);
            serialise.UInt32(ref m_NumVerts);
            if (serialise.IsReading())
            {
                uint dataLen = 0;
                serialise.UInt32(ref dataLen);
                long pos = serialise.Position + dataLen;

                byte boneId = 0;

                for (; ; )
                {
                    serialise.UInt8(ref boneId);
                    if (boneId == 0xFF)
                        break;
                    boneIds.Add(boneId);
                }
                // pad
                if ((boneIds.Count % 2) == 0)
                    serialise.UInt8(ref boneId);

                vertices = new CIwAnimSkinSetVertex[m_NumVerts];

                for (int i = 0; i < m_NumVerts;++i )
                {
                    serialise.UInt16(ref vertices[i].VertexId);
                    vertices[i].Bones = new CIwAnimSkinSetVertexBone[boneIds.Count];

                    for (int j = 0; j < boneIds.Count; j++)
                    {
                        serialise.SVec3(ref vertices[i].Bones[j].BindPose);
                    }
                    for (int j = 0; j < boneIds.Count; j++)
                    {
                        serialise.UInt8(ref vertices[i].Bones[j].Weight);
                    }
                    // pad
                    if ( boneIds.Count % 2 == 1)
                        serialise.UInt8(ref boneId);
                }

                    if (serialise.Position != pos)
                        throw new FormatException("CIwAnimSkinSet");
            }
            else
            {
                throw new ApplicationException();
            }
        }
Пример #5
0
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);
            {
                int value = 0;
                serialise.Int32(ref value);
            }
            {
                byte value = 2;  //1b=3
                serialise.UInt8(ref value);
            }
            {
                Vector3 value = Vector3.Zero;
                serialise.SVec3(ref value);
            }
            {
                byte value = 1;
                serialise.UInt8(ref value);
            }
            {
                uint value = 3; //1b=1
                serialise.UInt32(ref value);
            }
            {
                uint value = 2; //1b=1 num of bones?
                serialise.UInt32(ref value);
            }
            //1b=1 one more uint32?
            {
                bool value = true;
                serialise.Bool(ref value);
            }

            SerialiseMappedData(serialise); //1b-none

            // by number of bones
            {
                // 0x1d38b3fd
                Quaternion value = Quaternion.Identity;
                serialise.SQuat(ref value);
            }
            {
                // 0xa272adcf
                Quaternion value = Quaternion.Identity;
                serialise.SQuat(ref value);
            }
        }
Пример #6
0
        public override void Serialise(IwSerialise serialise)
        {
            base.Serialise(serialise);
            {
                int value = 0;
                serialise.Int32(ref value);
            }
            {
                byte value = 2;                  //1b=3
                serialise.UInt8(ref value);
            }
            {
                Vector3 value = Vector3.Zero;
                serialise.SVec3(ref value);
            }
            {
                byte value = 1;
                serialise.UInt8(ref value);
            }
            {
                uint value = 3;                 //1b=1
                serialise.UInt32(ref value);
            }
            {
                uint value = 2;                 //1b=1 num of bones?
                serialise.UInt32(ref value);
            }
            //1b=1 one more uint32?
            {
                bool value = true;
                serialise.Bool(ref value);
            }

            SerialiseMappedData(serialise);             //1b-none

            // by number of bones
            {
                // 0x1d38b3fd
                Quaternion value = Quaternion.Identity;
                serialise.SQuat(ref value);
            }
            {
                // 0xa272adcf
                Quaternion value = Quaternion.Identity;
                serialise.SQuat(ref value);
            }
        }