using Pathfinding.Graphs.Navmesh.Jobs;
using Pathfinding.Collections;
namespace Pathfinding.Graphs.Navmesh {
/// Helper methods for scanning a recast graph
public struct RecastBuilder {
///
/// Builds meshes for the given tiles in a graph.
/// Call Schedule on the returned object to actually start the job.
///
/// You may want to adjust the settings on the returned object before calling Schedule.
///
///
/// // Scans the first 6x6 chunk of tiles of the recast graph (the IntRect uses inclusive coordinates)
/// var graph = AstarPath.active.data.recastGraph;
/// var buildSettings = RecastBuilder.BuildTileMeshes(graph, new TileLayout(graph), new IntRect(0, 0, 5, 5));
/// var disposeArena = new Pathfinding.Jobs.DisposeArena();
/// var promise = buildSettings.Schedule(disposeArena);
///
/// AstarPath.active.AddWorkItem(() => {
/// // Block until the asynchronous job completes
/// var result = promise.Complete();
/// TileMeshes tiles = result.tileMeshes.ToManaged();
/// // Take the scanned tiles and place them in the graph,
/// // but not at their original location, but 2 tiles away, rotated 90 degrees.
/// tiles.tileRect = tiles.tileRect.Offset(new Vector2Int(2, 0));
/// tiles.Rotate(1);
/// graph.ReplaceTiles(tiles);
///
/// // Dispose unmanaged data
/// disposeArena.DisposeAll();
/// result.Dispose();
/// });
///
///
public static TileBuilder BuildTileMeshes (RecastGraph graph, TileLayout tileLayout, IntRect tileRect) {
return new TileBuilder(graph, tileLayout, tileRect);
}
///
/// Builds nodes given some tile meshes.
/// Call Schedule on the returned object to actually start the job.
///
/// See:
///
public static JobBuildNodes BuildNodeTiles (RecastGraph graph, TileLayout tileLayout) {
return new JobBuildNodes(graph, tileLayout);
}
public static TileCutter CutTiles (NavmeshBase graph, GridLookup cuts, TileLayout tileLayout) {
return new TileCutter(graph, cuts, tileLayout);
}
}
}