Expand description

An opinionated 2D game framework for Rust.

Docs Crates.io License

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();
}

Modules

Types relating to resource management and asset loading.

Types relating to graphics and drawing.

Types relating to user input.

Types related to fonts and text rendering.

Structs

A pufferfish application.

A heterogeneous collection that can store one value of each type.

Traits

An interface for callbacks.