# figs
A simple framework for making 2D games with Rust.
[![Crates.io version][crate-img]][crate]
[![Documentation][docs-img]][docs]
[![License][license-img]][license]
### Features
- [x] Graphics and basic input management via `minifb`
- [ ] Entity management, including animation and collisions
- [x] Asset loading from filesystem or tarball via `tar` and `regex`
- [x] Image support via `png`
- [ ] Audio playback via `cpal` and `hound`
### Usage
Add the following to your `Cargo.toml`:
```
figs = "0.0.1"
```
### Quick start
```rust
use figs::prelude::*;
fn main() -> FigResult<()> {
// Initialize the canvas and input
let mut canvas = Canvas::new("simple example", (320, 320), 60)?;
let mut input = InputManager::new();
// Load assets from assets.tgz
let mut assets = AssetLoader::from_tar("examples/assets.tgz");
// You can also load assets from the assets directory
// let mut assets = AssetLoader::from_dir("examples/assets");
// Create some entities, using assets from the tarball
let mut blob = Entity::new((100.0, 100.0), assets.load_png_dir("blob")?, (8, 8), 20);
// We want to control blob with WASD or arrow keys
input.wasd();
input.arrows();
// We would also like to exit when ESC is pressed
input.add(Key::Escape);
// Main event loop (do something more interesting here)
while canvas.is_open() {
// Handle keypress events
for key in &input.keys {
if canvas.key_down(*key) {
match key {
Key::W | Key::Up => blob.mov(0.0, -1.0),
Key::A | Key::Left => blob.mov(-1.0, 0.0),
Key::S | Key::Down => blob.mov(0.0, 1.0),
Key::D | Key::Right => blob.mov(1.0, 0.0),
Key::Escape => return Ok(()),
_ => (),
}
}
}
// Update entities (advance animation, etc)
blob.update();
// Update the canvas with the entities
canvas.clear();
canvas.draw(&blob);
canvas.update()?;
}
Ok(())
}
```
See `examples/` for more detailed examples.
### Contributing
Issues and pull requests are welcome.
[crate-img]: https://img.shields.io/crates/v/figs.svg
[crate]: https://crates.io/crates/figs
[license-img]: https://img.shields.io/crates/l/figs.svg
[license]: https://opensource.org/license/mit
[docs-img]: https://img.shields.io/badge/docs-online-blue.svg
[docs]: https://docs.rs/figs