[][src]Crate 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 one currently being audio playback). 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
  • Simple input handling
  • Animations/spritesheets
  • TTF font rendering
  • Multiple screen scaling algorithms, including pixel-perfect variants (for those chunky retro pixels)
  • Deterministic game loop, à la Fix Your Timestep

Installation

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

tetra = "0.2"

Tetra currently requires Rust 1.31 or higher.

You will also need to install the SDL2 native libraries, as described here. The 'bundled' and 'static linking' features described can be activated using the sdl2_bundled and sdl2_static_link Cargo features in Tetra.

Examples

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

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

struct GameState;

impl State for GameState {
    fn draw(&mut self, ctx: &mut Context, _dt: f64) -> tetra::Result {
        // Cornflour blue, as is tradition
        graphics::clear(ctx, Color::rgb(0.392, 0.584, 0.929));
        Ok(())
    }
}

fn main() -> tetra::Result {
    ContextBuilder::new("Hello, world!", 1280, 720)
        .build()?
        .run(&mut GameState)
}

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

The full list of examples available are:

  • hello_world - Opens a window and clears it with a solid color.
  • texture - Loads and displays a texture.
  • animation - Displays an animation, made up of regions from a texture.
  • text - Displays text using a TTF font.
  • nineslice - Slices a texture into nine segments to display a dialog box.
  • keyboard - Moves a texture around based on keyboard input.
  • mouse - Moves a texture around based on mouse input.
  • gamepad - Displays the input from a connected gamepad.
  • text_input - Displays text as it is typed in by the player.
  • scaling - Demonstrates the different screen scaling algorithms.
  • shaders - Uses a custom shader to render a texture.
  • tetras - A full example game (which is entirely legally distinct from a certain other block-based puzzle game cough).

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, or find me lurking in the #gamedev channel on the Rust Community Discord.

Re-exports

pub use glm;
pub use crate::error::Result;
pub use crate::error::TetraError;

Modules

error

Functions and types relating to error handling.

graphics

Functions and types used for rendering to the screen.

input

Functions and types relating to handling user input (e.g. keyboards, mice, gamepads).

time

Functions and types relating to measuring and manipulating time.

window

Functions and types relating to the game window.

Structs

Context

A struct containing all of the 'global' state within the framework.

ContextBuilder

Creates a new Context based on the provided options.

Traits

State

A trait representing a type that contains game state and provides logic for updating it and drawing it to the screen. This is where you'll write your game logic!