Пример #1
0
        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(" };");
        }
Пример #2
0
        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(" };");
        }