1 unstable release

0.1.1 Jun 5, 2022
0.1.0 Apr 3, 2022

#583 in Graphics APIs

23 downloads per month

Zlib OR MIT OR Apache-2.0

64KB
1.5K SLoC

🐡 pufferfish

An opinionated 2D game framework for Rust

Docs Crates.io License

⚠️ DISCLAIMER: pufferfish is in very early stages of development. APIs can and will change, many basic features are missing, and parts of this README may not reflect the current state of the crate. I would recommend against using this in your projects just yet, but for those brave enough, now is the time for suggestions and feature requests!

Features

  • Minimal and opinionated API
  • Simple but flexible callback system
  • Easy input handling via polling
  • Efficient 2D renderer with sprite batching, powered by fugu
  • Asset loader with support for custom formats

Getting Started

To add pufferfish to your project, add the following to the dependencies section of your Cargo.toml:

pufferfish = "0.1"

See the examples/ directory in the source to get a feel of how pufferfish's API works.

A basic pufferfish program looks something like this:

use pufferfish::graphics::{Color, Graphics};
use pufferfish::App;

struct State {
    // Your game state...
}

fn main() {
    App::new()
        .with_title("Hello World")
        .add_state(State::new()) // Add your state
        .add_init_callback(init) // Add your callbacks
        .add_frame_callback(update)
        .add_frame_callback(draw)
        .run();
}

fn init(state: &mut State) {
    // Initialization code here...
}

fn update(state: &mut State) {
    // Update code here...
}

// Request arbitrary state through the callback's type signature
fn draw(state: &State, g: &Graphics) {
    g.clear(Color::BLACK);
    g.begin();
    // Draw code here...
    g.end();
}

Acknowledgements

  • raylib, an awesome single-header C library to "enjoy videogames programming"
  • bevy, a beautifully designed data-driven game engine built in Rust
  • Kha, a portable multimedia framework for the Haxe programming language

Dependencies

~22MB
~475K SLoC