Crates.io | simple-game-engine |
lib.rs | simple-game-engine |
version | 0.8.3 |
source | src |
created_at | 2021-01-24 21:16:29.919994 |
updated_at | 2021-05-23 13:33:27.417952 |
description | A minimal game engine inspired by the OLC Pixel Game Engine |
homepage | https://github.com/mcb2003/simple-game-engine-rs#readme |
repository | https://github.com/mcb2003/simple-game-engine-rs |
max_upload_size | |
id | 346174 |
size | 48,816 |
This project aims to create a minimal, yet usable, game engine. It is heavily inspired by the Pixel Game Engine, with the goal of creating something that abstracts away the complexities of creating graphical, interactive apps and games. Right now, it's a thin wrapper around SDL2 (using the sdl2 crate) for visuals.
This is highly experimental so far, so if you have any ideas or would like to contribute, please sub mit an issue.
This crate uses the GNU Unifont for built-in text rendering. As such, if you wish to use this feature, you must distribute your project under the GPL. As this is not desirable for many projects, this feature is only enabled if this crate is built with the "unifont" cargo feature.
[dependencies.simple-game-engine]
version = "0.8.2"
features = ["unifont"]
If you'd like to render text without using this font, consider checking out the SDL2 TTF module
Add the following to your Cargo.toml
:
[dependencies]
simple-game-engine = "0.8.2"
This crate depends on sdl2, which can be built and linked in several ways:
Please see the sdl2 crate README for installation instructions for each platform.
The simplest SGE program looks like this:
use simple_game_engine::{self as sge, prelude::*};
use std::error::Error;
struct App {}
impl sge::Application for App {
fn on_create(
&mut self,
canvas: &mut WindowCanvas,
input: &InputState,
) -> sge::ApplicationResult {
// Do one-time initialisation here
Ok(true) // `true` indicates to continue running the application
}
fn on_update(
&mut self,
canvas: &mut WindowCanvas,
input: &InputState,
elapsed_time: f64,
) -> sge::ApplicationResult {
// Handle user input, update the canvas, and perform any other tasks to be ran on each frame
Ok(true) // `true` indicates to continue running the application
}
}
fn main() -> Result<(), Box<dyn Error>> {
let mut app = App {};
let mut engine = sge::Engine::new(
&mut app, // Application instance
"Test App", // Window title
640, // Window width
480, // Window height
)?;
engine.start(true) // `true` starts the app with vsync enabled
}
on_create
and on_update
are optional, but their default implementation does nothing, so
you'll probably want to define some logic for at least on_update
, which is called for every
frame.