Beispiel #1
0
        public void LoadLBD(string lbdPath)
        {
            Logger.Log()(LogLevel.INFO, $"Loading LBD from: {lbdPath}");

            LBD lbd;

            using (BinaryReader br = new BinaryReader(File.Open(lbdPath, FileMode.Open)))
            {
                lbd = new LBD(br);
            }

            Logger.Log()(LogLevel.INFO, "Successfully loaded LBD");

            LBDDocument document = CreateDocument(lbd);

            _treeController.PopulateTreeWithDocument(document, Path.GetFileName(lbdPath));
        }
Beispiel #2
0
        private MeshListTreeNode createLBDNode(string name, LBDDocument lbdDoc)
        {
            MeshListTreeNode rootNode = new MeshListTreeNode(name, lbdDoc.TileLayout, contextMenu: new ContextMenu(
                                                                 new Dictionary <string, Action>
            {
                {
                    "Export as LBD",
                    () =>
                    {
                        _exportController.OpenDialog(
                            filePath => { _exportController.ExportOriginal(lbdDoc.Document, filePath); }, ".lbd");
                    }
                },
                {
                    "Export as OBJ",
                    () =>
                    {
                        _exportController.OpenDialog(
                            filePath => { _exportController.ExportOBJ(lbdDoc.TileLayout, filePath); }, ".obj");
                    }
                },
                {
                    "Export as PLY",
                    () =>
                    {
                        _exportController.OpenDialog(
                            filePath => { _exportController.ExportPLY(lbdDoc.TileLayout, filePath); }, ".ply");
                    }
                }
            }));

            TreeNode tilesNode = createTMDNode("Tiles", lbdDoc.TilesTMD);

            rootNode.AddNode(tilesNode);

            TreeNode tileInfoNode = new TreeNode("Tile info");

            rootNode.AddNode(tileInfoNode);
            int tileNo = 0;
            int i      = 0;

            foreach (LBDTile tile in lbdDoc.Document.TileLayout)
            {
                if (tile.DrawTile)
                {
                    int             x        = tileNo / lbdDoc.Document.Header.TileWidth;
                    int             y        = tileNo % lbdDoc.Document.Header.TileWidth;
                    var             tileMesh = lbdDoc.TileLayout[i];
                    LBDTileTreeNode tileNode =
                        new LBDTileTreeNode($"({x}, {y})", tileMesh, tile, lbdDoc.TileLayout);
                    tileInfoNode.AddNode(tileNode);
                    LBDTile currentTile = tile;
                    int     j           = 0;
                    while (currentTile.ExtraTileIndex >= 0 && j <= 1)
                    {
                        LBDTile extraTile = lbdDoc.Document.ExtraTiles[currentTile.ExtraTileIndex];
                        tileMesh = lbdDoc.TileLayout[i + j + 1];
                        tileNode =
                            new LBDTileTreeNode($"({x}, {y}) extra", tileMesh, tile, lbdDoc.TileLayout);
                        tileInfoNode.AddNode(tileNode);
                        currentTile = extraTile;
                        j++;
                    }

                    i += j + 1;
                }

                tileNo++;
            }

            if (lbdDoc.Entities != null)
            {
                TreeNode objectsNode = createMMLNode("Entities", lbdDoc.Entities, lbdDoc.Document.MML.Value);
                rootNode.AddNode(objectsNode);
            }

            return(rootNode);
        }