public string ToStruct(LandTableFormat format) { StringBuilder result = new StringBuilder("{ "); result.Append(Bounds.ToStruct()); result.Append(", "); switch (format) { case LandTableFormat.SA1: case LandTableFormat.SADX: result.Append(Unknown1.ToCHex()); result.Append(", "); result.Append(Unknown2.ToCHex()); result.Append(", "); result.Append(Model != null ? "&" + Model.Name : "NULL"); result.Append(", "); result.AppendFormat(Unknown3.ToCHex()); break; case LandTableFormat.SA2: result.Append(Model != null ? "&" + Model.Name : "NULL"); result.Append(", "); result.Append(Unknown2.ToCHex()); result.Append(", "); result.Append(Unknown3.ToCHex()); break; } result.Append(", "); result.AppendFormat(Flags.ToCHex()); result.Append(" }"); return(result.ToString()); }
public void ToStructVariables(TextWriter writer, LandTableFormat format, List <string> labels, string[] textures = null) { List <COL> cnk = new List <COL>(); List <COL> bas = new List <COL>(); foreach (COL item in COL) { if (item.Model.Attach is BasicAttach) { bas.Add(item); } else { cnk.Add(item); } } COL.Clear(); COL.AddRange(cnk); COL.AddRange(bas); for (int i = 0; i < COL.Count; i++) { if (!labels.Contains(COL[i].Model.Name)) { labels.Add(COL[i].Model.Name); COL[i].Model.ToStructVariables(writer, format == LandTableFormat.SADX, labels, textures); } } for (int i = 0; i < Anim.Count; i++) { string aniid = Anim[i].Animation.Name.MakeIdentifier(); if (!labels.Contains(Anim[i].Model.Name)) { labels.Add(Anim[i].Model.Name); Anim[i].Model.ToStructVariables(writer, format == LandTableFormat.SADX, labels, textures); } if (!labels.Contains(aniid)) { labels.Add(aniid); Anim[i].Animation.ToStructVariables(writer); writer.Write("NJS_ACTION action_"); writer.Write(aniid); writer.Write(" = { &"); writer.Write(Anim[i].Model.Name); writer.Write(", &"); writer.Write(aniid); writer.WriteLine(" };"); writer.WriteLine(); } } if (!labels.Contains(COLName)) { labels.Add(COLName); writer.Write("COL "); writer.Write(COLName); writer.WriteLine("[] = {"); List <string> lines = new List <string>(COL.Count); foreach (COL item in COL) { lines.Add(item.ToStruct(format)); } writer.WriteLine("\t" + string.Join("," + Environment.NewLine + "\t", lines.ToArray())); writer.WriteLine("};"); writer.WriteLine(); } if (Anim.Count > 0 && !labels.Contains(AnimName)) { labels.Add(AnimName); writer.Write("GeoAnimData "); writer.Write(AnimName); writer.WriteLine("[] = {"); List <string> lines = new List <string>(Anim.Count); foreach (GeoAnimData item in Anim) { lines.Add(item.ToStruct()); } writer.WriteLine("\t" + string.Join("," + Environment.NewLine + "\t", lines.ToArray())); writer.WriteLine("};"); writer.WriteLine(); } writer.Write("LandTable "); writer.Write(Name); writer.Write(" = { LengthOfArray<int16_t>("); writer.Write(COLName); writer.Write("), "); switch (format) { case LandTableFormat.SA1: case LandTableFormat.SADX: writer.Write(Anim.Count > 0 ? "LengthOfArray<int16_t>(" + AnimName + ")" : "0"); writer.Write(", "); writer.Write(Flags.ToCHex()); writer.Write(", "); writer.Write(Unknown1.ToC()); writer.Write(", "); writer.Write(COLName); writer.Write(", "); writer.Write(Anim.Count > 0 ? AnimName : "NULL"); writer.Write(", "); writer.Write(TextureFileName.ToC()); writer.Write(", (NJS_TEXLIST *)"); writer.Write(TextureList.ToCHex()); writer.Write(", "); writer.Write(Unknown2.ToCHex()); writer.Write(", "); writer.Write(Unknown3.ToCHex()); break; case LandTableFormat.SA2: writer.Write(cnk.Count); writer.Write(", 0, 0, 0, 0, "); writer.Write(Unknown1.ToC()); writer.Write(", "); writer.Write(COLName); writer.Write(", "); writer.Write(Anim.Count > 0 ? AnimName : "NULL"); writer.Write(", "); writer.Write(TextureFileName.ToC()); writer.Write(", (NJS_TEXLIST *)"); writer.Write(TextureList.ToCHex()); break; } writer.WriteLine(" };"); }