Esempio n. 1
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;

            BasePane currentGroupPane = null;
            BasePane 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);
            }
        }
Esempio n. 2
0
        public PartProperty(FileReader reader, Header header, long StartPosition)
        {
            Name              = reader.ReadString(0x18, true);
            UsageFlag         = reader.ReadByte();
            BasicUsageFlag    = reader.ReadByte();
            MaterialUsageFlag = reader.ReadByte();
            reader.ReadByte(); //padding
            uint userDataOffset = 0;

            uint propertyOffset = reader.ReadUInt32();

            if (header.VersionMajor >= 8)
            {
                Unknown = reader.ReadUInt32();
            }
            else
            {
                userDataOffset = reader.ReadUInt32();
            }

            uint panelInfoOffset = reader.ReadUInt32();

            long pos = reader.Position;

            if (propertyOffset != 0)
            {
                reader.SeekBegin(StartPosition + propertyOffset);

                long   startPos    = reader.Position;
                string signtature  = reader.ReadString(4, Encoding.ASCII);
                uint   sectionSize = reader.ReadUInt32();

                Console.WriteLine($"signtature " + signtature);

                switch (signtature)
                {
                case "pic1":
                    Property = new PIC1(reader, header);
                    break;

                case "txt1":
                    Property = new TXT1(reader, header);
                    break;

                case "wnd1":
                    Property = new WND1(reader, header);
                    break;

                case "bnd1":
                    Property = new BND1(reader, header);
                    break;

                case "prt1":
                    Property = new PRT1(reader, header);
                    break;

                default:
                    Console.WriteLine("Unknown section! " + signtature);
                    break;
                }
            }
            Console.WriteLine($"userDataOffset {userDataOffset}");
            if (userDataOffset != 0)
            {
                reader.SeekBegin(StartPosition + userDataOffset);
                reader.ReadUInt32(); //magic
                reader.ReadUInt32(); //section size
                UserData = new USD1(reader, header);
            }
            if (panelInfoOffset != 0)
            {
                reader.SeekBegin(StartPosition + panelInfoOffset);
                PaneInfo = reader.ReadBytes(52);
            }

            reader.SeekBegin(pos);
        }