wasm-rgame

A Rust framework for building browser games with WASM.

This framework was inspired by the Game of Life Rust + WASM Tutorial. You can dive right in and start writing a wasm-rgame application with the tutorial!

How It Works

This framework abstracts away writing custom HTML/Javascript and provides Rust types that interface with the Javascript bundled in the wasm-rgame-js repository.

The Rust API provides types for: * Keyboard events * Mouse position and events * Rendering API to a 2D canvas * Spawning new objects in the Application

Also, a build tool (wasm-rgame-tools) is provided that builds the project (targeting wasm32-unknown-unknown), runs wasm-bindgen, and bundles together the generated WASM binaries and Javascript/HTML.

Goals

This project is mainly experimental, but has been used to make non-trivial applications (see wrg-snake).

Example API Usage

These examples are taken from wrg-snake. Also note that these examples can't be run stand-alone as they require the Javascript/HTML framework.

Rendering a transparent overlay: ```rust use wasm_rgame::{Delegate, Graphics};

impl Delegate for MyObject { fn tick(..) {}

fn render(&self, graphics: &mut Graphics) {
    // draw a transparent overlay over the game
    graphics.draw_rect(
        0.0,
        0.0,
        CANVAS.width() as f32,
        CANVAS.height() as f32,
        [255, 255, 255, 150]
    );
}

} ```

Checking keyboard input: ```rust use wasmrgame::{KeyManager, keycodes};

pub fn storedirectionchange(&mut self, keymanager: &KeyManager) { // Don't let direction change if already going opposite direction let wanteddirection = if keymanager.keydown(keycodes::W) { Direction::Up } else if keymanager.keydown(keycodes::D) { Direction::Right } else if keymanager.keydown(keycodes::S) { Direction::Down } else if keymanager.keydown(keycodes::A) { Direction::Left } else { return; };

...

} ```

How to Get Started

Read the tutorial and get started writing your own wasm-rgame application!