1 unstable release

Uses old Rust 2015

0.0.1 May 25, 2018

#29 in #keyboard-events

MIT license

39KB
784 lines

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](TODO link 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).

  • Users only need to write Rust.
  • Minimal calls between Rust / Javascript.

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:

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:

use wasm_rgame::{KeyManager, key_codes};

pub fn store_direction_change(&mut self, key_manager: &KeyManager) {
    // Don't let direction change if already going opposite direction
    let wanted_direction = if key_manager.key_down(key_codes::W) {
        Direction::Up
    } else if key_manager.key_down(key_codes::D) {
        Direction::Right
    } else if key_manager.key_down(key_codes::S) {
        Direction::Down
    } else if key_manager.key_down(key_codes::A) {
        Direction::Left
    } else {
        return;
    };

    ...
}

How to Get Started

Read the [tutorial](TODO tutorial) and get started writing your own wasm-rgame application!

Dependencies

~82KB