entity.MetaEditor2.MetaEditorControlPage.loadTreeReflexives C# (CSharp) Method

loadTreeReflexives() public method

public loadTreeReflexives ( int metaOffset, object items, bool enabled ) : System.Windows.Forms.TreeNode[]
metaOffset int
items object
enabled bool
return System.Windows.Forms.TreeNode[]
        public TreeNode[] loadTreeReflexives(int metaOffset, object[] items, bool enabled)
        {
            List<TreeNode> tns = new List<TreeNode>();
            foreach (object o in items)
            {
                if (o is IFPIO.Reflexive)
                {
                    IFPIO.Reflexive IFPR = (IFPIO.Reflexive)o;
                    TreeNode tn = new TreeNode(IFPR.name);
                    reflexiveData rd = new reflexiveData();
                    tn.Tag = rd;
                    rd.node = tn;
                    rd.reflexive = IFPR;
                    tn.ForeColor = Color.LightGray;
                    tn.Name = IFPR.name;
                    tn.ToolTipText = "Offset: " + rd.reflexive.offset.ToString();

                    if (enabled)
                    {
                        map.BR.BaseStream.Position = IFPR.offset + metaOffset;
                        rd.chunkCount = map.BR.ReadInt32();
                        if (rd.chunkCount > 0)
                        {
                            rd.chunkSelected = 0;
                            tn.ForeColor = Color.Black;
                            rd.baseOffset = map.BR.ReadInt32() - meta.magic;
                            // Some listings are actually in other tags!
                            // Check [BLOC] "objects\\vehicles\\wraith\\garbage\\wing_boost\\wing_boost"
                            //   > attachments[0] = [BLOC] "objects\\vehicles\\ghost\\garbage\\seat\\seat"
                            rd.inTagNumber = map.Functions.ForMeta.FindMetaByOffset(rd.baseOffset);
                            if (rd.inTagNumber == -1)
                            {
                                tn.ToolTipText = "DATA ERROR! Possibly corrupt data or incorrect plugin.";
                                rd.chunkCount = 0;
                                rd.chunkSelected = -1;
                                continue;
                            }
                            if (rd.inTagNumber == meta.TagIndex)
                                rd.baseOffset -= meta.offset;
                            else
                            {
                                tn.ForeColor = Color.Red;
                                tn.ToolTipText = "Data Source Located in:\n[" + map.MetaInfo.TagType[rd.inTagNumber].ToLower() +
                                                "] " + map.FileNames.Name[rd.inTagNumber].ToLower();
                            }

                        }
                    }
                    tn.Text += " [" + rd.chunkCount.ToString() + "]";

                    refData.Add(rd);

                    // Add if non-existant, otherwise update Text
                    if (rd.inTagNumber == meta.TagIndex)
                        tn.Nodes.AddRange(loadTreeReflexives(meta.offset + rd.baseOffset + rd.chunkSelected * rd.reflexive.chunkSize, IFPR.items, rd.chunkCount != 0));
                    else
                        tn.Nodes.AddRange(loadTreeReflexives(rd.baseOffset + rd.chunkSelected * rd.reflexive.chunkSize, IFPR.items, rd.chunkCount != 0));

                    if (rd.chunkCount != 0 | !cbHideUnused.Checked)
                        tns.Add(tn);
                }
            }
            return tns.ToArray();
        }