OSDN Git Service

renamed namespace
[tdcgexplorer/tso2mqo.git] / TSOWriter.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.IO;\r
4 using System.Text;\r
5 using Microsoft.DirectX;\r
6 using Microsoft.DirectX.Direct3D;\r
7 \r
8 namespace tso2mqo\r
9 {\r
10     public class TSOWriter\r
11     {\r
12         public static void WriteHeader(BinaryWriter bw)\r
13         {\r
14             bw.Write(0x314F5354);\r
15         }\r
16 \r
17         public static void Write(BinaryWriter bw, string s)\r
18         {\r
19             foreach(byte i in Encoding.Default.GetBytes(s))\r
20                 bw.Write(i);\r
21 \r
22             bw.Write((byte)0);\r
23         }\r
24 \r
25         public static void Write(BinaryWriter bw, string[] s)\r
26         {\r
27             int n   = s[s.Length-1] == "" ? s.Length-1 : s.Length;\r
28 \r
29             bw.Write(n);\r
30 \r
31             for(int i= 0; i < n; ++i)\r
32                 Write(bw, s[i]);\r
33         }\r
34 \r
35         public static void Write(BinaryWriter bw, TSONode[] items)\r
36         {\r
37             bw.Write(items.Length);\r
38 \r
39             foreach(var i in items)\r
40                 Write(bw, i);\r
41 \r
42             bw.Write(items.Length);\r
43 \r
44             foreach(var i in items)\r
45                 Write(bw, i.Matrix);\r
46         }\r
47 \r
48         public static void Write(BinaryWriter bw, TSONode item)\r
49         {\r
50             Write(bw, item.Name);\r
51         }\r
52 \r
53         public static void Write(BinaryWriter bw, Matrix item)\r
54         {\r
55             bw.Write(item.M11); bw.Write(item.M12); bw.Write(item.M13); bw.Write(item.M14);\r
56             bw.Write(item.M21); bw.Write(item.M22); bw.Write(item.M23); bw.Write(item.M24);\r
57             bw.Write(item.M31); bw.Write(item.M32); bw.Write(item.M33); bw.Write(item.M34);\r
58             bw.Write(item.M41); bw.Write(item.M42); bw.Write(item.M43); bw.Write(item.M44);\r
59         }\r
60 \r
61         public static void Write(BinaryWriter bw, TSOTex[] items)\r
62         {\r
63             bw.Write(items.Length);\r
64 \r
65             foreach(var i in items)\r
66                 Write(bw, i);\r
67         }\r
68 \r
69         public static void Write(BinaryWriter bw, TSOTex item)\r
70         {\r
71             Write(bw, item.name);\r
72             Write(bw, item.file);\r
73             bw.Write(item.Width);\r
74             bw.Write(item.Height);\r
75             bw.Write(item.Depth);\r
76             bw.Write(item.data, 0, item.data.Length);\r
77         }\r
78 \r
79         public static void Write(BinaryWriter bw, TSOEffect[] items)\r
80         {\r
81             bw.Write(items.Length);\r
82 \r
83             foreach(var i in items)\r
84                 Write(bw, i);\r
85         }\r
86 \r
87         public static void Write(BinaryWriter bw, TSOEffect item)\r
88         {\r
89             Write(bw, item.Name);\r
90             Write(bw, item.Code.Split('\n'));\r
91         }\r
92 \r
93         public static void Write(BinaryWriter bw, TSOMaterial[] items)\r
94         {\r
95             bw.Write(items.Length);\r
96 \r
97             foreach(var i in items)\r
98                 Write(bw, i);\r
99         }\r
100 \r
101         public static void Write(BinaryWriter bw, TSOMaterial item)\r
102         {\r
103             Write(bw, item.Name);\r
104             Write(bw, item.File);\r
105             Write(bw, item.Code.Split('\n'));\r
106         }\r
107 \r
108         public static void Write(BinaryWriter bw, TSOMesh[] items)\r
109         {\r
110             bw.Write(items.Length);\r
111 \r
112             foreach(var i in items)\r
113                 Write(bw, i);\r
114         }\r
115 \r
116         public static void Write(BinaryWriter bw, TSOMesh item)\r
117         {\r
118             Write(bw, item.Name);\r
119             Write(bw, item.Matrix);\r
120             bw.Write(1);\r
121             Write(bw, item.sub);\r
122         }\r
123 \r
124         public static void Write(BinaryWriter bw, TSOSubMesh[] items)\r
125         {\r
126             bw.Write(items.Length);\r
127 \r
128             foreach(var i in items)\r
129                 Write(bw, i);\r
130         }\r
131 \r
132         public static void Write(BinaryWriter bw, TSOSubMesh item)\r
133         {\r
134             bw.Write(item.spec);\r
135             bw.Write(item.numbones);\r
136 \r
137             foreach(int k in item.bones)\r
138                 bw.Write(k);\r
139 \r
140             bw.Write(item.numvertices);\r
141 \r
142             foreach(Vertex k in item.vertices)\r
143                 Write(bw, k);\r
144         }\r
145 \r
146         public unsafe static void Write(BinaryWriter bw, Vertex v)\r
147         {\r
148             uint        idx0    = v.Idx;\r
149             byte*       idx     = (byte*)(&idx0);\r
150             List<int>   idxs    = new List<int>(4);\r
151             List<float> wgts    = new List<float>(4);\r
152 \r
153             if(v.Wgt.X > 0) { idxs.Add(idx[0]); wgts.Add(v.Wgt.X); }\r
154             if(v.Wgt.Y > 0) { idxs.Add(idx[1]); wgts.Add(v.Wgt.Y); }\r
155             if(v.Wgt.Z > 0) { idxs.Add(idx[2]); wgts.Add(v.Wgt.Z); }\r
156             if(v.Wgt.W > 0) { idxs.Add(idx[3]); wgts.Add(v.Wgt.W); }\r
157 \r
158             bw.Write(v.Pos.X); bw.Write(v.Pos.Y); bw.Write(v.Pos.Z);\r
159             bw.Write(v.Nrm.X); bw.Write(v.Nrm.Y); bw.Write(v.Nrm.Z);\r
160             bw.Write(v.Tex.X); bw.Write(v.Tex.Y);\r
161 \r
162             bw.Write(wgts.Count);\r
163 \r
164             for(int i= 0, n= idxs.Count; i < n; ++i)\r
165             {\r
166                 bw.Write(idxs[i]);\r
167                 bw.Write(wgts[i]);\r
168             }\r
169         }\r
170     }\r
171 }\r