diff --git a/README.md b/README.md index e69de29..703cb23 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,63 @@ +LimboAI - Behavior Trees and Hierarchical State Machines for Godot Engine 4 +--- +LimboAI is a C++ module for Godot 4 that provides an implementation of Behavior Trees and State Machines, which can be used together to create complex AI behaviors. + +>**🛈 Supported Godot Engine: 4.1** + +>**🛈 License**: Use of this source code is governed by an MIT-style license that can be found in the LICENSE file or at https://opensource.org/licenses/MIT. + +![Textured screenshot](doc/images/behavior-tree-editor.png) + +![Textured screenshot](doc/images/behavior-tree-debugger.png) + +## Features + +- Behavior Trees (BT): + - Use the `BTPlayer` node to execute `BehaviorTree` resources. + - Easily create, edit, and save `BehaviorTree` resources within the editor. + - Combine and nest tasks in a hierarchy to create complex behaviors. + - Control the flow of execution using composite, decorator, and condition tasks. + - Write your own tasks by extending core classes: `BTAction`, `BTCondition`, `BTDecorator` and `BTComposite`. + - Built-in class documentation. Check out the `BehaviorTree` and `BTTask` class documentation to get started. + - Utilize the `Blackboard` for seamless data sharing between tasks. + - Use the `BTSubtree` task to execute a tree from a different resource file, promoting organization and reusability. + - Blackboard scopes separate namespaces of variables from subtrees, and enable advanced techniques like sharing data among agents in a group. + - Visual Debugger: Inspect the execution of any BT in a running scene to identify and troubleshoot issues. + - Evaluate the performance of your trees with custom performance monitors. +- Hierarchical State Machine (HSM) + - Extend `LimboState` class to implement state logic. + - `LimboHSM` node serves as a state machine that manages `LimboState` instances and transitions. + - `LimboHSM` is a state itself and can be nested within other `LimboHSM` instances. + - Event-based: Transitions are associated with events, and are triggered by the state machine when the relevant event is dispatched, allowing for better decoupling of transitions from state logic. + - Combine state machines with behavior trees using `BTState` for advanced reactive AI. + - Delegation: Instead of extending `LimboState`, utilize vanilla `LimboState` and delegate implementation to provided callback functions. Perfect for game jams and quick prototyping. + - 🛈 Note: Currently, state machine transition setup and initialization must be done through code as there is no GUI editor for state machines at the moment. + +## Compiling + +> 🛈 Compiled releases are a WIP + +To incorporate this module, you'll need to build Godot Engine from source with LimboAI module included. + +Building From Source: + +- Download the Godot Engine source code and put this module source into the `modules/limboai` directory. +- Consult the Godot Engine documentation for instructions on [how to build from source code](https://docs.godotengine.org/en/stable/contributing/development/compiling/index.html). +- If you plan to export a game utilizing the LimboAI module, you'll need to build export templates as well. + +## Contributing + +All contributions are welcome! Feel free to open issues with bug reports and feature requests, and submit PRs. + +## Roadmap + +Features and improvements that may be implemented in the future: + +- Providing compiled builds for download. +- Creating a non-trivial demo project to showcase the capabilities of LimboAI. +- Exploring the execution history of Behavior Trees in the Visual Debugger. +- Tests and CI. +- Expanding the library of tasks that can be optionally included in the build. +- Implementing an ignore list for tasks that users may want to hide in the task panel. +- GUI editor for state machines. +- Supporting GDExtension in the future, once it matures. diff --git a/doc/images/behavior-tree-debugger.png b/doc/images/behavior-tree-debugger.png new file mode 100644 index 0000000..06acdc8 Binary files /dev/null and b/doc/images/behavior-tree-debugger.png differ diff --git a/doc/images/behavior-tree-editor.png b/doc/images/behavior-tree-editor.png new file mode 100644 index 0000000..d981622 Binary files /dev/null and b/doc/images/behavior-tree-editor.png differ