2 using System.Collections.Generic;
\r
5 using Microsoft.DirectX;
\r
6 using Microsoft.DirectX.Direct3D;
\r
7 using tso2mqo.Extensions;
\r
11 public class TSOWriter
\r
13 public static void WriteHeader(BinaryWriter bw)
\r
15 bw.Write(0x314F5354);
\r
18 public static void Write(BinaryWriter bw, string s)
\r
20 foreach(byte i in Encoding.Default.GetBytes(s))
\r
26 public static void Write(BinaryWriter bw, string[] s)
\r
28 int n = s[s.Length-1] == "" ? s.Length-1 : s.Length;
\r
32 for(int i= 0; i < n; ++i)
\r
36 public static void Write(BinaryWriter bw, TSONode[] items)
\r
38 bw.Write(items.Length);
\r
40 foreach(var i in items)
\r
43 bw.Write(items.Length);
\r
45 foreach (var i in items)
\r
47 Matrix m = i.Matrix;
\r
52 public static void Write(BinaryWriter bw, TSONode item)
\r
54 Write(bw, item.Name);
\r
57 public static void Write(BinaryWriter bw, TSOTex[] items)
\r
59 bw.Write(items.Length);
\r
61 foreach(var i in items)
\r
65 public static void Write(BinaryWriter bw, TSOTex item)
\r
67 Write(bw, item.name);
\r
68 Write(bw, item.file);
\r
69 bw.Write(item.Width);
\r
70 bw.Write(item.Height);
\r
71 bw.Write(item.Depth);
\r
72 bw.Write(item.data, 0, item.data.Length);
\r
75 public static void Write(BinaryWriter bw, TSOEffect[] items)
\r
77 bw.Write(items.Length);
\r
79 foreach(var i in items)
\r
83 public static void Write(BinaryWriter bw, TSOEffect item)
\r
85 Write(bw, item.Name);
\r
86 Write(bw, item.Code.Split('\n'));
\r
89 public static void Write(BinaryWriter bw, TSOMaterial[] items)
\r
91 bw.Write(items.Length);
\r
93 foreach(var i in items)
\r
97 public static void Write(BinaryWriter bw, TSOMaterial item)
\r
99 Write(bw, item.Name);
\r
100 Write(bw, item.File);
\r
101 Write(bw, item.Code.Split('\n'));
\r
104 public static void Write(BinaryWriter bw, TSOMesh[] items)
\r
106 bw.Write(items.Length);
\r
108 foreach(var i in items)
\r
112 public static void Write(BinaryWriter bw, TSOMesh item)
\r
114 Write(bw, item.Name);
\r
115 Matrix m = item.Matrix;
\r
118 Write(bw, item.sub);
\r
121 public static void Write(BinaryWriter bw, TSOSubMesh[] items)
\r
123 bw.Write(items.Length);
\r
125 foreach(var i in items)
\r
129 public static void Write(BinaryWriter bw, TSOSubMesh item)
\r
131 bw.Write(item.spec);
\r
132 bw.Write(item.numbones);
\r
134 foreach(int k in item.bones)
\r
137 bw.Write(item.numvertices);
\r
139 foreach(Vertex k in item.vertices)
\r
143 public unsafe static void Write(BinaryWriter bw, Vertex v)
\r
146 byte* idx = (byte*)(&idx0);
\r
147 List<int> idxs = new List<int>(4);
\r
148 List<float> wgts = new List<float>(4);
\r
150 if(v.Wgt.X > 0) { idxs.Add(idx[0]); wgts.Add(v.Wgt.X); }
\r
151 if(v.Wgt.Y > 0) { idxs.Add(idx[1]); wgts.Add(v.Wgt.Y); }
\r
152 if(v.Wgt.Z > 0) { idxs.Add(idx[2]); wgts.Add(v.Wgt.Z); }
\r
153 if(v.Wgt.W > 0) { idxs.Add(idx[3]); wgts.Add(v.Wgt.W); }
\r
155 bw.Write(ref v.Pos);
\r
156 bw.Write(ref v.Nrm);
\r
157 bw.Write(v.Tex.X); bw.Write(v.Tex.Y);
\r
159 bw.Write(wgts.Count);
\r
161 for(int i= 0, n= idxs.Count; i < n; ++i)
\r