# capdevon/jme3-artificial-intelligence architecture

> Architecture diagram of the GitHub repository capdevon/jme3-artificial-intelligence, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/capdevon/jme3-artificial-intelligence
- Repository: https://github.com/capdevon/jme3-artificial-intelligence

## Overview

This repository combines an updated jME3 AI library with example application code. Its core workflow is to collect scene geometry, configure and build a navigation mesh, then use an agent to find and follow a path; optional helpers visualize paths and meshes or save settings and meshes. The README also identifies navigation-mesh generation and pathfinding as project capabilities. Several example and utility classes are present in the tree, but their runtime connections are not shown in the supplied excerpts, so they are represented without guessed links.

Main entry points: [`src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java`](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java) (Geometry collection), [`src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java`](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java) (Navmesh builder), [`src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java`](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java) (Settings persistence), [`src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuildSettings.java`](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuildSettings.java) (Build settings)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Navmesh generation"]
  node_geometry_sources["Geometry collection"]
  node_terrain_conversion["Terrain conversion"]
  node_build_settings["Build settings"]
  node_mesh_builder["Navmesh builder"]
  node_settings_properties["Settings persistence"]
  node_mesh_exporter["Mesh export"]
  node_ignore_userdata["Build ignore flag"]
end

subgraph group_agents["Pathfinding agents"]
  node_terrain_agent["Navmesh agent<br/>[NavMeshAgent.java]"]
  node_threaded_agent["Threaded agent"]
end

subgraph group_visualization["Debug visualization"]
  node_path_viewer["Path viewer<br/>[PathViewer.java]"]
  node_mesh_debug["Navmesh renderer"]
end

subgraph group_examples["Examples and scene support"]
  node_test_navmesh["Navmesh example<br/>[Test_NavMesh.java]"]
  node_test_agent["Agent example"]
  node_test_editor["Navmesh editor"]
  node_character_control["Character control"]
  node_animator["Animator<br/>[Animator.java]"]
  node_base_state["Base app state<br/>[MyBaseState.java]"]
  node_editor_state["Editor state"]
  node_terrain_state["Terrain state<br/>[TerrainState.java]"]
  node_heightmap["Fractal heightmap"]
  node_instance_culling["Instance culling"]
  node_tree_generator["Tree generator<br/>[TreeGenerator.java]"]
  node_game_object["Game object<br/>[GameObject.java]"]
  node_main_camera["Main camera<br/>[MainCamera.java]"]
  node_physics_debug["Physics debug toggle"]
end

node_developer(("Game developer"))

node_developer -.->|"selects geometry"| node_geometry_sources
node_geometry_sources -->|"converts terrain"| node_terrain_conversion
node_developer -.->|"configures build"| node_mesh_builder
node_mesh_builder -->|"uses settings"| node_build_settings
node_developer -.->|"saves settings"| node_settings_properties
node_settings_properties -->|"loads settings"| node_build_settings
node_terrain_agent -->|"draws path"| node_path_viewer
node_threaded_agent -->|"draws path"| node_path_viewer

