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)); }
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); }