tetra 0.1.0

A simple 2D game framework written in Rust
Documentation
# Tetra


Tetra is a simple 2D game framework written in Rust. It uses SDL2 for event handling and OpenGL 3.2+ for rendering.

**Note that Tetra is still extremely early in development!** It may/will have bugs and missing features (the big ones currently being sound and gamepad support). That said, you're welcome to give it a go and let me know what you think :)

## Features


* XNA/MonoGame-inspired API
* Efficient 2D rendering, with draw call batching by default
* Animations/spritesheets
* Pixel-perfect screen scaling 
* Deterministic game loop, à la [Fix Your Timestep]*https://gafferongames.com/post/fix_your_timestep/.

## Installation


To add Tetra to your project, add the following line to your `Cargo.toml` file:

```
tetra = "0.1"
```

You will also need to install the SDL2 native libraries, as described [here](https://github.com/Rust-SDL2/rust-sdl2#user-content-requirements).

## Examples


To get a simple window displayed on screen, the following code can be used:

```rust
extern crate tetra;

use tetra::error::Result;
use tetra::graphics::{self, Color};
use tetra::{Context, ContextBuilder, State};

struct GameState;

impl State for GameState {
    fn update(&mut self, _ctx: &mut Context) {}

    fn draw(&mut self, ctx: &mut Context, _dt: f64) {
        // Cornflour blue, as is tradition
        graphics::clear(ctx, Color::rgb(0.392, 0.584, 0.929));
    }
}

fn main() -> Result {
    let ctx = &mut ContextBuilder::new()
        .title("Hello, world!")
        .quit_on_escape(true)
        .build()?;

    let state = &mut GameState;

    tetra::run(ctx, state)
}
```

You can see this example in action by running `cargo run --example hello_world`.

The full list of examples available are:

* [`hello_world`]examples/hello_world.rs - Opens a window and clears it with a solid color.
* [`texture`]examples/texture.rs - Loads and displays a texture.
* [`keyboard`]examples/keyboard.rs - Moves a texture around based on keyboard input.
* [`mouse`]examples/mouse.rs - Moves a texture around based on mouse input.
* [`tetras`]examples/tetras.rs - A full example game (which is entirely legally distinct from a certain other block-based puzzle game *cough*).


If you're looking for a more stable framework to use, [GGEZ](https://github.com/ggez/ggez/), [Amethyst](https://www.amethyst.rs) or [Quicksilver](https://github.com/ryanisaacg/quicksilver/) are probably your best bets right now.

## Support/Feedback


As mentioned above, Tetra is fairly early in development, so there's likely to be bugs/flaky docs/general weirdness. Please feel free to leave an issue/PR if you find something!

You can also contact me via [Twitter](https://twitter.com/17cupsofcoffee), or find me lurking in the #gamedev channel on the [Rust Community Discord](https://bit.ly/rust-community).