OSDN Git Service

refactored
[tdcgexplorer/tso2mqo.git] / TDCGFile.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.IO;\r
4 using System.Text;\r
5 \r
6 namespace Tso2MqoGui\r
7 {\r
8     public class TDCGFile\r
9     {\r
10         protected BinaryReader  r;\r
11 \r
12         public TDCGFile(string file)\r
13             : this(File.OpenRead(file))\r
14         {\r
15         }\r
16 \r
17         public TDCGFile(Stream s)\r
18             : this(new BinaryReader(s))\r
19         {\r
20         }\r
21 \r
22         public TDCGFile(BinaryReader r)\r
23         {\r
24             this.r  = r;\r
25         }\r
26 \r
27         public void ReadVertex(ref Vertex v)\r
28         {\r
29             v.Pos.X     = r.ReadSingle();\r
30             v.Pos.Y     = r.ReadSingle();\r
31             v.Pos.Z     = r.ReadSingle();\r
32             v.Nrm.X     = r.ReadSingle();\r
33             v.Nrm.Y     = r.ReadSingle();\r
34             v.Nrm.Z     = r.ReadSingle();\r
35             v.Tex.X     = r.ReadSingle();\r
36             v.Tex.Y     = r.ReadSingle();\r
37 \r
38             int     cnt = r.ReadInt32();\r
39             byte[]  idx = new byte[4]{0, 0, 0, 0};\r
40 \r
41             if(cnt >= 1)    { idx[3]= (byte)r.ReadInt32(); v.Wgt.W = r.ReadSingle(); }\r
42             if(cnt >= 2)    { idx[2]= (byte)r.ReadInt32(); v.Wgt.Z = r.ReadSingle(); }\r
43             if(cnt >= 3)    { idx[1]= (byte)r.ReadInt32(); v.Wgt.Y = r.ReadSingle(); }\r
44             if(cnt >= 4)    { idx[0]= (byte)r.ReadInt32(); v.Wgt.X = r.ReadSingle(); }\r
45             if(cnt >= 5)    { r.ReadInt32(); r.ReadSingle(); }\r
46             if(cnt >= 6)    { r.ReadInt32(); r.ReadSingle(); }\r
47             if(cnt >= 7)    { r.ReadInt32(); r.ReadSingle(); }\r
48             if(cnt >= 8)    { r.ReadInt32(); r.ReadSingle(); }\r
49 \r
50             v.Idx   = BitConverter.ToUInt32(idx, 0);\r
51         }\r
52 \r
53         Encoding    enc = Encoding.GetEncoding("Shift_JIS");\r
54         List<byte>  buf = new List<byte>();\r
55 \r
56         public string ReadString()\r
57         {\r
58             buf.Clear();\r
59 \r
60             for(;;)\r
61             {\r
62                 byte    b   = r.ReadByte();\r
63 \r
64                 if(b == 0)\r
65                     break;\r
66 \r
67                 buf.Add(b);\r
68             }\r
69 \r
70             return enc.GetString(buf.ToArray());\r
71         }\r
72 \r
73         public unsafe Matrix44 ReadMatrix()\r
74         {\r
75             Matrix44    m   = new Matrix44();\r
76             float*      p   = &m.m11;\r
77 \r
78             for(int i= 0; i < 16; ++i)\r
79                 *p++    = r.ReadSingle();\r
80 \r
81             return m;\r
82         }\r
83     }\r
84 }\r