2 using System.Collections.Generic;
\r
8 public class TSOWriter
\r
10 public static void WriteHeader(BinaryWriter bw)
\r
12 bw.Write(0x314F5354);
\r
15 public static void Write(BinaryWriter bw, string s)
\r
17 foreach(byte i in Encoding.Default.GetBytes(s))
\r
23 public static void Write(BinaryWriter bw, string[] s)
\r
25 int n = s[s.Length-1] == "" ? s.Length-1 : s.Length;
\r
29 for(int i= 0; i < n; ++i)
\r
33 public static void Write(BinaryWriter bw, TSONode[] items)
\r
35 bw.Write(items.Length);
\r
37 foreach(var i in items)
\r
40 bw.Write(items.Length);
\r
42 foreach(var i in items)
\r
43 Write(bw, i.Matrix);
\r
46 public static void Write(BinaryWriter bw, TSONode item)
\r
48 Write(bw, item.Name);
\r
51 public static void Write(BinaryWriter bw, Matrix44 item)
\r
53 bw.Write(item.M11); bw.Write(item.M12); bw.Write(item.M13); bw.Write(item.M14);
\r
54 bw.Write(item.M21); bw.Write(item.M22); bw.Write(item.M23); bw.Write(item.M24);
\r
55 bw.Write(item.M31); bw.Write(item.M32); bw.Write(item.M33); bw.Write(item.M34);
\r
56 bw.Write(item.M41); bw.Write(item.M42); bw.Write(item.M43); bw.Write(item.M44);
\r
59 public static void Write(BinaryWriter bw, TSOTex[] items)
\r
61 bw.Write(items.Length);
\r
63 foreach(var i in items)
\r
67 public static void Write(BinaryWriter bw, TSOTex item)
\r
69 Write(bw, item.name);
\r
70 Write(bw, item.File);
\r
71 bw.Write(item.Width);
\r
72 bw.Write(item.Height);
\r
73 bw.Write(item.Depth);
\r
74 bw.Write(item.data, 0, item.data.Length);
\r
77 public static void Write(BinaryWriter bw, TSOEffect[] items)
\r
79 bw.Write(items.Length);
\r
81 foreach(var i in items)
\r
85 public static void Write(BinaryWriter bw, TSOEffect item)
\r
87 Write(bw, item.Name);
\r
88 Write(bw, item.Code.Split('\n'));
\r
91 public static void Write(BinaryWriter bw, TSOMaterial[] items)
\r
93 bw.Write(items.Length);
\r
95 foreach(var i in items)
\r
99 public static void Write(BinaryWriter bw, TSOMaterial item)
\r
101 Write(bw, item.Name);
\r
102 Write(bw, item.File);
\r
103 Write(bw, item.Code.Split('\n'));
\r
106 public static void Write(BinaryWriter bw, TSOMesh[] items)
\r
108 bw.Write(items.Length);
\r
110 foreach(var i in items)
\r
114 public static void Write(BinaryWriter bw, TSOMesh item)
\r
116 Write(bw, item.Name);
\r
117 Write(bw, item.Matrix);
\r
119 Write(bw, item.sub);
\r
122 public static void Write(BinaryWriter bw, TSOSubMesh[] items)
\r
124 bw.Write(items.Length);
\r
126 foreach(var i in items)
\r
130 public static void Write(BinaryWriter bw, TSOSubMesh item)
\r
132 bw.Write(item.spec);
\r
133 bw.Write(item.numbones);
\r
135 foreach(int k in item.bones)
\r
138 bw.Write(item.numvertices);
\r
140 foreach(Vertex k in item.vertices)
\r
144 public unsafe static void Write(BinaryWriter bw, Vertex v)
\r
147 byte* idx = (byte*)(&idx0);
\r
148 List<int> idxs = new List<int>(4);
\r
149 List<float> wgts = new List<float>(4);
\r
151 if(v.Wgt.x > 0) { idxs.Add(idx[0]); wgts.Add(v.Wgt.x); }
\r
152 if(v.Wgt.y > 0) { idxs.Add(idx[1]); wgts.Add(v.Wgt.y); }
\r
153 if(v.Wgt.z > 0) { idxs.Add(idx[2]); wgts.Add(v.Wgt.z); }
\r
154 if(v.Wgt.w > 0) { idxs.Add(idx[3]); wgts.Add(v.Wgt.w); }
\r
156 bw.Write(v.Pos.X); bw.Write(v.Pos.Y); bw.Write(v.Pos.Z);
\r
157 bw.Write(v.Nrm.X); bw.Write(v.Nrm.Y); bw.Write(v.Nrm.Z);
\r
158 bw.Write(v.Tex.X); bw.Write(v.Tex.Y);
\r
160 bw.Write(wgts.Count);
\r
162 for(int i= 0, n= idxs.Count; i < n; ++i)
\r