Example #1
0
 private void SetPane(GroupPane pane, GroupPane parentPane)
 {
     if (parentPane != null)
     {
         parentPane.Childern.Add(pane);
         pane.Parent = parentPane;
     }
 }
Example #2
0
 private void GetGroupPanes(GroupPane pane, ref List <GroupPane> panes)
 {
     panes.Add(pane);
     foreach (GroupPane childPane in pane.Childern)
     {
         GetGroupPanes(childPane, ref panes);
     }
 }
Example #3
0
        private void WriteGroupPanes(FileWriter writer, GroupPane pane, LayoutHeader header, ref int sectionCount)
        {
            WriteSection(writer, pane.Signature, pane, () => pane.Write(writer, header));
            sectionCount++;

            if (pane.HasChildern)
            {
                sectionCount += 2;

                //Write start of children section
                WriteSection(writer, "grs1", null);

                foreach (GroupPane child in pane.Childern)
                {
                    WriteGroupPanes(writer, child, header, ref sectionCount);
                }

                //Write pae1 of children section
                WriteSection(writer, "gre1", null);
            }
        }
Example #4
0
        private void LoadGroup(GroupPane pane, TreeNode parent = null)
        {
            var paneNode = new TreeNode()
            {
                Text = pane.Name, Tag = pane
            };

            if (parent == null)
            {
                treeView1.Nodes.Add(paneNode);
            }
            else
            {
                parent.Nodes.Add(paneNode);
            }

            foreach (var childPane in pane.Childern)
            {
                LoadGroup(childPane, paneNode);
            }
        }
