/// <summary> /// Adds or replaces a tile in the navigation mesh /// </summary> /// <remarks>The coordinate of the tile is embedded inside the tile data header</remarks> public bool AddOrReplaceTile(byte[] data) { fixed(byte *dataPtr = data) { Navigation.TileHeader *header = (Navigation.TileHeader *)dataPtr; var coord = new Point(header->X, header->Y); // Remove old tile if it exists RemoveTile(coord); tileCoordinates.Add(coord); return(Navigation.AddTile(navmesh, new IntPtr(dataPtr), data.Length)); } }
private unsafe IntPtr LoadLayer(NavigationMeshLayer navigationMeshLayer) { IntPtr layer = Navigation.CreateNavmesh(cellTileSize); if (layer == IntPtr.Zero) { return(layer); } // Add all the tiles to the navigation mesh foreach (var tile in navigationMeshLayer.Tiles) { if (tile.Value.Data == null) continue; // Just skip empty tiles fixed(byte *inputData = tile.Value.Data) { Navigation.AddTile(layer, tile.Key, new IntPtr(inputData), tile.Value.Data.Length); } } return(layer); }