wow-navmesh 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. wow_navmesh-0.1.0/.gitattributes +6 -0
  2. wow_navmesh-0.1.0/.github/workflows/ci.yml +30 -0
  3. wow_navmesh-0.1.0/.github/workflows/release.yml +58 -0
  4. wow_navmesh-0.1.0/.gitignore +47 -0
  5. wow_navmesh-0.1.0/.gitmodules +3 -0
  6. wow_navmesh-0.1.0/.python-version +1 -0
  7. wow_navmesh-0.1.0/CHANGELOG.md +18 -0
  8. wow_navmesh-0.1.0/CLAUDE.md +92 -0
  9. wow_navmesh-0.1.0/CMakeLists.txt +76 -0
  10. wow_navmesh-0.1.0/PKG-INFO +146 -0
  11. wow_navmesh-0.1.0/README.md +123 -0
  12. wow_navmesh-0.1.0/extern/recastnavigation/.editorconfig +12 -0
  13. wow_navmesh-0.1.0/extern/recastnavigation/.git +1 -0
  14. wow_navmesh-0.1.0/extern/recastnavigation/.github/workflows/Build.yaml +221 -0
  15. wow_navmesh-0.1.0/extern/recastnavigation/.github/workflows/Docs.yaml +29 -0
  16. wow_navmesh-0.1.0/extern/recastnavigation/.github/workflows/Tests.yaml +109 -0
  17. wow_navmesh-0.1.0/extern/recastnavigation/.gitignore +55 -0
  18. wow_navmesh-0.1.0/extern/recastnavigation/CHANGELOG.md +59 -0
  19. wow_navmesh-0.1.0/extern/recastnavigation/CMakeLists.txt +96 -0
  20. wow_navmesh-0.1.0/extern/recastnavigation/CODE_OF_CONDUCT.md +132 -0
  21. wow_navmesh-0.1.0/extern/recastnavigation/CONTRIBUTING.md +181 -0
  22. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/CMakeLists.txt +39 -0
  23. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Include/DebugDraw.h +225 -0
  24. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Include/DetourDebugDraw.h +48 -0
  25. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Include/RecastDebugDraw.h +42 -0
  26. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Include/RecastDump.h +42 -0
  27. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Source/DebugDraw.cpp +611 -0
  28. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Source/DetourDebugDraw.cpp +864 -0
  29. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Source/RecastDebugDraw.cpp +1063 -0
  30. wow_navmesh-0.1.0/extern/recastnavigation/DebugUtils/Source/RecastDump.cpp +449 -0
  31. wow_navmesh-0.1.0/extern/recastnavigation/Detour/CMakeLists.txt +40 -0
  32. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourAlloc.h +61 -0
  33. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourAssert.h +56 -0
  34. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourCommon.h +571 -0
  35. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourMath.h +21 -0
  36. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourNavMesh.h +784 -0
  37. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourNavMeshBuilder.h +149 -0
  38. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourNavMeshQuery.h +590 -0
  39. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourNode.h +168 -0
  40. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Include/DetourStatus.h +65 -0
  41. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourAlloc.cpp +50 -0
  42. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourAssert.cpp +35 -0
  43. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourCommon.cpp +387 -0
  44. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourNavMesh.cpp +1591 -0
  45. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourNavMeshBuilder.cpp +802 -0
  46. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourNavMeshQuery.cpp +3690 -0
  47. wow_navmesh-0.1.0/extern/recastnavigation/Detour/Source/DetourNode.cpp +200 -0
  48. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/CMakeLists.txt +37 -0
  49. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourCrowd.h +460 -0
  50. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourLocalBoundary.h +66 -0
  51. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourObstacleAvoidance.h +159 -0
  52. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourPathCorridor.h +151 -0
  53. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourPathQueue.h +79 -0
  54. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Include/DetourProximityGrid.h +74 -0
  55. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourCrowd.cpp +1449 -0
  56. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourLocalBoundary.cpp +137 -0
  57. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourObstacleAvoidance.cpp +619 -0
  58. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourPathCorridor.cpp +597 -0
  59. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourPathQueue.cpp +200 -0
  60. wow_navmesh-0.1.0/extern/recastnavigation/DetourCrowd/Source/DetourProximityGrid.cpp +194 -0
  61. wow_navmesh-0.1.0/extern/recastnavigation/DetourTileCache/CMakeLists.txt +38 -0
  62. wow_navmesh-0.1.0/extern/recastnavigation/DetourTileCache/Include/DetourTileCache.h +256 -0
  63. wow_navmesh-0.1.0/extern/recastnavigation/DetourTileCache/Include/DetourTileCacheBuilder.h +156 -0
  64. wow_navmesh-0.1.0/extern/recastnavigation/DetourTileCache/Source/DetourTileCache.cpp +825 -0
  65. wow_navmesh-0.1.0/extern/recastnavigation/DetourTileCache/Source/DetourTileCacheBuilder.cpp +2257 -0
  66. wow_navmesh-0.1.0/extern/recastnavigation/Docs/DoxygenLayout.xml +194 -0
  67. wow_navmesh-0.1.0/extern/recastnavigation/Docs/Extern/Recast_api.txt +682 -0
  68. wow_navmesh-0.1.0/extern/recastnavigation/Docs/Images/screenshot.png +0 -0
  69. wow_navmesh-0.1.0/extern/recastnavigation/Docs/Readme.txt +59 -0
  70. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/LICENSE +21 -0
  71. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/README.md +124 -0
  72. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js +157 -0
  73. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js +85 -0
  74. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-interactive-toc.js +81 -0
  75. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-paragraph-link.js +51 -0
  76. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css +40 -0
  77. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome-sidebar-only.css +115 -0
  78. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-awesome.css +2405 -0
  79. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-custom/custom-alternative.css +54 -0
  80. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-custom/custom.css +101 -0
  81. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-custom/header.html +88 -0
  82. wow_navmesh-0.1.0/extern/recastnavigation/Docs/doxygen-awesome-css/doxygen-custom/toggle-alternative-theme.js +12 -0
  83. wow_navmesh-0.1.0/extern/recastnavigation/Docs/footer.html +21 -0
  84. wow_navmesh-0.1.0/extern/recastnavigation/Docs/header.html +55 -0
  85. wow_navmesh-0.1.0/extern/recastnavigation/Doxyfile +2699 -0
  86. wow_navmesh-0.1.0/extern/recastnavigation/License.txt +18 -0
  87. wow_navmesh-0.1.0/extern/recastnavigation/README.md +90 -0
  88. wow_navmesh-0.1.0/extern/recastnavigation/Recast/CMakeLists.txt +33 -0
  89. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Include/Recast.h +1336 -0
  90. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Include/RecastAlloc.h +372 -0
  91. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Include/RecastAssert.h +53 -0
  92. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/Recast.cpp +542 -0
  93. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastAlloc.cpp +51 -0
  94. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastArea.cpp +590 -0
  95. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastAssert.cpp +35 -0
  96. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastContour.cpp +1104 -0
  97. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastFilter.cpp +184 -0
  98. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastLayers.cpp +656 -0
  99. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastMesh.cpp +1549 -0
  100. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastMeshDetail.cpp +1463 -0
  101. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastRasterization.cpp +556 -0
  102. wow_navmesh-0.1.0/extern/recastnavigation/Recast/Source/RecastRegion.cpp +1811 -0
  103. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/.gitignore +2 -0
  104. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/DroidSans.ttf +0 -0
  105. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/Meshes/dungeon.obj +15234 -0
  106. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/Meshes/nav_test.obj +3506 -0
  107. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/Meshes/undulating.obj +8002 -0
  108. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/TestCases/movement_test.txt +15 -0
  109. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/TestCases/nav_mesh_test.txt +23 -0
  110. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Bin/TestCases/raycast_test.txt +6 -0
  111. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/CMakeLists.txt +87 -0
  112. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Contrib/fastlz/README.TXT +75 -0
  113. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Contrib/fastlz/fastlz.c +556 -0
  114. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Contrib/fastlz/fastlz.h +100 -0
  115. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Contrib/readme-sdl.txt +6 -0
  116. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Contrib/stb_truetype.h +3252 -0
  117. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/ChunkyTriMesh.h +59 -0
  118. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/ConvexVolumeTool.h +55 -0
  119. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/CrowdTool.h +144 -0
  120. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Filelist.h +28 -0
  121. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/InputGeom.h +150 -0
  122. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/MeshLoaderObj.h +56 -0
  123. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/NavMeshPruneTool.h +56 -0
  124. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/NavMeshTesterTool.h +114 -0
  125. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/OffMeshConnectionTool.h +50 -0
  126. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/PerfTimer.h +33 -0
  127. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Sample.h +190 -0
  128. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/SampleInterfaces.h +99 -0
  129. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Sample_Debug.h +63 -0
  130. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Sample_SoloMesh.h +86 -0
  131. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Sample_TempObstacles.h +98 -0
  132. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/Sample_TileMesh.h +112 -0
  133. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/TestCase.h +114 -0
  134. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/ValueHistory.h +51 -0
  135. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/imgui.h +108 -0
  136. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Include/imguiRenderGL.h +27 -0
  137. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/ChunkyTriMesh.cpp +315 -0
  138. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/ConvexVolumeTool.cpp +296 -0
  139. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/CrowdTool.cpp +1106 -0
  140. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Filelist.cpp +78 -0
  141. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/InputGeom.cpp +613 -0
  142. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/MeshLoaderObj.cpp +244 -0
  143. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/NavMeshPruneTool.cpp +322 -0
  144. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/NavMeshTesterTool.cpp +1419 -0
  145. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/OffMeshConnectionTool.cpp +176 -0
  146. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/PerfTimer.cpp +59 -0
  147. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Sample.cpp +458 -0
  148. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/SampleInterfaces.cpp +316 -0
  149. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Sample_Debug.cpp +386 -0
  150. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Sample_SoloMesh.cpp +754 -0
  151. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Sample_TempObstacles.cpp +1544 -0
  152. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/Sample_TileMesh.cpp +1172 -0
  153. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/TestCase.cpp +462 -0
  154. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/ValueHistory.cpp +115 -0
  155. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/imgui.cpp +675 -0
  156. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/imguiRenderGL.cpp +499 -0
  157. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/Source/main.cpp +925 -0
  158. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/cmake/FindSDL2.cmake +249 -0
  159. wow_navmesh-0.1.0/extern/recastnavigation/RecastDemo/premake5.lua +278 -0
  160. wow_navmesh-0.1.0/extern/recastnavigation/Roadmap.md +74 -0
  161. wow_navmesh-0.1.0/extern/recastnavigation/Tests/CMakeLists.txt +21 -0
  162. wow_navmesh-0.1.0/extern/recastnavigation/Tests/Contrib/catch2/catch_all.hpp +12260 -0
  163. wow_navmesh-0.1.0/extern/recastnavigation/Tests/Contrib/catch2/catch_amalgamated.cpp +10395 -0
  164. wow_navmesh-0.1.0/extern/recastnavigation/Tests/Detour/Tests_Detour.cpp +33 -0
  165. wow_navmesh-0.1.0/extern/recastnavigation/Tests/Recast/Tests_Recast.cpp +1349 -0
  166. wow_navmesh-0.1.0/extern/recastnavigation/recastnavigation-config.cmake.in +3 -0
  167. wow_navmesh-0.1.0/extern/recastnavigation/recastnavigation.pc.in +10 -0
  168. wow_navmesh-0.1.0/extern/recastnavigation/version.h.in +3 -0
  169. wow_navmesh-0.1.0/pyproject.toml +46 -0
  170. wow_navmesh-0.1.0/src/bindings.cpp +366 -0
  171. wow_navmesh-0.1.0/src/wow_navmesh/__init__.py +10 -0
  172. wow_navmesh-0.1.0/src/wow_navmesh/__init__.pyi +48 -0
  173. wow_navmesh-0.1.0/src/wow_navmesh/py.typed +0 -0
  174. wow_navmesh-0.1.0/tests/test_navmesh.py +103 -0