click node_geometry_sources "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java"
click node_terrain_conversion "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/TerrainMeshConverter.java"
click node_build_settings "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuildSettings.java"
click node_mesh_builder "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java"
click node_settings_properties "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java"
click node_mesh_exporter "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshExporter.java"
click node_ignore_userdata "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshUserData.java"
click node_terrain_agent "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/NavMeshAgent.java"
click node_threaded_agent "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/NavMeshAgentMT.java"
click node_path_viewer "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/PathViewer.java"
click node_mesh_debug "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshDebugRenderer.java"
click node_test_navmesh "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMesh.java"
click node_test_agent "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMeshAgent.java"
click node_test_editor "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMeshEditor.java"
click node_character_control "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/CharacterAgentControl.java"
click node_animator "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Animator.java"
click node_base_state "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/MyBaseState.java"
click node_editor_state "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/NavMeshEditorState.java"
click node_terrain_state "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/TerrainState.java"
click node_heightmap "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/FractalHeightMap.java"
click node_instance_culling "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/MyInstanceCullingFunction.java"
click node_tree_generator "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/TreeGenerator.java"
click node_game_object "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/GameObject.java"
click node_main_camera "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/MainCamera.java"
click node_physics_debug "https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/TogglePhysicsDebugState.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_geometry_sources,node_terrain_conversion,node_build_settings,node_mesh_builder,node_settings_properties,node_mesh_exporter,node_ignore_userdata toneBlue
class node_terrain_agent,node_threaded_agent toneAmber
class node_path_viewer,node_mesh_debug toneMint
class node_test_navmesh,node_test_agent,node_test_editor,node_character_control,node_animator,node_base_state,node_editor_state,node_terrain_state,node_heightmap,node_instance_culling,node_tree_generator,node_game_object,node_main_camera,node_physics_debug toneRose
class node_developer toneIndigo
```

## Components

### Navmesh generation

- [Geometry collection](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java): `src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java`
- [Terrain conversion](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/TerrainMeshConverter.java): `src/main/java/com/jme3/ai/navmesh/gen/TerrainMeshConverter.java`
- [Build settings](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuildSettings.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuildSettings.java`
- [Navmesh builder](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java`
- [Settings persistence](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java`
- [Mesh export](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshExporter.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshExporter.java`
- [Build ignore flag](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshUserData.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshUserData.java`

### Pathfinding agents

- [Navmesh agent](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/NavMeshAgent.java): `src/main/java/com/jme3/ai/control/NavMeshAgent.java`
- [Threaded agent](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/NavMeshAgentMT.java): `src/main/java/com/jme3/ai/control/NavMeshAgentMT.java`

### Debug visualization

- [Path viewer](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/control/PathViewer.java): `src/main/java/com/jme3/ai/control/PathViewer.java`
- [Navmesh renderer](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/jme3/ai/navmesh/gen/NavMeshDebugRenderer.java): `src/main/java/com/jme3/ai/navmesh/gen/NavMeshDebugRenderer.java`

### Examples and scene support

- [Navmesh example](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMesh.java): `src/main/java/com/examples/Test_NavMesh.java`
- [Agent example](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMeshAgent.java): `src/main/java/com/examples/Test_NavMeshAgent.java`
- [Navmesh editor](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Test_NavMeshEditor.java): `src/main/java/com/examples/Test_NavMeshEditor.java`
- [Character control](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/CharacterAgentControl.java): `src/main/java/com/examples/CharacterAgentControl.java`
- [Animator](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/Animator.java): `src/main/java/com/examples/Animator.java`
- [Base app state](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/MyBaseState.java): `src/main/java/com/examples/states/MyBaseState.java`
- [Editor state](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/NavMeshEditorState.java): `src/main/java/com/examples/states/NavMeshEditorState.java`
- [Terrain state](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/states/TerrainState.java): `src/main/java/com/examples/states/TerrainState.java`
- [Fractal heightmap](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/FractalHeightMap.java): `src/main/java/com/examples/terrain/FractalHeightMap.java`
- [Instance culling](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/MyInstanceCullingFunction.java): `src/main/java/com/examples/terrain/MyInstanceCullingFunction.java`
- [Tree generator](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/terrain/TreeGenerator.java): `src/main/java/com/examples/terrain/TreeGenerator.java`
- [Game object](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/GameObject.java): `src/main/java/com/examples/util/GameObject.java`
- [Main camera](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/MainCamera.java): `src/main/java/com/examples/util/MainCamera.java`
- [Physics debug toggle](https://github.com/capdevon/jme3-artificial-intelligence/blob/main/src/main/java/com/examples/util/TogglePhysicsDebugState.java): `src/main/java/com/examples/util/TogglePhysicsDebugState.java`

### Other components

- **Game developer**

## Connections

- Game developer → Geometry collection: selects geometry
- Geometry collection → Terrain conversion: converts terrain (evidence: `src/main/java/com/jme3/ai/navmesh/gen/GeometryProviderBuilder.java`)
- Game developer → Navmesh builder: configures build
- Navmesh builder → Build settings: uses settings (evidence: `src/main/java/com/jme3/ai/navmesh/gen/NavMeshBuilder.java`)
- Game developer → Settings persistence: saves settings
- Settings persistence → Build settings: loads settings (evidence: `src/main/java/com/jme3/ai/navmesh/gen/NavMeshProperties.java`)
- Navmesh agent → Path viewer: draws path (evidence: `src/main/java/com/jme3/ai/control/NavMeshAgent.java`)
- Threaded agent → Path viewer: draws path (evidence: `src/main/java/com/jme3/ai/control/NavMeshAgentMT.java`)
