2D Vulkan game framework, written entirely in Rust.
- About
- Features
- Goals and Non-goals
- Contributing
- Requirements
- Getting Started
- Tutorials and Documentation
sidekick is a free and open-source game framework under the MIT license that allows developers to create stunning 2D video games, prototypes, desktop apps and everything in between. It uses glutin for window context management and rgx as the rendering engine.
sidekick is subject to change as it is actively developed so expect things to break (😅).
sidekick is an educational project for learning purposes, feel free to use it in personal and commercial projects, just keep in mind that support is minimal.
- Window Management
- Cursor Management
- Keyboard Input Handling
- Mouse Input Handling
- Game Time Management
- Debugging Tools
- Basic Shapes Rendering (Line, Triangle, Circle)
- Custom Math & Logic Library
- Gamepad Input Handling
- Custom Polygonal Shape Rendering
- Text Rendering
- Sprite Rendering
- Audio Playing
- Animations
- 2D Physics
- 2D Lighting & Shadow
- Profiling Tools
- Custom Test Framework
- And more to be added...
You can always refer to the sidekick project board for more details on features being implement.
- Intuitive and Accessible.
- Fast and Easy to get started.
- Performance.
- Cross-platform.
- 3D Rendering.
- AAA-level Graphics.
- GUI Editor.
sidekick is completely open to community contribution. Any effort to help expand the scope and capability of the framework is greatly appreciated 🤗.
Please make sure that you follow the Rust API Guidelines when making a pull request, just to make the codebase clear and consistent 😊.
- Rust compiler and Cargo package manager, you can download them here.
- A code editor of your choice.
To create a basic sidekick app:
-
Create a new project with Cargo using
cargo new project-name --bin
. -
In your
Cargo.toml
, add:
[dependencies]
sidekick = { git = "https://github.com/ThaiDuongVu/sidekick" }
- In your
main.rs
, add:
use sidekick::app::App;
fn main() {
// Create a sidekick app
let app = App::new();
// Initialize app before first frame update
// Note: Dynamic environment should be initialized outside of init
let init = move |app: &mut App| {};
// Update and render game objects every frame
let update = move |app: &mut App| {};
// Run app
app.run(init, update);
}
-
Build and run the project with
cargo run
. -
You should see the following window by default:
You can refer to the wiki page (whenever it's live 🤷♂️) for an in-depth guide to sidekick.
There are a handful of examples to learn from. To run them simply run the command cargo run --example example-name
where example-name
is, well, the name of the example to run.
Well first of all you can implement it yourself (the power of open source 😏).
You can also go to the issues tab and submit a new issue (remember to add the "feature request" label).