| 864 | } |
| 865 | |
| 866 | void BuildTileAsync(NavMesh* navMesh, const int32 x, const int32 y, const rcConfig& config, const BoundingBox& tileBoundsNavMesh, const Matrix& worldToNavMesh, float tileSize) |
| 867 | { |
| 868 | PROFILE_CPU(); |
| 869 | NavMeshRuntime* runtime = navMesh->GetRuntime(); |
| 870 | NavBuildTasksLocker.Lock(); |
| 871 | |
| 872 | // Skip if this tile is already during cooking |
| 873 | for (int32 i = 0; i < NavBuildTasks.Count(); i++) |
| 874 | { |
| 875 | const auto task = NavBuildTasks.Get()[i]; |
| 876 | if (task->GetState() == TaskState::Queued && task->X == x && task->Y == y && task->Runtime == runtime) |
| 877 | { |
| 878 | NavBuildTasksLocker.Unlock(); |
| 879 | return; |
| 880 | } |
| 881 | } |
| 882 | |
| 883 | // Create task |
| 884 | auto task = New<NavMeshTileBuildTask>(); |
| 885 | task->Scene = navMesh->GetScene(); |
| 886 | task->NavMesh = navMesh; |
| 887 | task->Runtime = runtime; |
| 888 | task->X = x; |
| 889 | task->Y = y; |
| 890 | task->TileBoundsNavMesh = tileBoundsNavMesh; |
| 891 | task->WorldToNavMesh = worldToNavMesh; |
| 892 | task->TileSize = tileSize; |
| 893 | task->Config = config; |
| 894 | NavBuildTasks.Add(task); |
| 895 | NavBuildTasksMaxCount++; |
| 896 | |
| 897 | NavBuildTasksLocker.Unlock(); |
| 898 | |
| 899 | // Invoke job |
| 900 | task->Start(); |
| 901 | } |
| 902 | |
| 903 | void BuildDirtyBounds(Scene* scene, NavMesh* navMesh, const BoundingBox& dirtyBounds, bool rebuild) |
| 904 | { |
no test coverage detected