kero 0.1.6

A simple, approachable framework for creating 2D games in Rust and/or Lua.
Documentation

Kero

An approachable cross-platform framework for creating 2D games in either Rust, Lua, or both.

⚠️ KERO IS CURRENTLY IN UNSTABLE ALPHA TESTING PHASE AND NOT FOR GENERAL USE

✅ Features

Kero is a pure-code framework that programmers can use to code their games or even to build their own game engines. It provides:

  • 🖥️ a window, game loop, and rendering context out of the box and ready to go
  • 🎮 mouse, keyboard, and gamepad input as well as virtual input mapping
  • 🖼️ shaders, surfaces, textures, and other graphics resources
  • 🖌️ a straightforward but powerful canvas-style drawing API
  • 🧮 various math types for vectors, matrices, rotations, etc.
  • 📐 geometry types for various shapes, overlap testing, extraction, raycasting, etc.
  • 🎨 tools for working with colors, image encoding, decoding, and manipulation
  • 🧳 texture packing and other techniques for rendering optimization
  • 🦀 full access to Rust's speed, power, ecosystem, and pleasure of use
  • 🌙 full Lua bindings if desired, with LuaLS type annotations

💡 Getting started

There's no fancy setup required, Kero is just a normal crate. To create a new empty game project, first create it and add kero as a dependency:

cargo new --bin my_game
cd my_game
cargo add kero

Then, replace src/main.rs with the following:

use kero::prelude::*;

fn main() -> Result<(), GameError> {
    env_logger::init();

    // create a game, set some options, and then run it
    kero::new_game()
        .with_title("My Game")
        .with_size(1280, 720)
        .run::<MyGame>(())
}

// store your game state and graphics resources here
pub struct MyGame {}

impl Game for MyGame {
    type Config = ();

    // initialize your game state here, such as creating graphics resources, etc.
    fn new(ctx: &Context, cfg: Self::Config) -> Result<Self, GameError>
    where
        Self: Sized,
    {
        Ok(Self {})
    }

    // perform your game logic here
    fn update(&mut self, ctx: &Context) -> Result<(), GameError> {
        Ok(())
    }

    // perform your drawing code here
    fn render(&mut self, ctx: &Context, draw: &mut Draw) -> Result<(), GameError> {
        Ok(())
    }
}

The examples folder has a bunch of examples you can check out to see how different things are done.

💃 Join the community

Join our Discord to chat, get help, report bugs, and share what you're working on!

Check out our {{TODO: Contributing}} page if you're interested in helping maintain and improve the project.

Say hello to our mascot {{TODO: MASCOT_NAME}}.