Example #5
0
        public void Read(FileReader reader, BFLYT bflyt)
        {
            PaneLookup.Clear();
            LayoutInfo   = new LYT1();
            TextureList  = new TXL1();
            MaterialList = new MAT1();
            FontList     = new FNL1();
            RootPane     = new PAN1();
            RootGroup    = new GRP1();
            UserData     = new USD1();
            FileInfo     = bflyt;

            reader.SetByteOrder(true);
            reader.ReadSignature(4, Magic);
            ByteOrderMark = reader.ReadUInt16();
            reader.CheckByteOrderMark(ByteOrderMark);
            HeaderSize = reader.ReadUInt16();
            Version    = reader.ReadUInt32();
            SetVersionInfo();
            uint   FileSize     = reader.ReadUInt32();
            ushort sectionCount = reader.ReadUInt16();

            reader.ReadUInt16(); //Padding

            IsBigEndian = reader.ByteOrder == Syroot.BinaryData.ByteOrder.BigEndian;

            if (!IsBigEndian)
            {
                if (VersionMajor == 3)
                {
                    TextureManager.Platform = TextureManager.PlatformType.ThreeDS;
                }
                else
                {
                    TextureManager.Platform = TextureManager.PlatformType.Switch;
                }
            }
            else
            {
                TextureManager.Platform = TextureManager.PlatformType.WiiU;
            }

            TextureManager.LayoutFile = this;

            bool setRoot      = false;
            bool setGroupRoot = false;

            BasePane currentPane = null;
            BasePane parentPane  = null;

            GroupPane currentGroupPane = null;
            GroupPane parentGroupPane  = null;

            reader.SeekBegin(HeaderSize);
            for (int i = 0; i < sectionCount; i++)
            {
                long pos = reader.Position;

                string Signature   = reader.ReadString(4, Encoding.ASCII);
                uint   SectionSize = reader.ReadUInt32();

                SectionCommon section = new SectionCommon(Signature);
                switch (Signature)
                {
                case "lyt1":
                    LayoutInfo = new LYT1(reader);
                    break;

                case "txl1":
                    TextureList = new TXL1(reader, this);
                    break;

                case "fnl1":
                    FontList = new FNL1(reader, this);
                    break;

                case "mat1":
                    MaterialList = new MAT1(reader, this);
                    break;

                case "pan1":
                    var panel = new PAN1(reader, this);
                    AddPaneToTable(panel);
                    if (!setRoot)
                    {
                        RootPane = panel;
                        setRoot  = true;
                    }

                    SetPane(panel, parentPane);
                    currentPane = panel;
                    break;

                case "pic1":
                    var picturePanel = new PIC1(reader, this);
                    AddPaneToTable(picturePanel);

                    SetPane(picturePanel, parentPane);
                    currentPane = picturePanel;
                    break;

                case "txt1":
                    var textPanel = new TXT1(reader, this);
                    AddPaneToTable(textPanel);

                    SetPane(textPanel, parentPane);
                    currentPane = textPanel;
                    break;

                case "bnd1":
                    var boundsPanel = new BND1(reader, this);
                    AddPaneToTable(boundsPanel);

                    SetPane(boundsPanel, parentPane);
                    currentPane = boundsPanel;
                    break;

                case "prt1":
                    var partsPanel = new PRT1(reader, this);
                    AddPaneToTable(partsPanel);

                    SetPane(partsPanel, parentPane);
                    currentPane = partsPanel;
                    break;

                case "wnd1":
                    var windowPanel = new WND1(reader, this);
                    AddPaneToTable(windowPanel);

                    SetPane(windowPanel, parentPane);
                    currentPane = windowPanel;
                    break;

                case "scr1":
                    var scissorPane = new SCR1(reader, this);
                    AddPaneToTable(scissorPane);

                    SetPane(scissorPane, parentPane);
                    currentPane = scissorPane;
                    break;

                case "ali1":
                    var alignmentPane = new ALI1(reader, this);
                    AddPaneToTable(alignmentPane);

                    SetPane(alignmentPane, parentPane);
                    currentPane = alignmentPane;
                    break;

                case "pas1":
                    if (currentPane != null)
                    {
                        parentPane = currentPane;
                    }
                    break;

                case "pae1":
                    if (parentPane != null)
                    {
                        currentPane = parentPane;
                    }
                    parentPane = currentPane.Parent;
                    break;

                case "grp1":
                    var groupPanel = new GRP1(reader, this);

                    if (!setGroupRoot)
                    {
                        RootGroup    = groupPanel;
                        setGroupRoot = true;
                    }

                    SetPane(groupPanel, parentGroupPane);
                    currentGroupPane = groupPanel;
                    break;

                case "grs1":
                    if (currentGroupPane != null)
                    {
                        parentGroupPane = currentGroupPane;
                    }
                    break;

                case "gre1":
                    currentGroupPane = parentGroupPane;
                    parentGroupPane  = currentGroupPane.Parent;
                    break;

                /*   case "cnt1":
                 *     Container = new CNT1(reader, this);
                 *     break;*/
                case "usd1":
                    long dataPos = reader.Position;

                    if (currentPane != null)
                    {
                        ((PAN1)currentPane).UserData = new USD1(reader, this);

                        reader.SeekBegin(dataPos);
                        ((PAN1)currentPane).UserData.Data = reader.ReadBytes((int)SectionSize - 8);
                    }
                    else
                    {
                        //User data before panes
                        UserData = new USD1(reader, this);

                        reader.SeekBegin(dataPos);
                        UserData.Data = reader.ReadBytes((int)SectionSize - 8);
                    }
                    break;

                //If the section is not supported store the raw bytes
                default:
                    section.Data = reader.ReadBytes((int)SectionSize - 8);
                    UnknownSections.Add(section);
                    Console.WriteLine("Unknown section!" + Signature);
                    break;
                }

                section.SectionSize = SectionSize;
                reader.SeekBegin(pos + SectionSize);
            }
        }
