2 using System.Collections.Generic;
\r
5 using Microsoft.DirectX;
\r
6 using Microsoft.DirectX.Direct3D;
\r
10 public class TSOWriter
\r
12 public static void WriteHeader(BinaryWriter bw)
\r
14 bw.Write(0x314F5354);
\r
17 public static void Write(BinaryWriter bw, string s)
\r
19 foreach(byte i in Encoding.Default.GetBytes(s))
\r
25 public static void Write(BinaryWriter bw, string[] s)
\r
27 int n = s[s.Length-1] == "" ? s.Length-1 : s.Length;
\r
31 for(int i= 0; i < n; ++i)
\r
35 public static void Write(BinaryWriter bw, TSONode[] items)
\r
37 bw.Write(items.Length);
\r
39 foreach(var i in items)
\r
42 bw.Write(items.Length);
\r
44 foreach(var i in items)
\r
45 Write(bw, i.Matrix);
\r
48 public static void Write(BinaryWriter bw, TSONode item)
\r
50 Write(bw, item.Name);
\r
53 public static void Write(BinaryWriter bw, Matrix item)
\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
61 public static void Write(BinaryWriter bw, TSOTex[] items)
\r
63 bw.Write(items.Length);
\r
65 foreach(var i in items)
\r
69 public static void Write(BinaryWriter bw, TSOTex item)
\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
79 public static void Write(BinaryWriter bw, TSOEffect[] items)
\r
81 bw.Write(items.Length);
\r
83 foreach(var i in items)
\r
87 public static void Write(BinaryWriter bw, TSOEffect item)
\r
89 Write(bw, item.Name);
\r
90 Write(bw, item.Code.Split('\n'));
\r
93 public static void Write(BinaryWriter bw, TSOMaterial[] items)
\r
95 bw.Write(items.Length);
\r
97 foreach(var i in items)
\r
101 public static void Write(BinaryWriter bw, TSOMaterial item)
\r
103 Write(bw, item.Name);
\r
104 Write(bw, item.File);
\r
105 Write(bw, item.Code.Split('\n'));
\r
108 public static void Write(BinaryWriter bw, TSOMesh[] items)
\r
110 bw.Write(items.Length);
\r
112 foreach(var i in items)
\r
116 public static void Write(BinaryWriter bw, TSOMesh item)
\r
118 Write(bw, item.Name);
\r
119 Write(bw, item.Matrix);
\r
121 Write(bw, item.sub);
\r
124 public static void Write(BinaryWriter bw, TSOSubMesh[] items)
\r
126 bw.Write(items.Length);
\r
128 foreach(var i in items)
\r
132 public static void Write(BinaryWriter bw, TSOSubMesh item)
\r
134 bw.Write(item.spec);
\r
135 bw.Write(item.numbones);
\r
137 foreach(int k in item.bones)
\r
140 bw.Write(item.numvertices);
\r
142 foreach(Vertex k in item.vertices)
\r
146 public unsafe static void Write(BinaryWriter bw, Vertex v)
\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
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
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
162 bw.Write(wgts.Count);
\r
164 for(int i= 0, n= idxs.Count; i < n; ++i)
\r