Exemple #1
0
        /// <summary>
        /// Used to initialize the navigation mesh so it will allow building tiles
        /// This will store the build settings and create the amount of layers corresponding to the number of NavigationAgentSettings
        /// </summary>
        /// <param name="buildSettings"></param>
        /// <param name="agentSettings">Agent setting to use</param>
        public void Initialize(NavigationMeshBuildSettings buildSettings, NavigationAgentSettings[] agentSettings)
        {
            BuildSettings = buildSettings;

            // Remove layers that are no longer needed
            if (LayersInternal.Count > agentSettings.Length)
            {
                LayersInternal.RemoveRange(agentSettings.Length, LayersInternal.Count - agentSettings.Length);
            }

            // Initialize layers
            for (int i = 0; i < agentSettings.Length; i++)
            {
                NavigationMeshLayer layer;
                if (LayersInternal.Count <= i)
                {
                    layer = new NavigationMeshLayer();
                    LayersInternal.Add(layer);
                }
                else
                {
                    layer = LayersInternal[i];
                }
                layer.AgentSettings = agentSettings[i];
                layer.BuildSettings = buildSettings;
            }
        }
Exemple #2
0
        /// <summary>
        /// Build a single tile for all layers
        /// Initialize should have been called before calling this
        /// </summary>
        /// <param name="inputVertices">Input vertex data for the input mesh</param>
        /// <param name="inputIndices">Input index data for the input mesh</param>
        /// <param name="boundingBox">Bounding box of the tile</param>
        /// <param name="tileCoordinate">Tile coordinate to of the tile to build</param>
        /// <returns>A list of built tiles</returns>
        public List <NavigationMeshTile> BuildAllLayers(Vector3[] inputVertices, int[] inputIndices,
                                                        BoundingBox boundingBox, Point tileCoordinate)
        {
            List <NavigationMeshTile> builtTiles = new List <NavigationMeshTile>();

            for (int i = 0; i < LayersInternal.Count; i++)
            {
                NavigationMeshLayer layer = Layers[i];
                layer.BuildTile(inputVertices, inputIndices, boundingBox, tileCoordinate);
            }

            // Update tile hash
            UpdateTileHash();

            return(builtTiles);
        }
Exemple #3
0
            public override void Serialize(ref NavigationMesh obj, ArchiveMode mode, SerializationStream stream)
            {
                // Serialize tile size because it is needed
                stream.Serialize(ref obj.BuildSettings.TileSize);
                stream.Serialize(ref obj.BuildSettings.CellSize);

                boundingBoxSerializer.Serialize(ref obj.BoundingBox, mode, stream);

                int numLayers = obj.Layers.Count;

                stream.Serialize(ref numLayers);
                if (mode == ArchiveMode.Deserialize)
                {
                    obj.LayersInternal.Clear();
                }

                for (int l = 0; l < numLayers; l++)
                {
                    NavigationMeshLayer layer;
                    if (mode == ArchiveMode.Deserialize)
                    {
                        // Create a new layer
                        layer = new NavigationMeshLayer();
                        obj.LayersInternal.Add(layer);
                    }
                    else
                    {
                        layer = obj.LayersInternal[l];
                    }

                    tilesSerializer.Serialize(ref layer.TilesInternal, mode, stream);
                }

                if (mode == ArchiveMode.Deserialize)
                {
                    obj.UpdateTileHash();
                }
            }