[![Crates.io](https://img.shields.io/crates/v/rhachis?style=flat-square)](https://crates.io/crates/rhachis) [![Crates.io](https://img.shields.io/crates/d/rhachis?style=flat-square)](https://crates.io/crates/rhachis) [![Docs.rs](https://img.shields.io/docsrs/rhachis?style=flat-square)](https://docs.rs/rhachis) # Rhachis Rhachis is a Rust framework primarily intended for making games. It intends to be as simple as possible, while still allowing all of the customisation you could want. The core of the framework is its `Game` trait and `GameData` struct. The `Game` trait is the root of your project. Functions on it are called by the engine to perform many things like update game logic or initialise the game. A reference to the `GameData` struct is passed to these functions to access core components of the engine. These core components are all thread-safe, locked behind `RwLock`s if necessary. ## Basic Usage To start using Rhachis run `cargo add rhachis` to add the latest version to your `Cargo.toml`. The code below shows the basic structure of a Rhachis project. ```rust use rhachis::{graphics::EmptyRenderer, *}; // A procedural macro that starts the game from your struct. #[run] // The EmptyRenderer is a renderer that does nothing and acts as a placeholder. struct Window(EmptyRenderer); // The Game trait handles the core event loop. impl Game for Window { // Called to initialise the game state after core engine starts. fn init() -> Self { Self(EmptyRenderer) } // Used to get the current renderer. It is in this function so that // renderers can be swapped on the fly. fn get_renderer(&mut self) -> &mut dyn graphics::Renderer { &mut self.0 } } ``` More in depth examples can be found in the repository's [examples directory](https://github.com/SalsaGal/rhachis/tree/master/examples). ## Acknowledgements - Open Sans font from [Google Fonts](https://github.com/googlefonts/opensans)