Example #6
0
            public void Read(FileReader reader, BRLYT brlyt)
            {
                PaneLookup.Clear();
                LayoutInfo   = new LYT1();
                TextureList  = new TXL1();
                MaterialList = new MAT1();
                FontList     = new FNL1();
                RootPane     = new PAN1();
                RootGroup    = new GRP1();

                FileInfo = brlyt;

                reader.SetByteOrder(true);
                Magic = reader.ReadSignature(4);
                if (Magic == "TYLR")
                {
                    reader.ReverseMagic = true;
                }
                ByteOrderMark = reader.ReadUInt16();
                reader.CheckByteOrderMark(ByteOrderMark);
                Version = reader.ReadUInt16();
                uint FileSize = reader.ReadUInt32();

                HeaderSize = reader.ReadUInt16();
                ushort sectionCount = reader.ReadUInt16();

                IsBigEndian = reader.ByteOrder == Syroot.BinaryData.ByteOrder.BigEndian;
                TextureManager.LayoutFile = this;
                TextureManager.Platform   = TextureManager.PlatformType.Wii;

                bool setRoot      = false;
                bool setGroupRoot = false;

                BasePane currentPane = null;
                BasePane parentPane  = null;

                GroupPane currentGroupPane = null;
                GroupPane parentGroupPane  = null;

                reader.SeekBegin(HeaderSize);
                for (int i = 0; i < sectionCount; i++)
                {
                    long pos = reader.Position;

                    string Signature   = reader.ReadSignature(4);
                    uint   SectionSize = reader.ReadUInt32();

                    SectionCommon section = new SectionCommon(Signature);
                    switch (Signature)
                    {
                    case "lyt1":
                        LayoutInfo = new LYT1(reader);
                        break;

                    case "txl1":
                        TextureList = new TXL1(reader, this);
                        break;

                    case "fnl1":
                        FontList = new FNL1(reader, this);
                        break;

                    case "mat1":
                        MaterialList = new MAT1(reader, this);
                        break;

                    case "pan1":
                        var panel = new PAN1(reader, this);
                        AddPaneToTable(panel);
                        if (!setRoot)
                        {
                            RootPane = panel;
                            setRoot  = true;
                        }

                        SetPane(panel, parentPane);
                        currentPane = panel;
                        break;

                    case "pic1":
                        var picturePanel = new PIC1(reader, this);
                        AddPaneToTable(picturePanel);

                        SetPane(picturePanel, parentPane);
                        currentPane = picturePanel;
                        break;

                    case "txt1":
                        var textPanel = new TXT1(reader, this);
                        AddPaneToTable(textPanel);

                        SetPane(textPanel, parentPane);
                        currentPane = textPanel;
                        break;

                    case "bnd1":
                        var boundsPanel = new BND1(reader, this);
                        AddPaneToTable(boundsPanel);

                        SetPane(boundsPanel, parentPane);
                        currentPane = boundsPanel;
                        break;

                    case "wnd1":
                        var windowPanel = new WND1(this, reader);
                        AddPaneToTable(windowPanel);

                        SetPane(windowPanel, parentPane);
                        currentPane = windowPanel;
                        break;

                    case "cnt1":
                        break;

                    case "pas1":
                        if (currentPane != null)
                        {
                            parentPane = currentPane;
                        }
                        break;

                    case "pae1":
                        currentPane = parentPane;
                        parentPane  = currentPane.Parent;
                        break;

                    case "grp1":
                        var groupPanel = new GRP1(reader, this);

                        if (!setGroupRoot)
                        {
                            RootGroup    = groupPanel;
                            setGroupRoot = true;
                        }

                        SetPane(groupPanel, parentGroupPane);
                        currentGroupPane = groupPanel;
                        break;

                    case "grs1":
                        if (currentGroupPane != null)
                        {
                            parentGroupPane = currentGroupPane;
                        }
                        break;

                    case "gre1":
                        currentGroupPane = parentGroupPane;
                        parentGroupPane  = currentGroupPane.Parent;
                        break;

                    case "usd1":
                        break;

                    //If the section is not supported store the raw bytes
                    default:
                        section.Data = reader.ReadBytes((int)SectionSize);
                        break;
                    }

                    section.SectionSize = SectionSize;

                    reader.SeekBegin(pos + SectionSize);
                }
            }