Expand description

TermGame is a small crate that extends tui-rs to make it easy to write TUI games.

Mainly used in COMP6991 at the University of New South Wales, the crate provides the Controller trait, which is accepted by the run_game function to start a game using a Crossterm TUI (provided by tui-rs).

It also wraps many tui features, like StyledCharacter, GameEvent, and Style


use termgame::{Controller, Game, GameEvent, StyledCharacter, run_game};
use std::error::Error;
use std::time::Duration;

struct MyGame {}

impl Controller for MyGame {
    fn on_start(&mut self, game: &mut Game) {
    }

    fn on_event(&mut self, game: &mut Game, event: GameEvent) {
        match event {
            GameEvent::Char('a') => {
                game.set_screen_char(1, 1, Some(StyledCharacter::new('a')))
            },
            _ => {}
        }

    }

    fn on_tick(&mut self, _game: &mut Game) {}
}

fn main() -> Result<(), Box<dyn Error>> {
    let mut controller = MyGame {};

    // run_game(&mut controller, Duration::from_millis(500))?;

    println!("Game Ended!");

    Ok(())
}

Structs

A widget that shows a small view into an infinitely sized map.
A ChunkMap is an infinite 2D plane consisting of elements of type T. It’s basically a HashMap, but using a HashMap would have terrible iteration performance; so it stores values in “chunks”. Each Chunk is stored in a HashMap, and individual elements are accessed by finding the address of their chunk, then getting them by offset.
Modifier changes the way a piece of text is displayed.
The Game struct is passed to all of the Controller’s event methods, to allow the implementor to view and modify the state of the game.
This struct models how to show a character in Termgame.
The Message struct is used when displaying a message to a user.
A character with a given style.
The ViewportLocation describes the top-left

Enums

These are different reasons a game could end.
Represents a key.

Constants

The required screen height termgame can play at. Set to the size of a standard vt100
The required screen width termgame can play at.

Traits

The Controller trait must be implemented on a struct in order to control a Termgame Game.

Functions

Starts a game with a given Controller, which refreshes at the given tick_rate (a Duration).

Type Definitions

This is a ChunkMap (an infinite 2D map) of ScreenCharacters