#game-engine #2d-game #texture #window #graphics #input #sound

darkengine

2D game engine written in Rust

1 unstable release

Uses old Rust 2015

0.1.0 Sep 7, 2018

#2033 in Game dev

MIT/Apache

53KB
1.5K SLoC

2D game engine providing graphics, audio and input.

It's in development, so it's subject to constant change. Features planned include:

  • more efficient rendering for textures and dynamic fonts
  • shaders
  • 3D graphics

Physics are not included. You can use any library for that, or none.

Example

#[macro_use]
extern crate darkengine;

use darkengine::app::*;
use darkengine::window::*;
use darkengine::graphics::Texture;
use darkengine::input::{InputEvent, Key};
use darkengine::audio::{SoundStream, Sound};

struct Game {
	tex: Option<Texture>,
	music: Option<SoundStream>,
	x: i32
}

impl App for Game {
	fn load(&mut self, args: LoadArgs) {
		self.tex = Some(Texture::load(canon_str!("assets/test.png"), args.display).unwrap());
		let mut music = SoundStream::load(canon_str!("assets/music.ogg"), args.audio).unwrap();
		music.play(args.audio);
		self.music = Some(music);
	}

	fn update(&mut self, args: UpdateArgs) {
		if args.window.is_key_pressed(Key::A) {
			self.x -= 10;
		}
		if args.window.is_key_pressed(Key::D) {
			self.x += 10;
		}
	}

	fn render(&mut self, args: RenderArgs) {
		args.renderer.draw_texture(self.tex.as_ref().unwrap(), 300 + self.x, 100);
		args.renderer.draw_text("Example", 20, 20, 1.0, 1.0, 1.0, 1.0);
	}
	
	fn input(&mut self, args: InputArgs) {
		match args.event {
			InputEvent::KeyDown(Key::Escape) => {
				args.window.stop();
			},
			_ => {}
		}
	}

	fn close(&mut self, args: CloseArgs) {
		args.window.stop();
	}
}

fn main() {
	let mut window = Window::new(WindowDef {
		title: "Example".to_owned(),
		width: 640,
		height: 480,
		.. Default::default()
	});
	window.main_loop(&mut Game {tex: None, music: None, x: 0});
}

Dependencies

~21–33MB
~394K SLoC