ME3Explorer.Unreal.Classes.SkeletalMesh.GetProperties C# (CSharp) Method

GetProperties() private method

private GetProperties ( int n ) : TreeNode
n int
return System.Windows.Forms.TreeNode
        private TreeNode GetProperties(int n)
        {
            TreeNode res = new TreeNode("Properties");
            
            int pos = 0x00;
            try
            {
                byte[] data = Owner.Exports[n].Data;
                int test = BitConverter.ToInt32(data, 8);
                if (test == 0)
                    pos = 0x04;
                else
                    pos = 0x08;
                if ((Flags & 0x02000000) != 0)
                    pos = 0x1A;
                while (true)
                {
                    int idxname = BitConverter.ToInt32(data, pos);
                    if (Owner.getNameEntry(idxname) == "None" || Owner.getNameEntry(idxname) == "")
                        break;
                    int idxtype = BitConverter.ToInt32(data, pos + 8);
                    int size = BitConverter.ToInt32(data, pos + 16);
                    if (size == 0)
                        size = 1;   //boolean fix
                    if (Owner.getNameEntry(idxtype) == "StructProperty")
                        size += 8;
                    if (Owner.getNameEntry(idxtype) == "ByteProperty")
                        size += 8;
                    string s = pos.ToString("X8") + " " + Owner.getNameEntry(idxname) + " (" + Owner.getNameEntry(idxtype) + ") : ";
                    switch (Owner.getNameEntry(idxtype))
                    {
                        case "ObjectProperty":
                        case "IntProperty":
                            int val = BitConverter.ToInt32(data, pos + 24);
                            s += val.ToString();
                            break;
                        case "NameProperty":
                        case "StructProperty":
                            int name = BitConverter.ToInt32(data, pos + 24);
                            s += Owner.getNameEntry(name);
                            break;
                        case "FloatProperty":
                            float f = BitConverter.ToSingle(data, pos + 24);
                            s += f.ToString();
                            break;
                        case "BoolProperty":
                            s += (data[pos + 24] == 1).ToString();
                            break;
                        case "StrProperty":
                            int len = BitConverter.ToInt32(data, pos + 24);
                            for (int i = 0; i < len - 1; i++)
                                s += (char)data[pos + 28 + i];
                            break;
                    }
                    res.Nodes.Add(s);
                    pos += 24 + size;
                    if (pos > data.Length)
                    {
                        pos -= 24 + size;
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            res.Nodes.Add(pos.ToString("X8") + " None");
            return res;
        }