private FastMesh createTileMesh(LBDTile tile, TMD tilesTmd, Dictionary <TMDObject, FastMesh> tileCache) { TMDObject tileObj = tilesTmd.ObjectTable[tile.TileType]; if (tileCache.ContainsKey(tileObj)) { return(tileCache[tileObj]); } Mesh m = LibLSDUnity.MeshFromTMDObject(tileObj); FastMesh fm = new FastMesh(m, new[] { LBDDiffuse, LBDAlpha }); tileCache[tileObj] = fm; return(fm); }
private GameObject createLBDTileMap(LBD lbd, Vector3 posOffset, Dictionary <TMDObject, FastMesh> tileCache) { List <CombineInstance> colliderMeshes = new List <CombineInstance>(); int tileNo = 0; for (int i = 0; i < lbd.TileLayout.Length; i++) { int x = tileNo % lbd.Header.TileWidth; int y = tileNo / lbd.Header.TileWidth; LBDTile tile = lbd.TileLayout[x, y]; // create an LBD tile if we should draw it if (tile.DrawTile) { FastMesh mesh = createTileMesh(tile, lbd.Tiles, tileCache); var matrix = mesh.AddInstance(new Vector3(x, -tile.TileHeight, y) + posOffset, tileRotation(tile)); colliderMeshes.Add(new CombineInstance { mesh = mesh.Mesh, transform = matrix, subMeshIndex = 0 }); if (mesh.Mesh.subMeshCount > 1) { colliderMeshes.Add(new CombineInstance { mesh = mesh.Mesh, transform = matrix, subMeshIndex = 1 }); } // now do extra tiles LBDTile curTile = tile; int j = 0; while (curTile.ExtraTileIndex >= 0 && j <= 1) { LBDTile extraTile = lbd.ExtraTiles[curTile.ExtraTileIndex]; FastMesh extraTileMesh = createTileMesh(extraTile, lbd.Tiles, tileCache); var extraMatrix = extraTileMesh.AddInstance(new Vector3(x, -extraTile.TileHeight, y) + posOffset, tileRotation(extraTile)); colliderMeshes.Add(new CombineInstance { mesh = extraTileMesh.Mesh, transform = extraMatrix, subMeshIndex = 0 }); if (extraTileMesh.Mesh.subMeshCount > 1) { colliderMeshes.Add(new CombineInstance { mesh = extraTileMesh.Mesh, transform = extraMatrix, subMeshIndex = 1 }); } curTile = extraTile; j++; } } tileNo++; } return(createLBDCollider(colliderMeshes, posOffset)); }