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(" };"); }
public void ToStructVariables(TextWriter writer, LandTableFormat format, List <string> labels, string[] textures = null, bool decomp = false) { 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); if (!decomp) { COL[i].Model.ToStructVariables(writer, format == LandTableFormat.SADX, labels, textures); } else { writer.WriteLine("extern NJS_OBJECT " + COL[i].Model.Name + "[1];"); } } } for (int i = 0; i < Anim.Count; i++) { if (!labels.Contains(Anim[i].Model.Name)) { labels.Add(Anim[i].Model.Name); if (!decomp) { Anim[i].Model.ToStructVariables(writer, format == LandTableFormat.SADX, labels, textures); } else { writer.WriteLine("extern NJS_OBJECT " + Anim[i].Model.Name + "[1];"); } if (!decomp) { writer.WriteLine(); } } if (!labels.Contains(Anim[i].Animation.Name)) { if (!decomp) { Anim[i].Animation.ToStructVariables(writer, labels); } else { writer.WriteLine("extern NJS_ACTION " + Anim[i].Animation.ActionName + "[1];"); } labels.Add(Anim[i].Animation.Name); if (!decomp) { writer.WriteLine(); } } } writer.WriteLine(); if (!labels.Contains(COLName)) { labels.Add(COLName); writer.Write("_OBJ_LANDENTRY "); writer.Write(COLName); writer.WriteLine("[] = {"); List <string> lines = new List <string>(COL.Count); foreach (COL item in COL) { lines.Add(item.ToStruct(format, decomp)); } 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("_OBJ_MOTLANDENTRY "); writer.Write(AnimName); writer.WriteLine("[] = {"); List <string> lines = new List <string>(Anim.Count); foreach (GeoAnimData item in Anim) { lines.Add(item.ToStruct(decomp)); } writer.WriteLine("\t" + string.Join("," + Environment.NewLine + "\t", lines.ToArray())); writer.WriteLine("};"); writer.WriteLine(); } writer.Write("_OBJ_LANDTABLE "); writer.Write(Name); writer.Write(" = { "); if (decomp) { writer.Write(COL.Count.ToString() + ", "); } else { writer.Write("LengthOfArray<int16_t>(" + COLName + "), "); } switch (format) { case LandTableFormat.SA1: case LandTableFormat.SADX: if (decomp) { writer.Write(Anim.Count); } else { writer.Write(Anim.Count > 0 ? "LengthOfArray<int16_t>(" + AnimName + ")" : "0"); } writer.Write(", "); writer.Write("0x" + Attributes.ToString("X")); writer.Write(", "); writer.Write("0x" + Flags.ToString("X")); writer.Write(", "); writer.Write(FarClipping.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(BinaryFilename.ToCHex()); writer.Write(", "); writer.Write(BinaryLoadFunction.ToCHex()); break; case LandTableFormat.SA2: writer.Write(cnk.Count); writer.Write(", 0, 0, 0, 0, "); writer.Write(FarClipping.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(" };"); }