Ejemplo n.º 1
0
        /// <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));
            }
        }
Ejemplo n.º 2
0
            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);
            }