コード例 #1
0
ファイル: Model.cs プロジェクト: GodLesZ/FimbulwinterClient
            public bool Load(BinaryReader br, byte majorVersion, byte minorVersion, bool main)
            {
                Name = br.ReadCString(40);
                ParentName = br.ReadCString(40);

                IsMain = main;

                int textureCount = br.ReadInt32();
                Textures = new int[textureCount];

                for (int i = 0; i < textureCount; i++)
                {
                    Textures[i] = br.ReadInt32();
                }

                OffsetMT = new float[12];
                for (int i = 0; i < 12; i++)
                {
                    OffsetMT[i] = br.ReadSingle();
                }

                Position.Read(br);
                RotAngle = br.ReadSingle();
                RotAxis.Read(br);
                Scale.Read(br);

                int vertexCount = br.ReadInt32();
                Vertices = new Vertex[vertexCount];

                for (int i = 0; i < vertexCount; i++)
                {
                    Vertices[i].Read(br);
                }

                int tvertexCount = br.ReadInt32();
                TVertices = new TVertex[tvertexCount];

                for (int i = 0; i < tvertexCount; i++)
                {
                    TVertices[i].Read(br, majorVersion, minorVersion);
                }

                int faceCount = br.ReadInt32();
                Faces = new Face[faceCount];

                for (int i = 0; i < faceCount; i++)
                {
                    Face f = new Face();

                    f.VertexID = new ushort[3];
                    f.TVertexID = new ushort[3];

                    for (int n = 0; n < 3; n++)
                        f.VertexID[n] = br.ReadUInt16();

                    for (int n = 0; n < 3; n++)
                        f.TVertexID[n] = br.ReadUInt16();

                    f.TexID = br.ReadUInt16();
                    f.Padding = br.ReadUInt16();
                    f.TwoSide = br.ReadInt32();

                    if (majorVersion >= 1 && minorVersion >= 2)
                    {
                        f.SmoothGroup = br.ReadInt32();
                    }
                    else
                    {
                        f.SmoothGroup = 0;
                    }

                    Faces[i] = f;
                }

                if (majorVersion >= 1 && minorVersion >= 5)
                {
                    int frameCount = br.ReadInt32();
                    PosKeyFrames = new PosKeyFrame[frameCount];

                    for (int i = 0; i < frameCount; i++)
                    {
                        PosKeyFrame pfk = new PosKeyFrame();

                        pfk.Read(br);

                        PosKeyFrames[i] = pfk;
                    }
                }

                int rotFrameCount = br.ReadInt32();
                RotKeyFrames = new RotKeyFrame[rotFrameCount];

                for (int i = 0; i < rotFrameCount; i++)
                {
                    RotKeyFrame rfk = new RotKeyFrame();

                    rfk.Read(br);

                    RotKeyFrames[i] = rfk;
                }

                return true;
            }
コード例 #2
0
            public bool Load(BinaryReader br, byte majorVersion, byte minorVersion, bool main)
            {
                Name       = br.ReadCString(40);
                ParentName = br.ReadCString(40);

                IsMain = main;

                int textureCount = br.ReadInt32();

                Textures = new int[textureCount];

                for (int i = 0; i < textureCount; i++)
                {
                    Textures[i] = br.ReadInt32();
                }

                OffsetMT = new float[12];
                for (int i = 0; i < 12; i++)
                {
                    OffsetMT[i] = br.ReadSingle();
                }

                Position.Read(br);
                RotAngle = br.ReadSingle();
                RotAxis.Read(br);
                Scale.Read(br);

                int vertexCount = br.ReadInt32();

                Vertices = new Vertex[vertexCount];

                for (int i = 0; i < vertexCount; i++)
                {
                    Vertices[i].Read(br);
                }

                int tvertexCount = br.ReadInt32();

                TVertices = new TVertex[tvertexCount];

                for (int i = 0; i < tvertexCount; i++)
                {
                    TVertices[i].Read(br, majorVersion, minorVersion);
                }

                int faceCount = br.ReadInt32();

                Faces = new Face[faceCount];

                for (int i = 0; i < faceCount; i++)
                {
                    Face f = new Face();

                    f.VertexID  = new ushort[3];
                    f.TVertexID = new ushort[3];

                    for (int n = 0; n < 3; n++)
                    {
                        f.VertexID[n] = br.ReadUInt16();
                    }

                    for (int n = 0; n < 3; n++)
                    {
                        f.TVertexID[n] = br.ReadUInt16();
                    }

                    f.TexID   = br.ReadUInt16();
                    f.Padding = br.ReadUInt16();
                    f.TwoSide = br.ReadInt32();

                    if (majorVersion >= 1 && minorVersion >= 2)
                    {
                        f.SmoothGroup = br.ReadInt32();
                    }
                    else
                    {
                        f.SmoothGroup = 0;
                    }

                    Faces[i] = f;
                }

                if (majorVersion >= 1 && minorVersion >= 5)
                {
                    int frameCount = br.ReadInt32();
                    PosKeyFrames = new PosKeyFrame[frameCount];

                    for (int i = 0; i < frameCount; i++)
                    {
                        PosKeyFrame pfk = new PosKeyFrame();

                        pfk.Read(br);

                        PosKeyFrames[i] = pfk;
                    }
                }

                int rotFrameCount = br.ReadInt32();

                RotKeyFrames = new RotKeyFrame[rotFrameCount];

                for (int i = 0; i < rotFrameCount; i++)
                {
                    RotKeyFrame rfk = new RotKeyFrame();

                    rfk.Read(br);

                    RotKeyFrames[i] = rfk;
                }

                return(true);
            }