@@ -0,0 +1,6 @@
1
+ * text=auto eol=lf
2
+
3
+ *.bat text eol=crlf
4
+ *.dll binary
5
+ *.pyd binary
6
+ *.so binary
@@ -0,0 +1,30 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ test:
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ python-version: ["3.10", "3.11", "3.12", "3.13"]
14
+
15
+ runs-on: windows-latest
16
+
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ with:
20
+ submodules: recursive
21
+
22
+ - uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Install wow-navmesh and test dependencies
27
+ run: pip install . pytest
28
+
29
+ - name: Run tests
30
+ run: pytest -v
@@ -0,0 +1,58 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ jobs:
8
+ build_wheels:
9
+ runs-on: windows-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v4
13
+ with:
14
+ submodules: recursive
15
+
16
+ - name: Build wheels
17
+ uses: pypa/cibuildwheel@v2.21
18
+
19
+ - uses: actions/upload-artifact@v4
20
+ with:
21
+ name: wheels-windows
22
+ path: ./wheelhouse/*.whl
23
+
24
+ build_sdist:
25
+ runs-on: windows-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ with:
29
+ submodules: recursive
30
+
31
+ - name: Build sdist
32
+ run: pipx run build --sdist
33
+
34
+ - uses: actions/upload-artifact@v4
35
+ with:
36
+ name: sdist
37
+ path: dist/*.tar.gz
38
+
39
+ publish:
40
+ needs: [build_wheels, build_sdist]
41
+ runs-on: ubuntu-latest
42
+ environment: pypi
43
+ permissions:
44
+ id-token: write # required for PyPI Trusted Publishing (OIDC)
45
+ steps:
46
+ - uses: actions/download-artifact@v4
47
+ with:
48
+ pattern: wheels-*
49
+ path: dist
50
+ merge-multiple: true
51
+
52
+ - uses: actions/download-artifact@v4
53
+ with:
54
+ name: sdist
55
+ path: dist
56
+
57
+ - name: Publish to PyPI
58
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,47 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .eggs/
6
+ build/
7
+ dist/
8
+ wheelhouse/
9
+ .venv/
10
+ venv/
11
+ .build-venv/
12
+ .pytest_cache/
13
+ .mypy_cache/
14
+ .ruff_cache/
15
+
16
+ # Compiled extension modules
17
+ *.so
18
+ *.pyd
19
+ *.dll
20
+
21
+ # CMake / native build output
22
+ cmake-build-*/
23
+ CMakeFiles/
24
+ CMakeCache.txt
25
+ cmake_install.cmake
26
+ CTestTestfile.cmake
27
+ _deps/
28
+ out/
29
+ *.obj
30
+ *.o
31
+ *.lib
32
+ *.exp
33
+ *.pdb
34
+ *.ilk
35
+
36
+ # Visual Studio
37
+ .vs/
38
+ *.vcxproj.user
39
+ Debug/
40
+ Release/
41
+ x64/
42
+ x86/
43
+ out/
44
+
45
+ # OS cruft
46
+ .DS_Store
47
+ Thumbs.db
@@ -0,0 +1,3 @@
1
+ [submodule "extern/recastnavigation"]
2
+ path = extern/recastnavigation
3
+ url = https://github.com/recastnavigation/recastnavigation
@@ -0,0 +1 @@
1
+ 3.12.9
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ ## [0.1.0] - Unreleased
6
+
7
+ Initial public release.
8
+
9
+ - `NavMesh` binding (nanobind) over Detour's `dtNavMesh`/`dtNavMeshQuery`, for loading
10
+ TrinityCore/AzerothCore `.mmap`/`.mmtile` files and running `find_path()`.
11
+ - Detour sources vendored as a git submodule against upstream recastnavigation `v1.6.0`,
12
+ built with `DT_POLYREF64` to match TrinityCore/AzerothCore's mmap layout (configurable
13
+ via the `WOW_NAVMESH_POLYREF64` CMake option / environment variable).
14
+ - Tile layout validation: `load_map()` raises a clear `RuntimeError` when a tile's
15
+ on-disk size doesn't match the dtPolyRef width this build targets, instead of silently
16
+ misreading it.
17
+ - Type stubs (`__init__.pyi`, `py.typed`) and a pytest suite (real-mmaps tests gated by
18
+ `WOW_NAVMESH_TEST_MMAPS`).
@@ -0,0 +1,92 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## What this is
6
+
7
+ Python bindings (via nanobind) around Detour's `dtNavMesh`/`dtNavMeshQuery` from
8
+ recastnavigation, scoped specifically to reading and pathfinding over the
9
+ `.mmap`/`.mmtile` navmesh files produced by TrinityCore/AzerothCore for WoW 3.3.5a. It
10
+ only wraps Detour's *query* engine — it does not build navmeshes (that's Recast/the
11
+ core's own mmap generator).
12
+
13
+ Windows x64 only. Non-Windows and 32-bit builds are rejected at CMake configure time
14
+ (`CMakeLists.txt`).
15
+
16
+ ## Build system
17
+
18
+ - `scikit-build-core` + `nanobind`, driven from `pyproject.toml`/`CMakeLists.txt`.
19
+ - Detour's sources are vendored as a git submodule at `extern/recastnavigation/`
20
+ (pinned to `v1.6.0`) — must be initialized (`git submodule update --init --recursive`,
21
+ or clone with `--recursive`) before any build works.
22
+ - Requires MSVC ("Desktop development with C++" workload). CMake/Ninja come from pip.
23
+
24
+ Common commands (PowerShell):
25
+
26
+ ```powershell
27
+ pip install . # build + install the extension
28
+ pip install -e . --no-build-isolation # editable install for iterative dev
29
+ pip install pytest
30
+ pytest # run the test suite
31
+ pytest tests/test_navmesh.py::test_repr_and_initial_state # single test
32
+ ```
33
+
34
+ Building against a plain (non-TrinityCore/AzerothCore) Detour navmesh: set
35
+ `WOW_NAVMESH_POLYREF64=OFF` before installing (`$env:WOW_NAVMESH_POLYREF64 = "OFF"`).
36
+ This is a CMake option that toggles a compile define (`DT_POLYREF64`) — it changes the
37
+ binary's expected on-disk tile layout, not just a runtime flag, so it requires a rebuild.
38
+
39
+ ## Architecture
40
+
41
+ Everything lives in one file: `src/bindings.cpp`. It defines a single C++ `NavMesh`
42
+ class exposed to Python as `_wow_navmesh.NavMesh`, then re-exported as
43
+ `wow_navmesh.NavMesh` in `src/wow_navmesh/__init__.py`.
44
+
45
+ Key mechanics inside `NavMesh`:
46
+
47
+ - **`load_map(map_id)`**: reads `{map_id:03}.mmap` for the `dtNavMeshParams` header,
48
+ then scans a sparse 64x64 grid of `{map_id:03}{x:02}{y:02}.mmtile` files, validating
49
+ each one's own `MmapTileHeader` (magic/version) before handing its payload to
50
+ `dtNavMesh::addTile()`.
51
+ - **The `DT_POLYREF64` layout check (`checkTileLayout`)**: TrinityCore/AzerothCore build
52
+ their mmap generator with `DT_POLYREF64`, widening `dtPolyRef` from 32 to 64 bits.
53
+ That changes the size of `dtLink` (which embeds a `dtPolyRef`), and thus the byte
54
+ offset of every tile section after it — but doesn't change the magic/version Detour
55
+ itself checks, so a mismatched build would otherwise silently misread tiles instead of
56
+ failing loudly. `expectedTileSize()` recomputes a tile's expected serialized size from
57
+ its `dtMeshHeader` counts (mirroring `DetourNavMeshBuilder`'s own section-size math)
58
+ under both possible `dtLink` sizes, and `checkTileLayout()` compares that against the
59
+ file's actual size to detect and name a layout mismatch before it corrupts anything.
60
+ If you touch this logic, keep it in sync with upstream `DetourNavMeshBuilder.cpp`.
61
+ - **Coordinate swap**: `.mmap`/`.mmtile` files store coordinates as `(y, z, x)`; the
62
+ public API always uses WoW's `(x, y, z)` order. The swap happens only at the
63
+ `find_path()` boundary (both on the way in for start/end points and on the way out for
64
+ result points) — nowhere else in the codebase needs to think about it.
65
+ - **RAII ownership**: `DtNavMeshPtr`/`DtBuffer` (custom deleters over `dtFreeNavMesh`/
66
+ `dtFree`) ensure a throw partway through `load_map()` can't leak the in-progress mesh
67
+ or a tile buffer that `addTile()` didn't take ownership of. `load_map()` calls
68
+ `free_map()` first, so a failed load leaves the previous map's state, not a partial one.
69
+ - Nearest-poly search extents (50 units/axis) and the internal path-poly buffer (512
70
+ polys) inside `find_path()` are fixed constants, not exposed as parameters.
71
+
72
+ Python-side surface is thin: `src/wow_navmesh/__init__.py` just re-exports `NavMesh` and
73
+ resolves `__version__` via `importlib.metadata`. Type stubs live in
74
+ `src/wow_navmesh/__init__.pyi` (kept in sync manually with the nanobind bindings) and the
75
+ package ships `py.typed`.
76
+
77
+ ## Tests
78
+
79
+ `tests/test_navmesh.py` has two tiers:
80
+
81
+ - No-mmap-data tests (construction, error paths, context manager) run in CI as-is.
82
+ - A second tier exercises real `find_path()` behavior against an actual
83
+ TrinityCore/AzerothCore mmaps directory, gated behind the `WOW_NAVMESH_TEST_MMAPS`
84
+ env var (skipped otherwise). Point it at a directory containing e.g. `000.mmap` +
85
+ `0002239.mmtile` for Eastern Kingdoms to enable that tier locally.
86
+
87
+ ## CI/release
88
+
89
+ - `.github/workflows/ci.yml`: runs the test suite on `windows-latest` across Python
90
+ 3.10–3.13 on every push/PR to `main`.
91
+ - `.github/workflows/release.yml`: on `v*` tags, builds `win_amd64` wheels via
92
+ `cibuildwheel` and an sdist, then publishes to PyPI via Trusted Publishing (OIDC).
@@ -0,0 +1,76 @@
1
+ cmake_minimum_required(VERSION 3.15...3.27)
2
+ project(wow_navmesh LANGUAGES CXX)
3
+
4
+ set(CMAKE_CXX_STANDARD 17)
5
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
6
+
7
+ if (NOT SKBUILD)
8
+ message(WARNING "This CMakeLists.txt is meant to be driven by scikit-build-core (pip install).")
9
+ endif()
10
+
11
+ if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
12
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
13
+ endif()
14
+
15
+ # wow-navmesh only targets 64-bit Windows (matching TrinityCore/AzerothCore's own
16
+ # mmap tooling and the only platform prebuilt wheels are published for).
17
+ if (NOT WIN32)
18
+ message(FATAL_ERROR
19
+ "wow-navmesh only supports Windows. Building on '${CMAKE_SYSTEM_NAME}' is not supported.")
20
+ endif()
21
+
22
+ if (CMAKE_SIZEOF_VOID_P EQUAL 4)
23
+ message(FATAL_ERROR
24
+ "wow-navmesh only supports 64-bit Python interpreters. "
25
+ "A 32-bit build was detected (CMAKE_SIZEOF_VOID_P=4); reconfigure with a 64-bit toolchain/interpreter.")
26
+ endif()
27
+
28
+ set(DETOUR_SOURCE_DIR
29
+ "${PROJECT_SOURCE_DIR}/extern/recastnavigation/Detour"
30
+ CACHE PATH "Path to the Detour library source tree (Include/ and Source/)")
31
+
32
+ if (NOT EXISTS "${DETOUR_SOURCE_DIR}/Include/DetourNavMesh.h")
33
+ message(FATAL_ERROR
34
+ "Detour sources not found at '${DETOUR_SOURCE_DIR}'. "
35
+ "The recastnavigation submodule looks uninitialized. Run:\n"
36
+ " git submodule update --init --recursive\n"
37
+ "or point DETOUR_SOURCE_DIR at an existing Detour/ checkout (Include/ and Source/).")
38
+ endif()
39
+
40
+ # TrinityCore/AzerothCore mmap tiles are generated with DT_POLYREF64 enabled (a wider
41
+ # dtPolyRef changes the on-disk size of dtLink, and therefore every tile's byte layout).
42
+ # Keep this ON to read those tiles; turning it OFF targets a plain Detour navmesh built
43
+ # without that define instead. See src/bindings.cpp for the layout mismatch this guards.
44
+ option(WOW_NAVMESH_POLYREF64
45
+ "Build against the DT_POLYREF64 tile layout used by TrinityCore/AzerothCore mmaps" ON)
46
+
47
+ find_package(Python 3.10
48
+ REQUIRED COMPONENTS Interpreter Development.Module)
49
+
50
+ execute_process(
51
+ COMMAND "${Python_EXECUTABLE}" -c "import nanobind; print(nanobind.cmake_dir())"
52
+ OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE NB_DIR)
53
+ list(APPEND CMAKE_PREFIX_PATH "${NB_DIR}")
54
+ find_package(nanobind CONFIG REQUIRED)
55
+
56
+ nanobind_add_module(
57
+ _wow_navmesh
58
+ src/bindings.cpp
59
+ "${DETOUR_SOURCE_DIR}/Source/DetourAlloc.cpp"
60
+ "${DETOUR_SOURCE_DIR}/Source/DetourAssert.cpp"
61
+ "${DETOUR_SOURCE_DIR}/Source/DetourCommon.cpp"
62
+ "${DETOUR_SOURCE_DIR}/Source/DetourNavMesh.cpp"
63
+ "${DETOUR_SOURCE_DIR}/Source/DetourNavMeshBuilder.cpp"
64
+ "${DETOUR_SOURCE_DIR}/Source/DetourNavMeshQuery.cpp"
65
+ "${DETOUR_SOURCE_DIR}/Source/DetourNode.cpp"
66
+ )
67
+
68
+ target_include_directories(_wow_navmesh PRIVATE "${DETOUR_SOURCE_DIR}/Include")
69
+
70
+ if (WOW_NAVMESH_POLYREF64)
71
+ target_compile_definitions(_wow_navmesh PRIVATE DT_POLYREF64 WOW_NAVMESH_POLYREF64=1)
72
+ else()
73
+ target_compile_definitions(_wow_navmesh PRIVATE WOW_NAVMESH_POLYREF64=0)
74
+ endif()
75
+
76
+ install(TARGETS _wow_navmesh LIBRARY DESTINATION wow_navmesh)
@@ -0,0 +1,146 @@
1
+ Metadata-Version: 2.1
2
+ Name: wow-navmesh
3
+ Version: 0.1.0
4
+ Summary: Python bindings for Detour (recastnavigation) navmesh pathfinding over TrinityCore/AzerothCore mmaps
5
+ Keywords: recastnavigation,detour,navmesh,pathfinding,trinitycore,azerothcore,wow
6
+ Author: srounet
7
+ Classifier: Development Status :: 3 - Alpha
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: Programming Language :: C++
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Operating System :: Microsoft :: Windows
16
+ Classifier: Topic :: Games/Entertainment
17
+ Classifier: Topic :: Software Development :: Libraries
18
+ Project-URL: Homepage, https://github.com/srounet/wow-navmesh
19
+ Project-URL: Repository, https://github.com/srounet/wow-navmesh
20
+ Project-URL: Issues, https://github.com/srounet/wow-navmesh/issues
21
+ Requires-Python: >=3.10
22
+ Description-Content-Type: text/markdown
23
+
24
+ # wow-navmesh
25
+
26
+ Python bindings (via [nanobind](https://github.com/wjakob/nanobind)) for
27
+ [Detour](https://github.com/recastnavigation/recastnavigation), the navmesh query engine
28
+ from recastnavigation — scoped to pathfinding over the `.mmap`/`.mmtile` navmesh files
29
+ generated by TrinityCore/AzerothCore for World of Warcraft 3.3.5a.
30
+
31
+ This wraps Detour's *query* engine (`dtNavMesh` / `dtNavMeshQuery`) only. It does not
32
+ build navmeshes — that's Recast, and TrinityCore/AzerothCore's own mmap generator tools
33
+ already produce the `.mmap`/`.mmtile` files this library reads.
34
+
35
+ ## Install
36
+
37
+ ```bash
38
+ pip install wow-navmesh
39
+ ```
40
+
41
+ Prebuilt wheels are published for 64-bit CPython 3.10–3.13 on Windows (x64) only. No
42
+ compiler needed for a normal install. Linux and macOS are not supported.
43
+
44
+ ## Quickstart
45
+
46
+ ```python
47
+ import wow_navmesh as wn
48
+
49
+ nm = wn.NavMesh(r"C:\path\to\mmaps")
50
+ nm.load_map(0) # 0 = Eastern Kingdoms
51
+
52
+ path = nm.find_path((x1, y1, z1), (x2, y2, z2))
53
+ for x, y, z in path:
54
+ print(x, y, z)
55
+ ```
56
+
57
+ `NavMesh` also works as a context manager, freeing the loaded map on exit:
58
+
59
+ ```python
60
+ with wn.NavMesh(r"C:\path\to\mmaps") as nm:
61
+ nm.load_map(0)
62
+ ...
63
+ ```
64
+
65
+ Coordinates are `(x, y, z)` in WoW world-coordinate order everywhere in this API. The
66
+ `.mmap`/`.mmtile` files store them as `(y, z, x)`; the swap happens internally at the
67
+ `find_path()` boundary, so callers never need to think about it.
68
+
69
+ ## API
70
+
71
+ - `NavMesh(mmaps_path: str)` — bind to a directory of `.mmap`/`.mmtile` files.
72
+ - `.load_map(map_id: int)` — load the navmesh for a map id, replacing any map currently
73
+ loaded. Raises `RuntimeError` if the files are missing, truncated, or were built for a
74
+ different `dtPolyRef` layout than this build targets (see below).
75
+ - `.free_map()` — release the currently loaded map.
76
+ - `.find_path(start, end, max_points=256) -> list[(x, y, z)]` — the straight path
77
+ between two points, or `[]` if none was found. Raises `RuntimeError` if no map is
78
+ loaded, `ValueError` if `max_points <= 0`.
79
+ - `.is_loaded`, `.map_id`, `.mmaps_path` — read-only properties.
80
+
81
+ Full type stubs ship with the package (`py.typed`).
82
+
83
+ ## A note on `DT_POLYREF64`
84
+
85
+ TrinityCore/AzerothCore build their mmap generator with Detour's `DT_POLYREF64` option
86
+ enabled, which widens `dtPolyRef` from 32 to 64 bits. That changes the on-disk byte
87
+ layout of every tile (`dtLink`, which embeds a `dtPolyRef`, changes size — and every
88
+ section of a tile after it shifts as a result). Published wheels are built with
89
+ `DT_POLYREF64` on, matching TrinityCore/AzerothCore's own tools; `load_map()` checks
90
+ each tile's layout against what it expects and raises a clear `RuntimeError` (naming the
91
+ mismatch) rather than silently misreading a tile built the other way.
92
+
93
+ Building from source against a plain Detour navmesh (not TrinityCore/AzerothCore's)?
94
+ Set `WOW_NAVMESH_POLYREF64=OFF` before installing:
95
+
96
+ ```powershell
97
+ $env:WOW_NAVMESH_POLYREF64 = "OFF"
98
+ pip install --no-binary wow-navmesh wow-navmesh
99
+ ```
100
+
101
+ wow-navmesh only supports 64-bit Windows Python interpreters; 32-bit builds and
102
+ non-Windows platforms are rejected at configure time.
103
+
104
+ ## Building from source
105
+
106
+ Requirements:
107
+
108
+ - Windows, 64-bit CPython 3.10–3.13.
109
+ - A C++ compiler with MSVC support — the
110
+ [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/) (or full
111
+ Visual Studio) "Desktop development with C++" workload. CMake and Ninja are pulled in
112
+ automatically by `pip` and don't need to be installed separately.
113
+
114
+ ```powershell
115
+ git clone --recursive https://github.com/srounet/wow-navmesh
116
+ cd wow-navmesh
117
+ pip install .
118
+ ```
119
+
120
+ The `--recursive` clone (or a `git submodule update --init --recursive` afterwards) is
121
+ required — Detour's sources are vendored as a git submodule under
122
+ `extern/recastnavigation/`, pinned to upstream tag `v1.6.0`.
123
+
124
+ Run the tests with `pip install pytest && pytest`. A second tier of tests exercises
125
+ `find_path()` against a real mmaps directory; point `WOW_NAVMESH_TEST_MMAPS` at one to
126
+ enable it:
127
+
128
+ ```powershell
129
+ $env:WOW_NAVMESH_TEST_MMAPS = "C:\path\to\mmaps"
130
+ pytest
131
+ ```
132
+
133
+ ## Known limitations
134
+
135
+ - Only verified against TrinityCore/AzerothCore mmaps for WoW 3.3.5a. The mmap format
136
+ may differ across core versions or forks; nothing here has been tested against those.
137
+ - The nearest-poly search extents (50 units on each axis) and the internal path-buffer
138
+ size (512 polygons) used by `find_path()` are currently fixed, not configurable.
139
+ - License: TBD (recastnavigation/Detour itself is zlib-licensed; its notice is included
140
+ under `extern/recastnavigation/`).
141
+
142
+ ## Acknowledgments
143
+
144
+ - [recastnavigation](https://github.com/recastnavigation/recastnavigation) by Mikko
145
+ Mononen and contributors.
146
+ - [nanobind](https://github.com/wjakob/nanobind) by Wenzel Jakob.
@@ -0,0 +1,123 @@
1
+ # wow-navmesh
2
+
3
+ Python bindings (via [nanobind](https://github.com/wjakob/nanobind)) for
4
+ [Detour](https://github.com/recastnavigation/recastnavigation), the navmesh query engine
5
+ from recastnavigation — scoped to pathfinding over the `.mmap`/`.mmtile` navmesh files
6
+ generated by TrinityCore/AzerothCore for World of Warcraft 3.3.5a.
7
+
8
+ This wraps Detour's *query* engine (`dtNavMesh` / `dtNavMeshQuery`) only. It does not
9
+ build navmeshes — that's Recast, and TrinityCore/AzerothCore's own mmap generator tools
10
+ already produce the `.mmap`/`.mmtile` files this library reads.
11
+
12
+ ## Install
13
+
14
+ ```bash
15
+ pip install wow-navmesh
16
+ ```
17
+
18
+ Prebuilt wheels are published for 64-bit CPython 3.10–3.13 on Windows (x64) only. No
19
+ compiler needed for a normal install. Linux and macOS are not supported.
20
+
21
+ ## Quickstart
22
+
23
+ ```python
24
+ import wow_navmesh as wn
25
+
26
+ nm = wn.NavMesh(r"C:\path\to\mmaps")
27
+ nm.load_map(0) # 0 = Eastern Kingdoms
28
+
29
+ path = nm.find_path((x1, y1, z1), (x2, y2, z2))
30
+ for x, y, z in path:
31
+ print(x, y, z)
32
+ ```
33
+
34
+ `NavMesh` also works as a context manager, freeing the loaded map on exit:
35
+
36
+ ```python
37
+ with wn.NavMesh(r"C:\path\to\mmaps") as nm:
38
+ nm.load_map(0)
39
+ ...
40
+ ```
41
+
42
+ Coordinates are `(x, y, z)` in WoW world-coordinate order everywhere in this API. The
43
+ `.mmap`/`.mmtile` files store them as `(y, z, x)`; the swap happens internally at the
44
+ `find_path()` boundary, so callers never need to think about it.
45
+
46
+ ## API
47
+
48
+ - `NavMesh(mmaps_path: str)` — bind to a directory of `.mmap`/`.mmtile` files.
49
+ - `.load_map(map_id: int)` — load the navmesh for a map id, replacing any map currently
50
+ loaded. Raises `RuntimeError` if the files are missing, truncated, or were built for a
51
+ different `dtPolyRef` layout than this build targets (see below).
52
+ - `.free_map()` — release the currently loaded map.
53
+ - `.find_path(start, end, max_points=256) -> list[(x, y, z)]` — the straight path
54
+ between two points, or `[]` if none was found. Raises `RuntimeError` if no map is
55
+ loaded, `ValueError` if `max_points <= 0`.
56
+ - `.is_loaded`, `.map_id`, `.mmaps_path` — read-only properties.
57
+
58
+ Full type stubs ship with the package (`py.typed`).
59
+
60
+ ## A note on `DT_POLYREF64`
61
+
62
+ TrinityCore/AzerothCore build their mmap generator with Detour's `DT_POLYREF64` option
63
+ enabled, which widens `dtPolyRef` from 32 to 64 bits. That changes the on-disk byte
64
+ layout of every tile (`dtLink`, which embeds a `dtPolyRef`, changes size — and every
65
+ section of a tile after it shifts as a result). Published wheels are built with
66
+ `DT_POLYREF64` on, matching TrinityCore/AzerothCore's own tools; `load_map()` checks
67
+ each tile's layout against what it expects and raises a clear `RuntimeError` (naming the
68
+ mismatch) rather than silently misreading a tile built the other way.
69
+
70
+ Building from source against a plain Detour navmesh (not TrinityCore/AzerothCore's)?
71
+ Set `WOW_NAVMESH_POLYREF64=OFF` before installing:
72
+
73
+ ```powershell
74
+ $env:WOW_NAVMESH_POLYREF64 = "OFF"
75
+ pip install --no-binary wow-navmesh wow-navmesh
76
+ ```
77
+
78
+ wow-navmesh only supports 64-bit Windows Python interpreters; 32-bit builds and
79
+ non-Windows platforms are rejected at configure time.
80
+
81
+ ## Building from source
82
+
83
+ Requirements:
84
+
85
+ - Windows, 64-bit CPython 3.10–3.13.
86
+ - A C++ compiler with MSVC support — the
87
+ [Visual Studio Build Tools](https://visualstudio.microsoft.com/downloads/) (or full
88
+ Visual Studio) "Desktop development with C++" workload. CMake and Ninja are pulled in
89
+ automatically by `pip` and don't need to be installed separately.
90
+
91
+ ```powershell
92
+ git clone --recursive https://github.com/srounet/wow-navmesh
93
+ cd wow-navmesh
94
+ pip install .
95
+ ```
96
+
97
+ The `--recursive` clone (or a `git submodule update --init --recursive` afterwards) is
98
+ required — Detour's sources are vendored as a git submodule under
99
+ `extern/recastnavigation/`, pinned to upstream tag `v1.6.0`.
100
+
101
+ Run the tests with `pip install pytest && pytest`. A second tier of tests exercises
102
+ `find_path()` against a real mmaps directory; point `WOW_NAVMESH_TEST_MMAPS` at one to
103
+ enable it:
104
+
105
+ ```powershell
106
+ $env:WOW_NAVMESH_TEST_MMAPS = "C:\path\to\mmaps"
107
+ pytest
108
+ ```
109
+
110
+ ## Known limitations
111
+
112
+ - Only verified against TrinityCore/AzerothCore mmaps for WoW 3.3.5a. The mmap format
113
+ may differ across core versions or forks; nothing here has been tested against those.
114
+ - The nearest-poly search extents (50 units on each axis) and the internal path-buffer
115
+ size (512 polygons) used by `find_path()` are currently fixed, not configurable.
116
+ - License: TBD (recastnavigation/Detour itself is zlib-licensed; its notice is included
117
+ under `extern/recastnavigation/`).
118
+
119
+ ## Acknowledgments
120
+
121
+ - [recastnavigation](https://github.com/recastnavigation/recastnavigation) by Mikko
122
+ Mononen and contributors.
123
+ - [nanobind](https://github.com/wjakob/nanobind) by Wenzel Jakob.
@@ -0,0 +1,12 @@
1
+ # editorconfig.org
2
+
3
+ # top-most EditorConfig file
4
+ root = true
5
+
6
+ [*]
7
+ indent_size = 4
8
+ indent_style = tab
9
+
10
+ [*.yml]
11
+ indent_size = 2
12
+ indent_style = space
@@ -0,0 +1 @@
1
+ gitdir: ../../.git/modules/extern/recastnavigation